2013-03-02 83 views
2

雖然我學習x64程序集,但我試圖使add方法添加兩個整數並使用程序集返回整數。 我曾與x86的工作代碼,我試圖轉換爲x64程序集:將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 

回答

3

X86-64具有由AMD定義的調用轉換,所有的工具鏈,這個平臺應該遵循這樣的:

  • 第一個參數 - > RDI
  • 2日 - > RSI
  • 3日 - > RDX
  • 4日 - > RCX
  • 5日 - > RAX

所以守ld看起來像:

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

實際上,這個調用約定不適用於x86_64_in general_,而是適用於類SystemV系統(Linux和朋友)。如果你在Windows上,x86_64還有另一個調用約定,其中只有前四個參數被傳入寄存器(rcx,rdx,r8,r9)。 – 2016-09-04 14:16:03