汇编语言基础知识
1.1 机器语言
机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之变为一系列的高低电平,以便计算机的电子器件受到驱动,进行计算。
上面所说的计算机是指可以执行机器指令,进行运算的机器。这是早期计算机的概念。现在,在我们的PC中,CPU完成了上面所说的计算机的功能,CPU是一种微处理器。
每一种微处理器,由于硬件设计和内部结构不同,就需要不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。
1.2 汇编语言的产生
由于机器语言难以辨别和记忆(都是0和1),因此汇编语言产生了。
汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。
例如:机器指令1000100111011000表示巴寄存器BX的内容送到AX中。汇编指令则写成mov ax,bx。这样的写法与人类语言接近,便于阅读和记忆。
操作:寄存器BX的内容送到AX中。
机器指令:1000100111011000
汇编指令:mov ax,bx
(寄存器,简单地讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。)
用汇编语言编写程序的工作过程:
1.3 汇编语言的组成
汇编语言发展至今,有以下3类指令组成。
(1)、汇编指令:机器码的助记符,有对应的机器码。
(2)、伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
(3)、其他符号:如+、-、*、/等,由编译器识别,没有对应的机器码。
1.4 存储器
CPU是整个计算机的核心部件,它控制整个计算机的运作并进行运算。要想让一个CPU工作,就必须向它提供数据和指令。指令和数据在存储器中存放,也就是我们平时所说的内存。
1.5 指令和数据
指令和数据是应用上的概念。在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。CPU在工作的时候把有的信息看作指令,有的信息看作数据。
如,内存中的二进制信息 1000100111011000,计算机可以把它看作大小为 89D8H的数据来处理,也可以将其看作指令mov ax,bx来执行。
1000100111011000 -> 89D8H (数据)
1000100111011000 -> mov ax,bx (程序)
1.6 存储单元
存储器被划分成若干个存储单元,每个存储单元从0开始编号,例如一个存储器有 128 个存储单元,编号从0~127。
电子计算机的最小信息单位是bit,也就是一个二进制位。8个bit组成一个Byte,也就是通常讲的一个字节。微型机存储器的存储单元可以存储一个Byte,即8个二进制位。一个存储器有128个存储单元,它可以存储128个Byte。
1.7 CPU对存储器的读写
CPU要从内存中取数据,首先要制定存储单元的地址。也就是说它要先确定它要读取哪一个存储单元中的数据。
另外,CPU在读写数据时还要指明,它要对哪一个器件进行操作,进行哪种操作,是从中读出数据 ,还是向里面写入数据。
可见,CPU要想进行数据读写,必须和外部器件(标准的说法是芯片)进行下面3类信息的交互。
- 存储单元的地址(地址信息);
- 器件的选择,读或写的命令(控制信息);
- 读或写的数据(数据信息)。
那么CPU是通过什么将地址、数据和控制信息传到存储器芯片中的呢?电子计算机能处理、传输的都是电信号,电信号当然要用导线传送。在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。总线从物理上讲,就是一根根导线的集合,根据传送信息的不同,总线从逻辑上又分类 3 类,地址总线、控制总线、数据总线。
CPU 从 3 号单元中读取数据的过程如下。
(1) CPU通过地址线将地址信息 3 发出。
(2)CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据。
(3)存储器将 3 号单元中的数据 8 通过数据线送入CPU。
1.8 地址总线
现在我们知道,CPU是通过地址总线来指定存储器单元的。可见地址总线上能传送多少不同的信息,CPU就可以对多少个存储单元进行寻址。
我们知道,在电子计算机中,一个CPU可以传送的稳定状态只有两种,高电平或低电平。用二进制表示就是1或0,10根导线可以传送10位二进制数据。而10位二进制数可以表示多少个不同的数据呢?2的10次方。
下图展示了一个具有10根地址线的CPU向内存发出地址信息 11 时 10 根地址线上传送的二进制信息。11 转为二进制就是 1011
一个 CPU 具有 N 根地址线,则可以说这个 CPU 的地址总线的宽度为N。这样的 CPU 最多可以寻址 2 的 N 次方个内存单元。
1.9 数据总线
CPU 与内存或其他器件之间的数据传送是通过数据总线来进行的。数据总线的宽度决定了 CPU 和外界的数据传送速度。8 根数据总线一次可以传送一个 8 位二进制数据(即一个字节)。16根数据总线一次可传送两个字节。
8088CPU 数据总线宽度是 8,8086CPU 的数据总线宽度是16。
下图展示了我们向内存中写入数据 89D8H时,是如何通过数据总线传送数据的。
8086 有 16 根数据线,可一次传送16位数据,所以可一次传送数据 89D8H;而 8088CPU只有 8 根数据线,一次只能传输 8 位数据,所以向内存写入 89D8H 时需要进行两次数据传送。
1.10 控制总线
CPU 对外部器件的控制是通过控制总线来运行的。在这里控制总线只是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着 CPU 提供了对外部器件的多少种控制。所以,控制总线的宽度决定了 CPU 对外部器件的控制能力。
前面所讲的内存读或写命令是通过几根控制线综合发出的,其中有一根称为"读信号输出"的控制线负责 CPU 向外传送读信号,CPU 向该控制线上输出低电平表示将要读取数据;有一根称为 "写信号输出" 的控制线则负责传送写信号。
1.1 ~ 1.10 小结
(1)、汇编指令是机器指令的助记符,同机器指令一一对应。
(2)、每一种 CPU 都有自己的汇编指令集。
(3)、CPU 可以直接使用的信息在存储器中存放。
(4)、在存储器中指令和数据没有任何区别,都是二进制信息。
(5)、存储单元从零开始顺序编号。
(6)、一个存储单元可以存储 8 个bit,即 8 位二进制数。
(7)、1Byte=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB
(8)、每一个 CPU芯片都有很多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。一个 CPU 可以引出 3 种总线的宽度标志了这个 CPU 不同方面的性能:
地址总线的宽度决定了CPU的寻址能力;
数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量;
控制总线的宽度决定了CPU对系统中其他器件的控制能力。