×
单片机 > 单片机程序设计 > 详情

2440裸机编程之一 C语言调用汇编语言编程

发布时间:2020-06-02 发布时间:
|

一、内嵌汇编的方式,使用关键字__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
如下图:


关键字:2440  裸机编程  C语言  汇编语言 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
stm32 总线矩阵介绍