阿臣 发表于 2013-12-8 10:11:23

检测点10.4

程序如下
1000:0   b8 06 00      mov ax,6       ax=6,ip指向1000:31000:3   ff d0         call ax      pop ip,ip指向1000:61000:5   40            inc ax1000:6   58            mov bp,sp      bp=sp=fffeh                         add ax,    ax==6+5=0bh

执行call ax 的时候不是应该把偏移地址5推入栈么?书本上不是说的,执行call 的时候,是push ip然后在jmp跳转的么?跳转的时候为什么跳转到1000:6,1000:6地址也没有AX啊?还有sp的值是不是上机查看的?fffe怎么等于5?

CMQY 发表于 2013-12-8 11:47:18

看了好久,终于看明白你想问什么了。
执行call后,sp里存的是当前ip的的值5,fffeh是栈顶sp的偏移地址,ds:(fffeh)指的是地址里的内容,为5.
其它不知道怎么回答了。好好看书吧~

~逆天~ 发表于 2013-12-9 16:52:30

1、执行call ax 的时候不是应该把偏移地址5推入栈么?

2、书本上不是说的,执行call 的时候,是push ip然后在jmp跳转的么?

跳转的时候为什么跳转到1000:6,1000:6地址也没有AX啊?
call ax 相当于 push ip
                      jmp near ptr ax
ax存储的是跳转的偏移地址
3、还有sp的值是不是上机查看的?
这里是没有上下文的sp,当然是系统默认栈
4、fffe怎么等于5?
这里的5就是执行call ax时候push ip中IP的值啊!
页: [1]
查看完整版本: 检测点10.4