前言
Keil项目中既可以使用c语言编写,也可以使用汇编语言。C语言直观,汇编效率高,C里面嵌入汇编是很好的选择
提示:以下是本篇文章正文内容,下面案例可供参考
一、Keil中的C语言与汇编语言混合编程
1.创建项目文件
1) 在Keil中创建main.c和Func.s文件,创建完成后结构如下图:
2.编写代码
1) 编写main.c代码:
#include<stdio.h>
extern void Init_1(void);
int main(){
Init_1();
return 0;
}
2) Func.s汇编代码编写:
AREA My_Function,CODE,READONLY
EXPORT Init_1
Init_1
MOV R1,#0 ;R1-->i
MOV R2,#0 ;R2-->j
LOOP
CMP R1,#10
BHS LOOP_END
ADD R2,#1 ;j++
ADD R1,#1 ;i++
B LOOP
LOOP_END
NOP
END
}
3.调试
F5调试程序,可以看到R1、R2寄存器会从0不断累加1,直到为A时,退出循环
二、修改代码并调试
1.代码修改
1) main.c代码:
#include<stdio.h>
extern void Init_1(int x);
int main(){
int xx=Init_1(25)
return 0;
}
2) Func.s汇编代码
AREA My_Function,CODE,READONLY
EXPORT Init_1
Init_1
ADD R0,R0,#100 ;R0+100
BX LR
END
2.调试
调试
可以看到将25=0x19移到寄存器R0中
继续运行可以看到R0寄存器变为了125=0x7d,即25+100.
三、汇编函数调用c语言函数
编写c语言函数Func.c
#include<stdio.h>
extern int sum(int a,int b);
int sum(int a,int b){
int c;
a=50;
b=50;
c=a+b;
return c;
}
编写汇编函数main.s
AREA MYDATA, DATA
IMPORT sum
AREA MYCODE, CODE
EXPORT __main
__main
BL sum
BX LR
END
调试结果可以发现,R0寄存器为目标c的值,即为50+50=100=0x64
总结
通过汇编语言与c语言的相互配合使用,可以更加灵活的解决代码问题。