首先,需要说明的是,64位模式下,nasm和c语言函数之间的参数传递是通过64位寄存器来进行的,而32位模式下,参数的传递则是通过栈来实现的,这一点区别很重要!!
在,64位模式下,针对64位整型参数(long类型),按照参数从左到右的顺序,依次通过寄存器 RDI
, RSI
, RDX
, RCX
, R8
, 和 R9
来传递,如果参数个数超过了这么多,那么多余的参数通过栈来传递
1, nasm 调用c语言函数
extern printf
section .text
global main
main:
push rbp
mov rbp, rsp
mov rdi, format
mov rsi, 5
mov rdx, 7
call printf
mov eax, 0
leave
ret
section .data
format db "%d == %d",0xa,0
编译方法 : nasm -f elf64 文件名
gcc 文件名.o
2, c语言调用nasm函数
test.c 文件源码:
#inc