在C语言中调用汇编语言的函数

在C语言中调用汇编文件中的函数,要做的主要工作有两个:

一是在C语言中声明函数原型,并加extern关键字;

二是在汇编中用EXPORT导出函数名,并用该函数名作为汇编代码段的标识,最后用mov pc, lr返回。然后,就可以在C语言中使用该函数了。

从C语言的角度,并不知道该函数的实现是用C语言还是汇编语言。更深的原因是因为C语言的函数名起到表明函数代码起始地址的位置,这个和汇编的label是一致的。

实例代码:

cpp 复制代码
#include <stdio.h>

extern void asm_strcpy(const char *src, char *dest);

int main()
{
	const char *s = "welcome to ETC";
	char  d[32];
	asm_strcpy(s, d);
	return 0;
}

建立strcpy.s代码,并加入工程中。

cpp 复制代码
;asm function implementation
		AREA asmfile, CODE, READONLY
		EXPORT asm_strcpy
		asm_strcpy
loop
		ldrb          r4, [r0], #1          ;address increment after
read
		cmp           r4, #0
		beq           over
		strb          r4, [r1], #1
		b             loop
over
		mov           pc, lr
END

在这里,C语言和汇编语言之间的参数传递是通过ATPCS(ARM Thumb Procedure Call Standard)的规定来进行的。简单地说,就是如果函数有不多于4个参数,对应的用R0~R3来进行传递,多于4个时借助栈,函数的返回值通过R0来返回

相关推荐
尤老师FPGA5 分钟前
QT代码自适应窗口
开发语言·qt
biter down7 分钟前
5:原生 assert 断言
开发语言
布朗克1688 分钟前
12 封装与构造方法
java·开发语言·封装·构造方法
z落落18 分钟前
C# 抽象类(abstract)
java·开发语言·c#
折哥的程序人生 · 物流技术专研23 分钟前
AI 编程与行业赋能|专栏总目录(持续更新)
开发语言·人工智能·软件工程·ai编程
SilentSamsara26 分钟前
爬虫工程化:Playwright + 反反爬 + 数据清洗管道实战
开发语言·爬虫·python·青少年编程·playwright
AI玫瑰助手29 分钟前
Python函数:函数的返回值(return)与多值返回
开发语言·python·信息可视化
花果山~~程序猿31 分钟前
快速认识python项目的虚拟环境
开发语言·python
basketball61638 分钟前
Go语言从入门到进阶:8. 接口
开发语言·后端·golang
gCode Teacher 格码致知40 分钟前
Python教学:字符编码的四种环境-由Deepseek产生
开发语言·python