在x86-64程序集中添加数组的元素

时间:2013-10-30 18:52:18

标签: arrays assembly x86-64

我正在尝试编写一个x86-64汇编程序,它是函数“int addarray(int n,int * array)”。第一个arg是数组的长度,第二个是指向数组的指针。它应该添加数组的元素并返回。这是我到目前为止的代码,我不知道为什么它不起作用。

.text
.globl addarray
.type   addarray, @function  

addarray:
    movq    $0, %rdx
    movq    $0, %rax
while:
    cmpq    %rdx, %rdi
    jle afterw

    movq    %rdx, %rcx
    imulq   $8, %rcx
    addq    %rsi, %rcx

    addq    %rcx, %rax

    addq    $1, %rdx
    jmp while
afterw:
    ret

1 个答案:

答案 0 :(得分:1)

我并不熟悉AT& T语法,但它看起来像你的行:

addq %rcx, %rax

是否会将rcx的值添加到rax。您想要添加rcx引用的值,即:

addq (%rcx), %rax

至少,我认为这是在AT& T语法中完成的。在Intel语法中,它将是:

add rax,[rcx]

您可以采取一些简单的优化来加快速度,但我认为以上是您问题的关键。