64位模式下 nasm 和c语言的互相调用

在64位模式下,nasm和C语言之间的参数传递通过64位寄存器进行,不同于32位模式下的栈传递。64位整型参数依次通过RDI, RSI, RDX, RCX, R8, R9寄存器传递,超出数量则使用栈。nasm调用C函数通过`gcc`编译,C调用nasm函数需将nasm文件与C源码一起编译。不同数据类型可能涉及不同寄存器,具体参照x86-64 ABI文档。" 71028507,5820602,Android开发:LinearLayout布局详解,"['Android开发', '布局管理', 'XML配置']
摘要由CSDN通过智能技术生成

首先,需要说明的是,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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值