簡體   English   中英

x86_64程序集約定保存參數寄存器

[英]x86_64 assembly conventions saving argument registers

我正在編寫一些x86_64程序集來調用C函數。 我的C函數接受1個參數,因此程序集將參數放在%rdi ABI pdf(下面鏈接)表示其他6個參數寄存器(rsi,rdx,rcx,r8,r9)不會在函數調用中保留。 但是,由於我的C函數只需要一個long參數,我是否可以保證C函數是否會破壞其他5個寄存器? 我的假設是,如果參數的值發生了變化,那么參數寄存器只會被破壞:

void foo(int a, int b) {
    a++; /* %rdi will be changed, but %rsi won't be changed when control returns. */
}

我問,因為我想在我的C函數調用中保留其他5個參數寄存器的值(無需手動顯式地從堆棧中推送/彈出它們)。

x86_64 ABI - http://www.x86-64.org/documentation/abi-0.99.pdf

沒有保證。 您必須將它們保存在堆棧中以確保它們不會更改。 它們是否被更改將取決於編譯器。

如果您想以某種方式確保它們不會被更改,您可以在程序集中編寫該函數。

請查看第21頁的表。它為所有寄存器提供了一個“保留是/否”列。 它對用於傳遞參數的所有寄存器都說“不”。

無論是否傳遞參數,都不需要保留參數寄存器。 你可能不會得到你的參數。

暫無
暫無

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

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