Last Regrets

CSIP鸡你太美存器

之前刚学的时候对这个玩意音响没那么深刻,现在再学,感觉很不一样了。

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