gaopanhao 发表于 2015-7-14 20:50:18

检测点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呢 求高手

fast 发表于 2015-7-15 00:31:14

还没学到:funk:

Ъγ:_小ツ雨oο 发表于 2015-7-15 07:27:32

执行CALL指令 时将 IP 压入栈中 ,在call 到标号
相当于   push ip    jmp short 标号   所以就把6 压入栈中了, 为什么是6呢, 因为要翻书,这些太基础了,一至于我 都 没记住,只需要 知道 执行call的时候会把 下一句的IP 压入栈中就好了,因为下面你还有RET回来,

864195847@aa.co 发表于 2015-7-15 19:56:45

想赚分真难 还得回复

爱你一辈子 发表于 2015-7-15 22:29:06

查看全部内容

远山 发表于 2016-4-25 09:24:39

首先cpu读取到“call s”的指令信息,并将其放在指令缓冲器中等待执行,但是在执行该指令之前,就已经把IP加了3了,也就是“IP=IP+3=3+3=6”(这步书上第二章有详细解释),所以在执行“call s”时IP=6。

hywo125 发表于 2017-11-27 01:08:23

哇,楼上是正解.居然跨年

AlunX 发表于 2018-6-9 00:26:04

call不是把要跳转到位置的ip(7)压入栈中
是把执行完call命名按顺序应当到的位置的ip(inc ax 的开始6)压入栈中

CHAOZHANG283 发表于 2018-9-26 17:33:36

事实上,当指令缓存器读取call s时,ip = ip +3 =6了,然后执行call s会将 ip 的值入栈,在跳转到s后,pop ax指令将栈中存储的IP值赋给AX,而此时程序往下执行结束,所以ax=6

被遗忘的指环 发表于 2020-2-24 11:52:46

666666666666666我还以为是2哈哈哈·答错了

黑色太阳 发表于 2020-5-30 23:38:38

CHAOZHANG283 发表于 2018-9-26 17:33
事实上,当指令缓存器读取call s时,ip = ip +3 =6了,然后执行call s会将 ip 的值入栈,在跳转到s后,pop...

感谢,有用!
页: [1]
查看完整版本: 检测点10.2