当我正在学习x64汇编时,我正在尝试使用add方法添加两个整数并使用汇编返回整数。 我有x86的工作代码,我试图转换为x64
我简单地将寄存器的名称更改为x64的名称,并且生成的目标文件没有错误但是当我在C函数中使用它时总是得到sum = 0.。
我认为参数位置存在问题,我没有找到有关此类问题的良好文档。
section .text
global addi
addi:
push rbp
mov rbp, rsp
mov rax,[rbp+12]
mov rdx,[rbp+8]
add rax, rdx
pop rbp
ret
答案 0 :(得分:3)
x86-64有一个由amd定义的调用转换,这个平台的所有工具链都应该遵循:
所以看起来应该是这样的:
section .text
global addi
addi:
mov rax, rsi
add rax, rdi
ret
答案 1 :(得分:2)
x64 ABI要求前几个参数在寄存器中传递,而不是在堆栈中传递。
请参阅Stack frame layout on x86-64以获得更好的解释。