-1

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

.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
4

1 回答 1

1

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

addq %rcx, %rax

将添加 to 的rcxrax。您要添加rcx引用的值,即:

addq (%rcx), %rax

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

add rax,[rcx]

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

于 2013-10-30T21:54:13.397 回答