我想在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代码中,0必须用c传递的参数进行更改。
发布于 2018-09-29 01:02:53
您可以根据平台的AA64调用约定访问参数。在大多数系统上,除了Windows之外,这是由System AMD64 ABI定义的。
根据这些调用约定,ptr将在rdi中,size将在rsi中。返回值放置在rax中。
见X86调用约定。
https://stackoverflow.com/questions/52564149
复制相似问题