一个典型的 CPU
由运算器、控制器、寄存器等器件组成,不同 CPU
寄存器的个数和结构都是不相同的,8086
CPU
有 14
个寄存器,这些寄存器分别是:AX
BX
CX
DX
SI
DI
SP
BP
IP
CS
SS
DS
ES
PSW
。
1、通用寄存器
8086
CPU
所有寄存器都是 16
位的,可以存放两个字节。AX
BX
CX
DX
这四个寄存器通常用来存放一般性数据,称为通用寄存器。8086
CPU
的上一代 CPU
中的寄存器是 8
位的,为保证兼容,使原来基于上一代 CPU
编写的程序稍加修改就可以运行在 8086
上,8086
CPU
的 AX
BX
CX
DX
这四个寄存器都可分为两个独立使用的 8
位寄存器来用:
AX
可分为
AH
和
AL
BX
可分为
BH
和
BL
CX
可分为
CH
和
CL
DX
可分为
DH
和
DL
2、8086
CPU
物理地址
8086
CPU
有20位地址总线,可以传送20位地址,达到 1 M
寻址能力,8086
CPU
又是 16
位结构,在内部一次性处理、传输、暂时存储的地址为 16
位。所以 8086
CPU
采用一种在内部用两个 16
位地址合成的方法来形成一个 20
位的物理地址
1. CPU 的相关部件提供两个 16 位的地址,一个称为段地址,另一个称为偏移地址;
2. 段地址和偏移地址被送入到一个称为地址加法器的部件合成一个 20 位的物理地址;
3. 地址加法器通过内部总线将 20 位物理地址送入输入输出控制电路;
4. 然后通过地址总线传送到存储器;
物理加法器采用 物理地址 = 段地址 * 16 + 偏移地址
的方法用段地址和偏移地址合成物理地址。
例:段地址 = 1230
,偏移地址 = A5
123A5
= 1230
* 16
+ A5
所以计算得出物理地址为 123A5
。
3、段寄存器
8086
CPU
有四个段寄存器:CS
DS
SS
ES
。
CS :代码段
DS :数据段
SS :堆栈段
ES :拓展段
CS
和 IP
是 8086
CPU
中两个最关键的寄存器,他们指示了 CPU
当前要读取指令的地址,CS
为代码段寄存器,IP
为指令指针寄存器。在 8086
PC
机中,任意时刻,CPU
将 CS:IP
指向的内容当做指令执行。8086
CPU
工作过程简单简述如下
1. 从 CS:IP 指向的内存单元读取指令,读取的指令进入指令缓冲器;
2. IP = IP + 所读指令长度,从而指向下一条指令;
3. 执行指令,转到步骤 1 ,一直重复直到退出为止。
在 8086
CPU
加电启动或复位后 CS
和 IP
被设置为 CS = FFFFH
,IP = 0000H
,即 8086
PC
机启动时执行的第一条指令是 FFFF0
。如果内存中的一段信息曾被 CPU
执行过,那么它所在的内存单元必定被 CS:IP
指向过。CPU
从何处执行指令是由 CS:IP
决定的,所以我们可以通过修改 CS:IP
中的内容来控制 CPU
目标指令。
传送指令 MOV
大部分寄存器的值,但是不能用于设置 CS:IP
的值,因为8086
CPU
没有提供这样的功能,能够改变 CS:IP
的指令被统称为转移指令,如 JMP
指令。
例:
同时修改 CS 和 IP 的值,指令格式:JMP 短地址:偏移地址
jmp 2B5A:6,执行后 CS = 2B5AH,IP = 0006H,CPU 将从 2B5A6H 处读取指令。
只修改 IP 的值 指令格式:jmp 某一合法寄存器
JMP AX,执行前:AX = 1000H,CS = 2000H,IP = 0002H
执行后:AX = 1000H,CS = 2000H,IP = 1000H