鱼C论坛

 找回密码
 立即注册
查看: 3992|回复: 5

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

[复制链接]
发表于 2012-3-9 00:40:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP的值是多少?
mov  ax,bx
sub   ax,ax
jmp  ax
问题:我觉得CPU只修改3次IP的值,而答案是4次,不知道为什么?(请解释的详细一点,谢谢)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-9 10:58:26 | 显示全部楼层
本帖最后由 小青鱼 于 2012-3-9 11:00 编辑

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

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

所以加上前面两条指令改变的两次IP就是4次了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-9 15:15:07 | 显示全部楼层
我今天早上想明白了这个问题。只是小甲鱼的回答有点问题,所以困扰了我。你的解答和我想的一样。谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-9 15:18:59 | 显示全部楼层
最重要的是要知道IP中值的自改变是何时进行的,实际上是在读取指令之后执行指令之前。从而jmp  ax 这条指令实际上改变了两次IP的值。其一,是机器的自改变;其二,只是一条特殊的指令,本身可以修改IP的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-9 21:30:51 | 显示全部楼层
还以会改变无数 次呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-10 00:44:48 | 显示全部楼层
就是这么回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 20:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表