读书人

哈哈,又是小弟我,小弟的疑惑真多,望各

发布时间: 2012-09-14 23:00:49 作者: rapoo

哈哈,又是我,小弟的疑惑真多,望各位大神教~!
址方式中,如果[...]中包含有bp而程序中又有示明段地址,默ss,在有一指令
mov ax,[bp]
他的意思是SS:SP(SP=BP)存元的值ax,那么我就有疑惑了:
是特殊的存空,如果bp指向的不是,而又不支持的,那么我要SS:SP的容
ax,是不是要做POP的操作?
大神教~~!!

[解决办法]
不是,就是内存访问,就算是栈也可以看做内存访问
[解决办法]
你搞混了,pop是弹出栈顶元素,但是没有那本书说过,堆栈里的数据值能通过pop获得的吧!看看书吧!是可以那么操作的,在一个函数中使用堆栈传递参数后,在函数体中,需要获得传入的参数的时候,就可以以这种方式获得指定的那一个参数。
[解决办法]
1.只要是栈都是支持后进先出的同一种数据结构,而不管它出现在哪,都是有着相同功能的同一个东西。
2.在汇编语言或其他高级语言中都会有栈,因为编程需要
3.栈的常用操作是进栈push和出栈pop,只有使用这两个命令才能实现栈的后进先出的特性
4.在汇编中,栈是内存中的一段空间,支持mov ax,[bp]语句访问,也可以认为是汇编提供的访问栈的更灵活的方式,主要用在操作的数据不在栈顶时的场合
例如:在子程序(函数)的调用时的参数传递:先将传给子程序的参数压栈,然后调用子程序时将保护现场,将当前指令的下一条指令地址压栈(为了返回),在子程序中时,就不能使用pop来取参数了,因为栈顶是ret语句需要的返回地址,而只能使用[bp]这种寻址方式获取主程序传来的参数
[解决办法]
你去看看如何进入子程序的,子程序开始都是:
push bp
mov bp,sp
然后就可以用bp访问堆栈中的数据了,比如参数等

读书人网 >汇编语言

热点推荐