检测点2.3
下面3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP中的值是多少?mov ax,bxsub ax,ax
jmp ax
首先根据 代码 我们可以看到
mov ax,bx 我们将bx的值存入ax中,暂且不管bx的值为多少我们就认为bx中有一个数据
sub ax,ax 然后我们重新给ax赋值ax = ax - ax ,所有ax的值应该为 0
jmp ax 当jmp指令,指向的是一个通用寄存器ax,代表的意思为修改 IP 的值
IP的值为ax即IP 的值应为0
所以CPU只修改了1次IP
执行到 jmp ax 时 修改了
IP中的值 为 0
忽然想到了 一段代码运行后,IP 会自动增加一些数据,所以上面应该是错的
IP 修改了3次如果我们忽略了第一次指向
因为IP每次都会在指令运行后加上指令所占用的长度
所以第一次在mov ax,bx指令运行后
第二次在sub ax,ax指令运行后
第三次在jmp ax 指令运行后
最后Ip的值应为0 解:
修改4次;第一次在CPU读取“mov ax,bx”后,第二次在CPU读取“sub ax,ax”后,第三次在CPU读取“jmp ax”后,第四次在CPU执行完“mov ax,bx”后;最后IP中的值为0。
容我默默的哭次 打挺鱼 发表于 2015-4-24 08:59
解:
修改4次;第一次在CPU读取“mov ax,bx”后,第二次在CPU读取“sub ax,ax”后,第三次在CPU读取“jmp...
第四次怎么来的啊? sub ax,ax的意思是ax=ax-ax
ip ax=0
这是第四次 谢谢打挺鱼 {:1_1:} 学习咯,谢谢 结合你的答案苦苦思索终于知道答案怎么求出来!!
打挺鱼 发表于 2015-4-24 08:59
解:
修改4次;第一次在CPU读取“mov ax,bx”后,第二次在CPU读取“sub ax,ax”后,第三次在CPU读取“jmp...
sud 是重新赋值吗 谢谢解答,有点知道了:lol: 感谢分享^_^ 我认为就修改了三次
第一次:mov ax,bx
第二次:sub ax,ax
执行完: jmp ax后ip直接变成了0000H,并不会先加再指向0000H sub ax,ax是什么意思 打挺鱼 发表于 2015-4-23 20:24
忽然想到了 一段代码运行后,IP 会自动增加一些数据,所以上面应该是错的
IP 修改了3次如果我们忽略了 ...
不是指令运行后,是读取该条指令后,IP就改变了,IP改变之后,再执行该指令。 哥斯拉不说话 发表于 2015-5-27 07:15
第四次怎么来的啊?
你少看一条指令,第一条指令在第一行的最后。 西电图图 发表于 2016-3-2 21:21
我认为就修改了三次
第一次:mov ax,bx
第二次:sub ax,ax
第一次:读取mov ax,bx后
第二次:读取sub ax,ax后
第三次:读取jmp ax后
第四次:执行jmp ax后 sub ax,ax 我看成了0相减掉了 很好的解释,受教了 本帖最后由 張家祥 于 2016-9-11 21:36 编辑
请问一下 第三次改变IP是在读取了JUM AX 这段指令之后
第四次改变IP是出现在CPU执行了JUM AX 这段指令之后
这样理解正确吗? 感谢各位大大