簡體   English   中英

ARM AArch64 堆棧管理

[英]ARM AArch64 stack management

ARMv8 沒有 64 位堆棧的能力嗎? 我知道 AArch64 上沒有推送和彈出指令,因此堆棧管理是否留給 AArch32 進行參數傳遞等? 我們如何傳遞 48 位地址? 我對在 AArch64 中運行時函數調用的工作方式感到困惑。

就像在 32 位* 中一樣,SP 是任何加載/存儲指令的有效基址寄存器,因此機制並沒有什么不同。 不同的是,SP 不再是一個通用寄存器,你可以隨心所欲,不再有變量加載/存儲多個操作,並且沒有程序員友好的別名。 因此,典型的“推”將是:

stp xn, xm, [sp, #-16]!

請注意,您通常應該使用stp / ldp ldr str / ldr以便在堆棧上操作時保持對齊(尤其是當您打開硬件對齊檢查時)-如果您只關心一個寄存器,請推送/pop xzr作為另一個來填補空白。


* 請記住,例如 ARM 指令集中的“push”只是stmdb r13!, {rn, ..., rm}str rn, [sp, #-4]!的匯編程序別名str rn, [sp, #-4]! 視情況而定,此類別名僅在作為 Thumb-2 一部分的統一匯編語言中引入。 特定的推送/彈出指令確實出現在原始 16 位 Thumb 中,因為 SP 無法在那里的正常加載/存儲操作中進行編碼,這些操作只能在低寄存器上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM