C関数を呼び出すためにx86_64アセンブリを作成しています。私のC関数は1つの引数を取るので、アセンブリは引数を。に配置します%rdi
。ABI pdf(以下にリンク)は、他の6つの引数レジスタ(rsi、rdx、rcx、r8、r9)が関数呼び出し間で保持されないことを示しています。ただし、私のC関数はlong
引数を1つしか受け取らないので、C関数が他の5つのレジスタを壊してしまうかどうかについての保証はありますか?私の仮定では、引数の値が変更された場合にのみ、引数レジスタが上書きされます。
void foo(int a, int b) {
a++; /* %rdi will be changed, but %rsi won't be changed when control returns. */
}
他の5つの引数レジスタの値をC関数呼び出し全体で保持したいので(手動でスタックから明示的にプッシュ/ポップする必要はありません)、質問しています。
x86_64 ABI- http: //www.x86-64.org/documentation/abi-0.99.pdf