程序员简友广场想法

汇编每天1分钟 (5) | 寄存器 CS、IP

2020-06-23  本文已影响0人  GTR车头

我们前面讲到内存地址是由段地址+偏移地址组成,例如:073F:0100。

接下来我们通过debug工具来检测,内存地址到底存放在哪个寄存器:

图1-1

从图1-1中,以073F:0100为例,我们可以看出0100(偏移地址)的存放寄存器有且只有一个,也就是IP寄存器;存放073F(段地址)的寄存器有DS、ES、SS、CS寄存器。

我们依次修改DS、ES、SS、CS,执行debug u命令查看变化。

首先修改DS:

修改ds的值为0 执行后,指令缓存器内存地址未发生变化

继续修改ES:

还是没变化

修改SS:

依旧

最后修改CS:

指令缓存器内存地址发生变化,由073F:0100变更为0000:0100

最终,我们得出结论——CS寄存器存放段地址,IP寄存器存放偏移地址。

指令的执行步骤如下:

步骤一:CPU从CS:IP 所指向的内存单元读取指令,存放到指令缓存器中。
步骤二:IP = IP + 所读指令的长度,从而指向下一条指令。
步骤三:执行指令缓存器中的内容,回到步骤一

上一篇 下一篇

猜你喜欢

热点阅读