虽然我正在学习x64程序集,我试图使添加方法来添加两个整数,并使用程序集返回整数。 我有x86的工作代码,我试图转换为x64
只是我把寄存器的名字改为x64,并且生成的对象文件没有错误,但是当我在C函数中使用它时,我总是得到sum = 0。
我认为参数的位置有问题,我没有find这样的问题的好文件。
section .text global addi addi: push rbp mov rbp, rsp mov rax,[rbp+12] mov rdx,[rbp+8] add rax, rdx pop rbp ret
x86-64有一个由amd定义的调用转换,这个平台的所有工具链应该遵循这个:
所以它应该看起来像:
section .text global addi addi: mov rax, rsi add rax, rdi ret
x64 ABI要求前几个参数在寄存器中传递,而不是在堆栈中传递。
请参阅x86-64上的堆栈帧布局,以获得很好的解释。