65,186
社区成员




section .text
;int f_C(int a, int b, int c, int d, int e)
extern f_C
; int f_asm(int a, int b, int c, int d, int e)
global f_asm
f_asm:
%ifdef ELF64
mov rdi, 1
mov rsi, 2
mov rdx, 3
mov rcx, 4
mov r8, 5
call f_C ; return 100 + f_C(1,2,3,4,5)
add rax, 100 ;
ret
%else
sub rsp, 64
mov rcx, 1
mov rdx, 2
mov r8 , 3
mov r9 , 4
mov QWORD [rsp+32], 5
call f_C ; return 100 + f_C(1,2,3,4,5)
add rax, 100
add rsp, 64
ret
%endif
ret
main.c
#include <stdio.h>
int f_C(int a, int b, int c, int d, int e)
{
return a + b + c + d + e;
}
int f_asm(int a, int b, int c, int d, int e);
int main()
{
printf("%d\n", f_C(1,2,3,4,5));
printf("%d\n", f_asm(1,2,3,4,5));
return 0;
}
WIN64 下:
yasm -f win64 -o f.obj f.S
cl main.c f.obj
linux 下:
yasm -f ELF64 -DELF64 -o f.o f.S
gcc -m64 main.c f.o