我想在c代码中调用ASM函数,如何将参数传递给ASM代码?
#include <stdio.h>
extern int * asm_mod_array(int *ptr,int size);
int main()
{
int fren[5]={1,2,3,4,5};
/*Call ASM func*/
int a=asm_mod_array(fren,5);
printf(u,a);
return 0;
}
现在,我想在我的ASM函数中使用此参数。
;asm_mod_array(int ptr,int size)
global asm_mod_array
asm_mod_array:
push r12
mov rdi, 0
mov rsi, 0
mov r12,0
mov rax,0
sumLoop:
add rax, [rdi+r12]
inc r12
cmp r12, rsi
jl sumLoop
mov [rdx], rax
pop r12
ret
注意:在ASM代码中,必须使用c传递的参数来更改0。
答案 0 :(得分:0)
您可以根据平台的AA64调用约定来访问参数。在大多数系统上(Windows除外),这是由System V AMD64 ABI定义的。
根据这些调用约定,ptr
将位于rdi
中,而size
将位于rsi
中。返回值放在rax
中。