汇编语言第二章总结
第二章里我们学习了寄存器的内容。了解到一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。前一章所说的总线,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。在CPU中,运算器进行信息处理;寄存器进行信息存储;控制器控制各种器件进行工作;内部总线连接各种器件, 在它们之间进行数据的传送。
对于一个汇编程序员来说,CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。不同的CPU,寄存器的个数、结构是不相同的。8086CPU有14个寄存器,每个寄仔器有一个名称。这些寄存器是: AX、BX、CX、DX、SI、 DI、SP、BP、IP、 CS、SS、DS、ES、PSW。
一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8.位寄存器和低8位寄存器中。若一个字型数据20000, 存在AX寄存器中,在AH中存储了它的高8位,在AL中存储了它的低8位。AH和AL中的数据,既可以看成是一个字型数据的高8位和低8位,这个字型数据的大小是20000;又可以看成是两个独立的字节型数据,它们的大小分别是78和32。
CPU访问内存单元时,要给出内存单元的地址。所有的内存单元构成存储空间是一个一维的线性空间,每一一个内存单元在这个空间中都有唯一的地址, 我们将这个唯一的地址称为物理地址。CPU通过地址总线送入存储器的,必须是一一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以有不同的形成物理地址的方式。
在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址x16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。有两点需要注意: 段地址x16必然是16的倍数,所以一个段的起始地址也一定是16的倍数; 偏移地址为16位,16位地址的寻址能力为64KB, 所以一个段的长度最大为64KB。
CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP 为指令指针寄存器,从名称上我们可以看出它们和指令的关系。在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存Mx16+N单元开始,读取一条指令 并执行。
在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。
我们在适当的时候,会用已知的汇编指令的语法来描述新学的汇编指令的功能。采用一种“用汇编解释汇编”的方法来使读者更好地理解汇编指令的功能,这样做有助于读者进行知识的相互融会。要强调的是,我们是用“已知的汇编指令的语法”进行描述,并不是用“已知的汇编指令”来描述。