汇编:将x86代码转换为x64以获得一个简单示例

时间:2013-03-02 21:09:48

标签: linux assembly 64-bit x86-64 nasm

当我正在学习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

2 个答案:

答案 0 :(得分:3)

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

  • 第一个论点 - > RDI
  • 第二 - > RSI
  • 3rd - > RDX
  • 4th - > RCX
  • 5th - > RAX

所以看起来应该是这样的:

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

答案 1 :(得分:2)

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

请参阅Stack frame layout on x86-64以获得更好的解释。