C呼叫ASM(YASM x86)

时间:2018-09-29 00:51:27

标签: c function assembly nasm yasm

我想在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。

1 个答案:

答案 0 :(得分:0)

您可以根据平台的AA64调用约定来访问参数。在大多数系统上(Windows除外),这是由System V AMD64 ABI定义的。

根据这些调用约定,ptr将位于rdi中,而size将位于rsi中。返回值放在rax中。

请参见X86 calling conventions