2.1 通用寄存器
AX, BX, CX, DX 这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。8086CPU这5个寄存器都可以分为两个可以独立使用的8位寄存器来用:
- AX可分为AH和AL;
- BX可分为BH和BL;
- CX可分为CH和CL;
- DX可分为DH和DL;
AX的低8位(0 - 7)构成AL寄存器,高8位(8 - 15)构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器。
2.2 字在寄存器中的存储
考虑兼容性8086CPU可以一次性处理一下两种尺寸的数据。
- 字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中。
- 字:记为word,一个字由俩个字节组成,这两个字节分别称为这个字的高位字节和低位字节。
2.3 几条汇编指令
汇编指令 | 控制CPU完成的操作 | 用高级语言表述 |
---|---|---|
MOV ax,18 | 将18送入寄存器ax | ax = 18 |
ADD ax,8 | 将寄存器ax中的数值加上8 | ah = ax + 8 |
注意指令的两个操作对象的位数应当是一致的。
例:ax为16位寄存器,只能放4位16进制位数,所以多余的高位会丢失。
2.4 物理地址
CPU访问内存单元时,要给出内存单元的地址。所有内存单元构成的存储空间时一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。
CPU通过地址总线送入存储器,必须是一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以有不同的形成物理地址的方式。
物理地址 = 段地址 × 16 + 偏移地址
- 段地址×16 就是左移4位24 = 16。4位2进制等于一位16进制所以16进制向左移一位。
- 段地址×16必然是16的倍数,所以一个段的起始地址也是16的倍数;偏移地址位16位,16位地址的寻址能力为64kb,所以一个段的最大为64kb。
- 64kb = 216 / 1024; 216 = 65536 byte;
2.5 段寄存器
8086CPU有4个段寄存器:CS, DS, SS, ES。访问内存时由这4个段寄存器提供内存单元的段地址。
- CS:代码段寄存器
- IP:指令指针寄存器
8086CPU工作流程
- 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
- IP = IP + 所读取指令的长度,从而指向下一条指令;
- 执行指令。转到步骤(1)重复这个过程。
2.6 修改 CS, IP 的指令
jmp 段地址:偏移地址 指令的功能为:用指令中给出的段地址修改CS, 偏移地址修改IP。
如:
- jmp 2AE3:3, 执行后:CS = 2AE3,IP = 0003H, CPU将从2AE33H处读取指令。
- jmp ax, 在含义上好像似:mov IP,ax。
来源:CSDN
作者:Cdreamfly
链接:https://blog.csdn.net/Cdreamfly/article/details/104510855