尋址方式中,如果[...]中包含有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访问堆栈中的数据了,比如参数等