數據的入棧和出棧
棧在處理函數調用過程中起到至關重要的作用。
棧是一種數據結構,可以添加或刪除值,不過要遵循後進先出的原則。
通過push操作把數據壓入棧中,通過pop操作刪除數據。
它具有一個屬性:彈出的值永遠是最近被壓入而且仍然在棧中的值。
棧可以實現爲一個數組,總是從數組的一端插入和刪除元素。這一端被稱爲棧頂。
在x86-64中,程序棧存放在內存中某個區域。
棧向下增長,這樣一來,棧頂元素的地址是所有棧元素地址中最低的。
棧指針%rsp保存着棧頂元素的地址。
數據入棧指令
指令 | 效果 | 描述 |
---|---|---|
將四字壓入棧中 |
pushq指令的功能是把數據壓入到棧上,將一個四字值壓入棧中,首先要將棧指針減8,然後將值寫道新的棧頂地址。
數據出棧指令
指令 | 效果 | 描述 |
---|---|---|
將四字彈出棧 |
pop指令是彈出數據,彈出一個四字的操作包括從棧頂位置讀出數據,然後棧頂指針加8.
因爲棧和程序代碼以及其他形式的程序數據都是放在同一內存中,所以程序可以用標準的內存尋址方法訪問棧內的任意位置。