汇编语言2-寄存器

一、通用寄存器

汇编语言2-寄存器
汇编语言2-寄存器
一个16位寄存器可以存储一个16位的数据,数据在寄存器中的存放情况如图2.2所示。

汇编语言2-寄存器
8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行在8086之上,8086CPU的AX、BX、CX、DX这4个寄存器都可分为两个可独立使用的8位寄存器来用:

  • AX可分为AH和AL
  • BX可分为BH和BL
  • CX可分为CH和CL
  • DX可分为DH和DL

以AX为例,8086CPU的16位寄存器分为两个8位寄存器的情况如图2.3所示:
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器

二、字在寄存器中的存储

汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器

在后面的表述中,为了区分不同的进制,在16进制的数据后面加H,在二进制表示的数据后面加B,十进制表示的数据后面什么都不加。

三、几条汇编指令

汇编语言2-寄存器

四、物理地址

CPU访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。

CPU通过地址总线送入寄存器的,必须是一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以由不同的形成物理地址的方式,接下来讨论8086CPU如何在内部形成内存单元的物理地址。

五、16位结构的CPU

汇编语言2-寄存器

六、8086CPU给出物理地址的方法

汇编语言2-寄存器
汇编语言2-寄存器
如上图所示,当8086CPU要读写内存时:

  1. CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址
  2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
  3. 地址加法器将两个16位地址合成为一个20位的物理地址
  4. 地址加法器通过内部总线将20位物理地址送入输入输出控制电路
  5. 输入输出控制电路将20位物理地址送上地址总线
  6. 20位物理地址被地址总线传送到存储器

汇编语言2-寄存器
汇编语言2-寄存器

七、“段地址*16+偏移地址=物理地址”的本质含义

汇编语言2-寄存器
用一个例子来说明这种思想:

假设学校、体育馆、图书馆在同一条笔直的单行路上,如图2.8所示,学校位于路的起点。
汇编语言2-寄存器
假如我们只能通过纸条来互相通信,这时你问我图书馆的地址我只能将它写在纸上告诉你。显然,我必须有一张可以容纳4位数据的纸条,才能写下2826这个数据:
汇编语言2-寄存器
可不巧的是,我没有能容纳四位数据的纸条,仅有两张可以容纳3位数据的纸条。这样我只能以这种方式告诉你2826这个数据:
汇编语言2-寄存器
在第一张纸上写上200(段地址),在第二张纸上写上826(偏移地址)。假设我们事前对这种情况又有过相关的约定:在你得到这两张纸后,做这样的运算:200(段地址)*10+826(偏移地址)=2826(物理地址)

8086CPU就是这样一个只能提供两张3位数据纸条的CPU。

八、段的概念

段的划分来自于CPU,由于8086CPU用“基础地址(段地址*16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。如下图所示,我们可以认为:地址10000H-100FFH的内存单元组成一个段,该段的起使地址(基础地址)为10000H,段地址为1000H,大小为100H;我们也可以认为地址10000H-1007FH、10080H-100FFH的内存单元组成两个段,它们的起使地址(基础地址)为:10000H和10080H,段地址为:1000H和1008H,大小都为80H。

汇编语言2-寄存器
汇编语言2-寄存器

九、段寄存器

汇编语言2-寄存器

十、CS和IP

汇编语言2-寄存器
下图展示了8086CPU读取、执行指令的工作原理(图中只包括了和所要说明的问题密切相关的部件,图中数字都为16进制)。

汇编语言2-寄存器
上图说明如下:

  1. 8086CPU当前状态:CS中的内容为2000H,IP中的内容为0000H
  2. 内存20000H-20009H单元存放着可执行的机器码
  3. 内存20000H-20009H单元中存放的机器码对应的汇编指令如下。
    汇编语言2-寄存器

下面的一组图(图2.11-图2.19),以图2.10描述的情况为初始状态,展示了8086CPU读取、执行一条指令的过程。注意每幅图中发生的变化(下面对8086CPU的描述,是在逻辑结构、宏观过程的层面上进行的,隐蔽了CPU的物理结构以及具体的工作细节)。

汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
汇编语言2-寄存器
通过上面的过程展示,8086CPU的工作过程可以简要描述如下:

  1. 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器
  2. IP=IP+所读取指令的长度,从而指向下一条指令
  3. 执行指令,转到步骤1,重复这个过程

汇编语言2-寄存器
汇编语言2-寄存器

十一、修改CS、IP的指令

汇编语言2-寄存器
汇编语言2-寄存器

十二、代码段

汇编语言2-寄存器

相关文章: