一、内嵌汇编的方式,使用关键字__asm{汇编指令……},这种方式操作简单,但是限制很多,比如:不能写PC、不支持标号表达式等等,许多正常的汇编指令和伪指令都不用。
下面是个例子:
//******************************************
int x = 3;
int y = 5;
int z;
int main(void)
{
__asm
{
MOV R0,x
MOV R1,y
ADD R0,R0,R1
MOV z,R0
}
while(1);
}
//******************************************
结果即z=x+y
如图
二、调用外部汇编的方式
1) 如果参数不超过4个,依靠R0-R3传递,程序如下:
//******************************************
//main.C
int z;
extern int add(int,int); //外部链接
int main(void)
{
z = add(3,5);
while(1);
}
//******************************************
;*********************************************
;add.S
EXPORT add
AREA add,CODE,READONLY
CODE32
ADD R0,R0,R1
MOV PC,LR ;返回
END
;*********************************************
仿真结果: z=3+5
如下图:
2) 如果参数超过4个,前四个用R0-R3传递,其余用堆栈传递,程序如下:
//******************************************
//main.C
int z;
extern int add(int,int,int,int,int); //外部链接
int main(void)
{
z = add(1,2,3,4,5);
while(1);
}
//******************************************
;*********************************************
;add.S
EXPORT add
AREA add,CODE,READONLY
CODE32
ADD R0,R0,R1
ADD R0,R0,R2
ADD R0,R0,R3
LDR R1,[SP] ;取出第五个参数
ADD R0,R0,R1
ADD SP,SP,#4 ;调整堆栈指针,找到返回地址
MOV PC,LR ;返回
END
;*********************************************
仿真结果: z=1+2+3+4+5
如下图:
上一篇:Mini2440裸机程序之ADC
下一篇:malloc函数及用法
推荐阅读最新更新时间:2024-11-05 16:44
设计资源 培训 开发板 精华推荐
- 使用 Microchip Technology 的 MIC5322-2.8/1.5YMT 的参考设计
- APDS9960光学传感器模块
- 具有额外 1 相 30A 冗余的 LTM4647IY 3 相 1V 90A 设计的典型应用电路
- LTC3728LXCUH 双通道、550kHz、2 相同步稳压器的典型应用电路
- 2017电赛A题微电网系统
- 使用 Omron 的 S8VS-09024B 的参考设计
- 使用 Analog Devices 的 LTC5569 的参考设计
- 采用 AES 参考设计的 SD/MMC 卡上的 USB 高速设备大容量存储
- OM7898:基于 BGU8M1UK 低噪声射频放大器的 LTE LNA 评估板,适用于 LTE 接收器应用
- LT8606EMSE 3.3V、2MHz 降压型稳压器的典型应用电路