汇编:一个简单的例子,将x86代码转换为x64

虽然我正在学习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定义的调用转换,这个平台的所有工具链应该遵循这个:

  • 第一个参数 – > rdi
  • 第二 – > rsi
  • 3rd – > rdx
  • 4th – > rcx
  • 第五 – > rax

所以它应该看起来像:

 section .text global addi addi: mov rax, rsi add rax, rdi ret 

x64 ABI要求前几个参数在寄存器中传递,而不是在堆栈中传递。

请参阅x86-64上的堆栈帧布局,以获得很好的解释。