C 调用 ASM (YASM x86)
C calling ASM (YASM x86)
我想在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 传递的参数进行更改。
您可以根据您平台的 AA64 调用约定访问参数。在大多数系统上,Windows 除外,这是由 System V AMD64 ABI 定义的。
根据这些调用约定,ptr
将在 rdi
中,而 size
将在 rsi
中。 return 值放在 rax
.
我想在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 传递的参数进行更改。
您可以根据您平台的 AA64 调用约定访问参数。在大多数系统上,Windows 除外,这是由 System V AMD64 ABI 定义的。
根据这些调用约定,ptr
将在 rdi
中,而 size
将在 rsi
中。 return 值放在 rax
.