AT&T彙編——壓入和彈出棧數據

數據的入棧和出棧

棧在處理函數調用過程中起到至關重要的作用。
棧是一種數據結構,可以添加或刪除值,不過要遵循後進先出的原則。
通過push操作把數據壓入棧中,通過pop操作刪除數據。
它具有一個屬性:彈出的值永遠是最近被壓入而且仍然在棧中的值。
棧可以實現爲一個數組,總是從數組的一端插入和刪除元素。這一端被稱爲棧頂。
在x86-64中,程序棧存放在內存中某個區域。
棧向下增長,這樣一來,棧頂元素的地址是所有棧元素地址中最低的。
棧指針%rsp保存着棧頂元素的地址。

數據入棧指令

指令 效果 描述
pushqSpushq \quad S R[%rsp]R[%rsp]8;M[R[%rsp]]SR[\%rsp]\leftarrow R[\%rsp]-8;\\M[R[\%rsp]] \leftarrow S 將四字壓入棧中

pushq指令的功能是把數據壓入到棧上,將一個四字值壓入棧中,首先要將棧指針減8,然後將值寫道新的棧頂地址。

數據出棧指令

指令 效果 描述
popqDpopq \quad D DM[R[%rsp]];R[%rsp]R[%rsp]+8D \leftarrow M[R[\%rsp]]; \\R[\%rsp] \leftarrow R[\%rsp] + 8 將四字彈出棧

pop指令是彈出數據,彈出一個四字的操作包括從棧頂位置讀出數據,然後棧頂指針加8.
因爲棧和程序代碼以及其他形式的程序數據都是放在同一內存中,所以程序可以用標準的內存尋址方法訪問棧內的任意位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章