Yara 发表于 2012-4-24 12:56:33

检测点10.4的sp的问题

本帖最后由 Yara 于 2012-4-24 20:23 编辑

程序执行后,ax的值是多少?
内存地址               机器码                      汇编指令
1000:0                b8 06 00               mov ax,6
1000:2                  ff   d0                   call ax
1000 :5                  40                        inc ax
1000 :6                                                mov bp,sp
                                                               add ax,

当执行到 mov bp,sp 时,此时sp等于多少?我觉得此时sp不是等于5,因为call ax时,只是把(sp)推进栈里,而没有把sp推进栈里,那么到了mov bp,sp这一部时,bp就不应该等于5啊,而应该等于sp表示的偏移地址啊,求解啊!!!

yao33468 发表于 2012-4-24 12:56:34

1000:0                b8 06 00               mov ax,6
1000:2                  ff   d0                   call ax            这里把IP=5入栈,修改IP为6
1000 :5                  40                        inc ax
1000 :6                                                mov bp,sp      sp指向栈顶,栈顶为内容为5。【BP】就是栈顶内容了
                                                               add ax,
6+5

Yara 发表于 2012-4-24 15:14:57

没有大大知道吗:'(

hxs554f 发表于 2012-4-24 16:19:52

sp的值是无法得到的。这题结果也与sp的值无关。

Yara 发表于 2012-4-24 18:44:30

hxs554f 发表于 2012-4-24 16:19 static/image/common/back.gif
sp的值是无法得到的。这题结果也与sp的值无关。

那么mov bp,sp的意思就是把sp的偏移地址给bp啊,而题目又没有说mov ax,ss   mov ds,ax这样的,那怎么可以得到sp所指向的对应5h的偏移地址啊{:5_100:}

Yara 发表于 2012-4-24 20:22:35

我突然明白了:Q,原来bp默认的段寄存器是SS,我忘了。。。

2004wmj 发表于 2014-9-7 22:47:55

非常有用,谢谢了

gyixue 发表于 2014-9-8 21:23:18

帮楼主顶一下,顺便赚点鱼币{:5_107:}
页: [1]
查看完整版本: 检测点10.4的sp的问题