1. 程式人生 > 其它 >組合語言 學習記錄03

組合語言 學習記錄03

3.8 棧頂超界的問題

8086cpu不保證我們的操作不會導致超界問題;

所以在程式設計時需要考慮棧頂超界的問題,無論是入棧亦或是出棧都要注意。

 

3.9 push、pop指令

指令格式可以為:

1 push 暫存器、段暫存器、記憶體單元(都是以字為單位)
2 pop 暫存器、段暫存器、記憶體單元(都是以字為單位)
3 //例如
4 mov ax 1000H
5 mov ds,ax 
6 push [0]
7 pop [2]

顯而易見的問題:一個棧段最大可以設定為多少?

因為我們在進行push和pop操作時,更改的值為SP=SP+2,SS的值保持不變,所以最大為0~FFFFH,容納64KB的內容。

對於資料段,段地址存放在DS中,用mov、add、sub等訪問記憶體單元的指令時,CPU將其當作資料來訪問。

對於程式碼段,段地址存放在CS中,第一條指令的偏移地址放在IP中,CPU將執行程式碼段中的指令。

對於棧段,段地址存放在SS中,棧頂單元的偏移地址存放在SP中,CPU在執行push、pop指令時將這一棧段當作棧空間來進行使用。