wkavenger 发表于 2019-3-25 02:44:32

检测点2.3

本帖最后由 wkavenger 于 2019-3-25 03:01 编辑

下面的3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP中的值是多少?
mov ax,bx
sub ax,ax
jmp ax

解题过程:
假设开始地址0x1000,bx=0x0
0x1000 mov ax,bx   #第一次修改(+0x2),因为要执行下一行命令
0x1002 sub ax,ax    #第二次修改(+0x2),因为要执行下一行命令,但因为下一句为跳转,此处的ax为IP,所以进行理解为第三次修改(IP=0)。
0x1004 jmp ax      #跳转到0x1000进入无限死循环。

答:
三条指令除jmp外需修改2次IP,mov修改1次,共计3次,最后IP中的值是0。

3次是错误的,看了小甲鱼的回复正确答案,牢记~~
https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=73542&pid=2603310

错误分析:
sub ax,ax 实际上是一整条语句,执行完就只修改一次,他的作用就是将ax=ax-ax,然后进入下一句。

有点不理解的是
第 3 次:读入 jmp ax 后
第 4 次:执行完 jmp ax 后
这个有点难理解,希望有权威人士解答下。

jmp ax实际上进行了两次IP的修改么?
读取执行并执行最终的修改?

MadmanLyy 发表于 2019-5-14 17:01:13

第3次:读入JMP ax 后,这条指令是把ax寄存器的值赋给IP,此时为了找到ax的内容,IP需要改变
第4次:执行完JMP ax 后,此时将ax的值赋给IP,IP改变

nickkid 发表于 2019-5-15 18:03:16

MadmanLyy 发表于 2019-5-14 17:01
第3次:读入JMP ax 后,这条指令是把ax寄存器的值赋给IP,此时为了找到ax的内容,IP需要改变
第4次:执行 ...

看了您的解答,还是没有搞明白呢。“此时为了找到ax的内容,IP需要改变” 是为什么呢? 去读ax的赋值,IP也需要改变?那是变到多少呢?

wkavenger 发表于 2019-6-7 03:57:30

nickkid 发表于 2019-5-15 18:03
看了您的解答,还是没有搞明白呢。“此时为了找到ax的内容,IP需要改变” 是为什么呢? 去读ax的赋值,IP ...

再看课程看一遍就明白了。

MASSY 发表于 2019-7-29 16:03:22

nickkid 发表于 2019-5-15 18:03
看了您的解答,还是没有搞明白呢。“此时为了找到ax的内容,IP需要改变” 是为什么呢? 去读ax的赋值,IP ...

加上上一步操作所占用的地址数
页: [1]
查看完整版本: 检测点2.3