和C调用汇编一致,前四个参数用R0-R3传递,后面的用堆栈传递
测试这个程序:
//******************************************************
//main.C
extern int test(int, int, int);
int n;
int main(void)
{
n = test(2,4,6);
while(1);
}
int add(int a, int b, int c)
{
return a+b+c;
}
//******************************************************
;****************************************************
;test.S
IMPORT add ;引进add
EXPORT test ;供出test
AREA test,CODE,READONLY
CODE32
STR LR,[SP],#-4 ;保存LR:入栈
BL add ;调用C程序
LDR LR,[SP,#4]! ;LR出栈
MOV PC,LR ;返回main
END
;***************************************************
过程说明:main调用n = test(2,4,6),使2、4、6分别通过R0、R1、R2传递给汇编函数test,然后test调用C程序add,R0、R1、R2分别传给a、b、c,然后求和结果用R0返回test,test又将R0返回main函数,所以最后 n = 12;
如图:
注意汇编程序中IMPORT和EXPORT的用法:
IMPORT add:进口,指add在外部文件中,当前文件要调用EXPORT test:出口,指test在当前文件中,可以给外部文件调用同样在C文件中,如果要调用外部文件,使用extern关键字申明函数,如:extern int test(int, int, int);
这些关键字是必须的,如果在没有使用这些关键字的情况下,调用外部函数,编译器要报错的。
上一篇:malloc函数及用法
下一篇:S3C2440中断过程详解(ADS,TQ2440)
推荐阅读最新更新时间:2024-11-05 15:33
设计资源 培训 开发板 精华推荐
- STEVAL-ISA176V1,ALTAIR05T-800 评估板,5W 宽范围 CV-CC 无光适配器
- 【物联网】Harmony智能WIFI开关+1628082A
- esp32_N20电机驱动板
- 用于电池充电器的 24W、12V 交流转直流单输出电源
- IIS2DLPC适配器板,标准DIL 24插座
- RT8288A 4A, 21V 500kHz 同步降压转换器典型应用
- 基于uP9614+FP6601的快充模块
- DC1422A-B,演示板双路匹配 10MHz 低噪声、低失真二阶 LP 滤波器
- LT1683EG 演示板、低噪声/EMI 开关电源、36V 至 72Vin、5Vout @ 2A
- STuW81300宽带射频微波VCO和PLL评估套件