gpt4 book ai didi

c - x86_64 汇编约定保存参数寄存器

转载 作者:行者123 更新时间:2023-12-02 05:25:24 24 4
gpt4 key购买 nike

我正在编写一些 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

最佳答案

没有任何保证。您必须将它们保存在堆栈中以确保它们不被更改。它们是否改变将取决于编译器。

如果您想以某种方式确保它们不被更改,您可以在汇编中编写该函数。

关于c - x86_64 汇编约定保存参数寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12224188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com