- AX可分为AH和AL;
- BX可分为BH和BL;
- CX可分为CH和CL;
- DX可分为DH和DL。
2.2 字在寄存器中的存储
8086CPU可以一次性处理以下两种尺寸的数据。
- 字节 :记为byte,一个字节由8个bit组成,可以存在8位寄存器中。
- 字 :记为word,一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节。一个字可以存在16位寄存器中。
2.3 几条汇编指令
- 汇编指令不区分大小写。
- 在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。
2.4 物理地址
所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。
2.5 16位结构的CPU
16位结构(16位机、字长为16位等常见说法,与16位结构的含义相同)描述了一个CPU具有下面几方面的结构特性。
- 运算器一次最多可以处理16位的数据;
- 寄存器的最大宽度为16位;
- 寄存器和运算器之间的通路为16位。
2.6 8086CPU给出物理地址的方法
8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位(地址总线)的物理地址。当8086CPU要读写内存时:
- CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;
- 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
- 地址加法器将两个16位地址合成为一个20位的物理地址;
- 地址加法器通过内部总线将20位物理地址送入输入输出控制电路;
- 输入输出控制电路将20位物理地址送上地址总线;
- 20位物理地址被地址总线传送到存储器。
地址加法器采用物理地址=段地址×16+偏移地址的方法用段地址和偏移地址合成物理地址。
2.7 “段地址×16+偏移地址”的本质含义
“段地址×16+偏移地址=物理地址”的本质含义是:CPU在访问内存时,用一个 基础地址 (段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
2.8 段的概念
内存并没有分段, 段的划分来自于CPU ,由于8086CPU用“基础地址(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。
有两点需要注意:段地址×16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址为16位(寄存器位数),16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。
“数据在21F60H内存单元中。”这句话对于8086PC机一般不这样讲;而是如下说法:
- 数据存在内存20001F60单元中;
- 数据存在内存的2000H段中的1F60H单元中。
2.9 段寄存器
段地址在8086CPU的段寄存器中存放。8086CPU有4个段寄存器:CS、DS、SS、ES。当8086CPU要访问内存时由这4个段寄存器提供内存单元的段地址。
2.10 CS和IP
CS和IP是8086CPU中两个最关键的寄存器,它们指示了 CPU当前要读取指令的地址 。
- CS为代码段寄存器;
- IP为指令指针寄存器。
任意时刻,CPU将CS:IP指向的内容当作指令执行。具体的工作过程:
- 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
- IP:=IP+所读取指令的长度,从而指向下一条指令;
- 执行指令。转到步骤1,重复这个过程。
在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS= FFFFH,IP=0000H,即在8086PC机刚启动时,CPU从内存 FFFF0H单元中读取指令执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。
2.11 修改CS、IP的指令
在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。
能够改变CS、IP的内容的指令被统称为 转移指令 。若想同时修改CS、PP的内容,可用形如“jmp段地址:偏移地址”的指令完成。
jmp 2AE3:3 #执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。
jmp 3:0B16 #执行后:CS=0003H,IP=0B16H,CPU将从00B46H处读取指令。
若想仅修改IP的内容,可用形如“jmp某一合法寄存器”的指令完成。
jmp ax, #指令执行前:ax=1000H,CS=2000H,IP=000H
#指令执行后:ax=1000H,CS=2000H,IP=1000H
jmp bx, #指令执行前:bx=0B16H,CS=2000H,IP=0003H
#指令执行后:bx=0B16H,CS=2000H,IP=0B16H