2

在学习 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
4

2 回答 2

2

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

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

于 2013-03-02T21:11:47.277 回答
2

x86-64 有 amd 定义的调用转换,这个平台的所有工具链都应该遵循这个:

  • 第一个参数-> rdi
  • 第二个-> rsi
  • 第三 -> rdx
  • 第 4 -> rcx
  • 第 5 -> 拉克斯

所以它应该看起来像:

section .text
    global addi
addi:
    mov rax, rsi
    add rax, rdi
    ret
于 2013-03-03T02:26:17.367 回答