检测点10.2
下面的程序执行后,ax中的数值为多少?内存地址 机器码 汇编指令 执行后情况
1000:0 b8 00 00 mov ax,0 ax=0 ip指向1000:3
1000:3 e8 01 00 call s pop ip ip指向1000:7
1000:6 40 inc ax
1000:7 58 s:pop ax
可是 到s 的时候 IP 不是等于7吗 所以ax应该等于7才对啊 为什么是6呢 求高手 还没学到:funk: 执行CALL指令 时将 IP 压入栈中 ,在call 到标号
相当于 push ip jmp short 标号 所以就把6 压入栈中了, 为什么是6呢, 因为要翻书,这些太基础了,一至于我 都 没记住,只需要 知道 执行call的时候会把 下一句的IP 压入栈中就好了,因为下面你还有RET回来,
想赚分真难 还得回复 查看全部内容 首先cpu读取到“call s”的指令信息,并将其放在指令缓冲器中等待执行,但是在执行该指令之前,就已经把IP加了3了,也就是“IP=IP+3=3+3=6”(这步书上第二章有详细解释),所以在执行“call s”时IP=6。 哇,楼上是正解.居然跨年 call不是把要跳转到位置的ip(7)压入栈中
是把执行完call命名按顺序应当到的位置的ip(inc ax 的开始6)压入栈中 事实上,当指令缓存器读取call s时,ip = ip +3 =6了,然后执行call s会将 ip 的值入栈,在跳转到s后,pop ax指令将栈中存储的IP值赋给AX,而此时程序往下执行结束,所以ax=6 666666666666666我还以为是2哈哈哈·答错了 CHAOZHANG283 发表于 2018-9-26 17:33
事实上,当指令缓存器读取call s时,ip = ip +3 =6了,然后执行call s会将 ip 的值入栈,在跳转到s后,pop...
感谢,有用!
页:
[1]