CSIP鸡你太美存器
6 April, 2020
之前刚学的时候对这个玩意音响没那么深刻,现在再学,感觉很不一样了。
CS为代码段寄存器,IP为指令指针寄存器。
设CS = M, IP = N, 8086CPU将从 M × 16 + N
处读取指令并进行。
也可以这样表述: 8086CPU中,任意时刻,CPU都会将CS:IP指向的内容做为执行指令.
执行流程:
- 初始状态: CS = 2000H, IP = 0000H
- CS:IP 内容送入地址加法器,2000H × 16 + 0000H = 20000H
- 地址加法器计算出物理地址20000H后将结果送入输入输出电路.
- 输入输出电路将物理地址20000H送到地址总线。
- 内存将物理地址20000H上存放的机器指令X通过数据总线送入CPU.
- 输入输出电路将机器指令X送入指令缓冲器。
- 寄存器IP的值自动增加。
- 以此类推...
当8086CPU加点或者复位后,CS = FFFFH, IP = 0000H,也就是CPU清晨起床做的第一件事就是去执行FFFF0H内存单元中存放的机器指令。
修改CS:IP
mov
指令能帮我们将值送入寄存器。但是,它不能用于修改CS:IP,原因很简单8086出于设计考量不允许。
能修改CS:IP的指令统称为转移指令
(以后我们深入研究),现在我学习第一个可以修改CS:IP寄存器的指令,jmp
.
若想同时修改CS:IP寄存器,可以用jmp 段地址, 偏移地址
的指令来完成。
jmp 2AE3:3 ;执行后: CS = 2AE3H IP = 0003H, CPU 将从这2AE33H 处读取指令
如果只想修改IP寄存器, 可以用jmp 寄存器
的指令来完成.
jmp ax
类似, mov IP, ax