2.9 段寄存器
8086CPU在访问内存时,要由相关部件提供内存单元的段地址和偏移地址,送入加法器合成物理地址。
8086CPU中有四个段寄存器:
CS, DS, SS, ES
2.10 CS 和 IP
CS和IP是8086CPU中两个最关键的寄存器。
CS为代码段寄存器, IP为指令指针寄存器(偏移地址寄存器)。
8086机中,任意时刻,CPU将CS:IP指向的内容当做指令执行。
过程如下:
- 从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
- IP=IP+所读取指令的长度,从而指向下一条指令;
- 执行指令。 转到步骤1, 重复这个过程。
在8086CPU启动或者复位后,CS和IP被设置为CS=FFFFH,IP=0000H,即刚开机时,CPU从内存FFFF0H单元中读取指令执行,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。
因为在任何时候,CPU将CS,IP中的内容当做指令的段地址和偏移地址,用他们合成指令的物理地址,到内存中读取指令码,执行。如果说,内存中的一段信息曾被CPU执行过,那么,他所在的内存单元必定会被CS:IP指向过。
2.11 修改CS、IP的指令
在CPU中程序员只能用指令读写的部件只有寄存器, 可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。
- mov指令,被称为传送指令
- jmp指令,能够改变CS、IP的内容的指令被统称为转移指令,jmp是最简单的。
例如,
jmp 2AE3:3, 执行后: CS=2AE3H, IP=0003H,CPU将从2AE33H处读取指令
jmp 段地址:偏移地址(合法寄存器): 用寄存器中的值修改IP
jmp 还要另外一个用法:
例如
jmp ax 含义为类似于: mov IP, ax
2.12 代码段
mov ax, 0000 | (B80 00 00) |
add ax, 0123H | (05 23 01) |
mov bx, ax | (8B D8) |
jmp bx | (FF E3) |
这里共有10个字节(复习:两个16进制位可以表示一个字节(=8bit))
CPU只认识被CS:IP指向的内存单元中的内容为指令。所以,要让CPU执行我们放在代码段中的指令,必须要将CS:IP指向所定义的代码段中的第一条指令的首地址(代码示例的第一行)。