在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来返回

相关推荐
智慧物业老杨19 小时前
智慧物业数智化转型实战:从工单响应到业主满意度的闭环构建
java·开发语言
Kiling_070419 小时前
Java集合框架:List集合详解与应用
java·开发语言·windows
fan_music20 小时前
C语言如何实现C++的类
开发语言·c++
毋语天20 小时前
Python 常用内置模块详解:日志、随机数、时间、OS 与 JSON
开发语言·python
右耳朵猫AI20 小时前
Python技术周刊 2026年第14周
开发语言·python·okhttp
叼烟扛炮20 小时前
C++ 知识点22 函数模板
开发语言·c++·算法·函数模版
求学中--20 小时前
鸿蒙网络请求从入门到精通:HttpURLConnection+第三方库,GET/POST/文件上传全覆盖
开发语言·php·harmonyos
yaodong51820 小时前
Gemini长上下文重塑RAG架构
开发语言·php
风味蘑菇干20 小时前
继承 + static + final 综合应用
java·开发语言
IT策士20 小时前
Python 面试系列:常见 100 个经典面试问题,从入门到进阶
开发语言·python·面试