我是nasm的新手,并尝试实现一个代码,该代码将两个参数(int 64bit)传递给对这些变量应用fold函数的C代码。
我认为传递给 rdx 的数组,像+或 - 传递给 rdi 的运算符以及传递给 rsi 的数组元素的数量(int input)。函数第一次应用的结果应该用作下一个应用程序的第一个参数,依此类推。
现在,当我试图再次为下一个数组元素调用该函数时,nasm打印出一个seg错误(当我只调用该函数一次时它就起作用了。)我不确定是不是因为我采用了特定元素的方式数组或因为缺少某些东西。我试图推送参数,然后通过堆栈指针复制它们,但最终会出现相同的错误消息。 nasm assembly命令:nasm -f elf64 fold.nasm
C编译命令:gcc -std=c99 -o fold fold.c fold.o
global fold
section .text
jmp fold1
**prefold:**
xor r15,r15
xor rbx,rbx
xor rax,rax
mov rax,[rdx] ; take first array element to rax
mov rbx,[rdx+8] ; 2nd to rbx
mov r15,8
jmp fold1
**fold:**
jmp prefold
fold1:
mov r8,rdi
;secure operator and length of array in r8,r9
mov r9,rsi
mov rdi,rax
;the function pointer requires the arguments beeing stored in rdi,rsi
mov rsi,[rdx]
add r15,8
mov rbx, [rdx+r15]
call r8
dec r9
mov rdi,r8
; restore operator and decremented array length
mov rsi,r9
cmp r9,1
jne fold1
ret
提前致谢