我正在尝试编写一个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
答案 0 :(得分:1)
我并不熟悉AT& T语法,但它看起来像你的行:
addq %rcx, %rax
是否会将rcx
的值添加到rax
。您想要添加rcx
引用的值,即:
addq (%rcx), %rax
至少,我认为这是在AT& T语法中完成的。在Intel语法中,它将是:
add rax,[rcx]
您可以采取一些简单的优化来加快速度,但我认为以上是您问题的关键。