检测点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的修改么?
读取执行并执行最终的修改? 第3次:读入JMP ax 后,这条指令是把ax寄存器的值赋给IP,此时为了找到ax的内容,IP需要改变
第4次:执行完JMP ax 后,此时将ax的值赋给IP,IP改变 MadmanLyy 发表于 2019-5-14 17:01
第3次:读入JMP ax 后,这条指令是把ax寄存器的值赋给IP,此时为了找到ax的内容,IP需要改变
第4次:执行 ...
看了您的解答,还是没有搞明白呢。“此时为了找到ax的内容,IP需要改变” 是为什么呢? 去读ax的赋值,IP也需要改变?那是变到多少呢? nickkid 发表于 2019-5-15 18:03
看了您的解答,还是没有搞明白呢。“此时为了找到ax的内容,IP需要改变” 是为什么呢? 去读ax的赋值,IP ...
再看课程看一遍就明白了。 nickkid 发表于 2019-5-15 18:03
看了您的解答,还是没有搞明白呢。“此时为了找到ax的内容,IP需要改变” 是为什么呢? 去读ax的赋值,IP ...
加上上一步操作所占用的地址数
页:
[1]