Arrays 在x86-64程序集中添加数组元素
我正在尝试编写一个x86-64汇编程序,它是函数“intaddarray(intn,int*array)”。第一个参数是数组的长度,第二个是指向数组的指针。它应该将数组的元素相加并返回。这是我到目前为止的代码,我不知道为什么它不起作用Arrays 在x86-64程序集中添加数组元素,arrays,assembly,x86-64,Arrays,Assembly,X86 64,我正在尝试编写一个x86-64汇编程序,它是函数“intaddarray(intn,int*array)”。第一个参数是数组的长度,第二个是指向数组的指针。它应该将数组的元素相加并返回。这是我到目前为止的代码,我不知道为什么它不起作用 .text .globl addarray .type addarray, @function addarray: movq $0, %rdx movq $0, %rax while: cmpq %rdx, %r
.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
我不太熟悉AT&T的语法,但它看起来像你的台词:
addq %rcx, %rax
将把rcx
的值添加到rax
。您希望添加rcx
引用的值,即:
addq (%rcx), %rax
至少,我认为At&T的语法就是这样做的。在英特尔语法中,它将是:
add rax,[rcx]
你可以做一些简单的优化来提高速度,但我认为以上是解决问题的关键。定义“不起作用”。你使用哪种调用约定?即,哪些寄存器包含参数?我的汇编程序有点生疏,但是
cpmq%rdx,%rdi jle afterw
不会立即跳转到afterw,因为$rdx
设置为0?