注册 登录
编程论坛 汇编论坛

一点小问题,大家给确认一下就可以,有程序,有结果

luohua2007 发布于 2007-05-27 17:39, 615 次点击
下面的程序执行后,AX中的数值为多少?

内存地址 机器码 汇编指令

1000:0 B8 00 00 mov ax,6
1000: 2 ff d0 call ax //把1000:5入栈,确切的说只把5进栈,IP=5,然后跳到1000:6继续运行
1000: 5 40 inc ax
1000: 6 mov bp,sp //看不明白这句的意思,SP等于几呢,是等于0EH,还是该等于5呢
add ax,[bp]//也看不明白这句的意思,为是什么不用sdd ax,bp呢
结果AX=11,还是该等于000BH呢
请大家给指点一下,谢谢了
4 回复
#2
菜鸟上路2007-05-27 17:58
堆栈地址是多少?
add ax,[bp]//也看不明白这句的意思,为是什么不用add ax,bp呢
结果AX=11,还是该等于000BH呢
请大家给指点一下,谢谢了
11不就等于000BH吗?
#3
爱以走远2007-05-27 18:06
sdd ax,bp是什么意思
个人认为
call ax
也就是到mov bp,sp
sp等于好多我也不晓得 不知道楼主为什么说是等于0EH,还是该等于5呢 可以解释一哈吗
sp是堆栈的栈顶指针
mov bp,sp 当然就是把sp的值给bp
add ax,[bp] 这里 bp是地址 是把地址那个值和ax加起来
这几句好象和弹栈差不多 一共好象就等于两个pop 指令 当然是我个人认为
#4
Pants2007-05-27 19:29

内存地址 机器码 汇编指令

1000:0 B8 00 00 mov ax,6
1000: 2 ff d0 call ax //把1000:5入栈,确切的说只把5进栈,IP=5,然后跳到1000:6继续运行
1000: 5 40 inc ax
1000: 6 mov bp,sp //把sp的值赋值给bp。注意,这里只是进行内存地址传递
add ax,[bp] //把bp所指向的内存地址中的值加到ax中,这里才是数据的传递。
//原来ax=6,[bp]=5,因此最后ax=11

注意:sp中储存的只是内存单元的地址,这个内存单元中储存的才是5。
[bp]表示bp所表示的内存单元中储存的值。

比如:我把5放在一个内存编号为EEEE的内存中,然后把EEEE放入bp中,这时
bp=EEEE,[bp]=5

这样应该明白了吧~

[此贴子已经被作者于2007-5-27 19:40:55编辑过]

#5
luohua20072007-05-27 21:19

[QUOTE]注意:sp中储存的只是内存单元的地址,这个内存单元中储存的才是5。
[bp]表示bp所表示的内存单元中储存的值。

比如:我把5放在一个内存编号为EEEE的内存中,然后把EEEE放入bp中,这时
bp=EEEE,[bp]=5

这样应该明白了吧~
[/QUOTE]
说的很好,完全明白了
谢谢大家了

说的过一点,那么AX其实等于000EH了,[AX]才=5了

[此贴子已经被作者于2007-5-27 22:00:27编辑过]

1