我们前面讲到内存地址是由段地址+偏移地址组成,例如:073F:0100。
接下来我们通过debug工具来检测,内存地址到底存放在哪个寄存器:
![](https://img.haomeiwen.com/i6081804/2dc75f35c3ea50f8.png)
从图1-1中,以073F:0100为例,我们可以看出0100(偏移地址)的存放寄存器有且只有一个,也就是IP寄存器;存放073F(段地址)的寄存器有DS、ES、SS、CS寄存器。
我们依次修改DS、ES、SS、CS,执行debug u命令查看变化。
首先修改DS:
![](https://img.haomeiwen.com/i6081804/529bce8542e85a86.png)
![](https://img.haomeiwen.com/i6081804/14e53bdb0c679f08.png)
继续修改ES:
![](https://img.haomeiwen.com/i6081804/0767a4af7a7ecf34.png)
修改SS:
![](https://img.haomeiwen.com/i6081804/e4c72f98f3d48bd7.png)
最后修改CS:
![](https://img.haomeiwen.com/i6081804/a243829518ab559b.png)
最终,我们得出结论——CS寄存器存放段地址,IP寄存器存放偏移地址。
指令的执行步骤如下:
步骤一:CPU从CS:IP 所指向的内存单元读取指令,存放到指令缓存器中。
步骤二:IP = IP + 所读指令的长度,从而指向下一条指令。
步骤三:执行指令缓存器中的内容,回到步骤一
网友评论