为什么说IP寄存器的值被改变了4次?
下面3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP的值是多少?movax,bx
sub ax,ax
jmpax
问题:我觉得CPU只修改3次IP的值,而答案是4次,不知道为什么?(请解释的详细一点,谢谢)
本帖最后由 小青鱼 于 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次了
我今天早上想明白了这个问题。只是小甲鱼的回答有点问题,所以困扰了我。你的解答和我想的一样。谢谢。 最重要的是要知道IP中值的自改变是何时进行的,实际上是在读取指令之后执行指令之前。从而jmpax 这条指令实际上改变了两次IP的值。其一,是机器的自改变;其二,只是一条特殊的指令,本身可以修改IP的值。 还以会改变无数 次呢?
就是这么回事
页:
[1]