始终如一 发表于 2012-3-9 00:40:30

为什么说IP寄存器的值被改变了4次?

下面3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP的值是多少?
movax,bx
sub   ax,ax
jmpax
问题:我觉得CPU只修改3次IP的值,而答案是4次,不知道为什么?(请解释的详细一点,谢谢)

小青鱼 发表于 2012-3-9 10:58:26

本帖最后由 小青鱼 于 2012-3-9 11:00 编辑

首先要明白指令执行的过程:
1.从CS:IP所指的长度读取指令,放入指令缓冲寄存器。
2.IP=IP+所读指令的长度,从而指向下条指令
3.执行指令,goto 步骤1;

这里主要是第三条指令有点模糊:jmpax
按上面的步骤:
1.首先读取 jmp ax
2.IP=IP+2 指向jmp ax的下一条指令    //有一次啦
3.执行 jmp ax   //jmp 指令的过程想信你明白 IP又会改变一次

所以加上前面两条指令改变的两次IP就是4次了

始终如一 发表于 2012-3-9 15:15:07

我今天早上想明白了这个问题。只是小甲鱼的回答有点问题,所以困扰了我。你的解答和我想的一样。谢谢。

始终如一 发表于 2012-3-9 15:18:59

最重要的是要知道IP中值的自改变是何时进行的,实际上是在读取指令之后执行指令之前。从而jmpax 这条指令实际上改变了两次IP的值。其一,是机器的自改变;其二,只是一条特殊的指令,本身可以修改IP的值。

朕赐你黄金万两 发表于 2012-3-9 21:30:51

还以会改变无数 次呢?

wAterLoo 发表于 2012-3-10 00:44:48

就是这么回事
页: [1]
查看完整版本: 为什么说IP寄存器的值被改变了4次?