段寄存器
段寄存器就是提供段地址的。
CS(Code Segment):代码段寄存器
DS(Data Segment):数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器
CS和IP(指令指针寄存器 (instruction pointer))是8086中最关键的寄存器,它们指示了CPU当前要读取指令的地址。
修改CS、IP的指令
mov 指令不能用于设置CS、IP的值,8086CPU没有提供这样的功能,8086CPU提供了另外的指令来改变它们的值:转移指令。
同时修改CS、IP的内容:
jmp 段地址:偏移地址
jmp 2AE3:3 // 物理地址:2AE33
jmp 3:0B16 // 物理地址:00B46
仅修改IP的内容
jmp 某一合法寄存器
jmp ax(类似于 mov IP, ax)
jmp bx
代码段
可以将长度为 N(N <= 64 KB)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。
CPU只认被 CS:IP 指向的内存单元中的内容为指令。
所以要将 CS:IP 指向所定义的代码段中的第一条指令的首地址。
8086CPU的工作过程
- 从 CS:IP 指向内存单元读取指令,读取的指令进入指令缓冲器
- IP 指向下一条指令(IP += 刚执行指令的长度)
- 执行指令(转到步骤1)