目录
一、在C语言中调用汇编语言
1、代码实现
2、仿真调试
二、在汇编语言中调用C语言
1、 代码实现(功能与上述相同)
2、仿真调试
三、个人总结
四、参考内容
一、在C语言中调用汇编语言
1、代码实现
首先创建两个分别以C语言和汇编语言为基础的代码文件: main.c 和 func.s;
汇编语言中的函数功能为:传入一个整型数x,函数运行后返回整型数 x+100
main.c
#includeextern int init(int x); //引用外部函数 int main(void) { int x=20; init(x); //调用外部函数 return 0; }
func.s
AREA func, CODE, READonLY ;声明代码段func为只可读 EXPORT init ;与C文件中定义的init函数关联起来 init add r0,r0, #100 ;寄存器r0的值加上100并赋给r0 bx lr ;返回主函数
编译没有错误:
2、仿真调试
先对调试环境进行一些设置:点击如下“魔法棒”图标。
进行参数设置:Debug——>Use Simulator,然后设置完成。
点击调试按钮:
先查看X的值为20,转化为十六进制后为14。
再在左上角选择单步调试,得到R0的值为78(十六进制),转化为十进制为120=100+20。
二、在汇编语言中调用C语言
1、 代码实现(功能与上述相同)
首先创建两个分别以C语言和汇编语言为基础的代码文件: func.c 和 asm_main.s。
func.c
#includeextern void asm_main(); //引入汇编函数 int init(int x) { return x+100; } int main() { asm_main(); //调用汇编函数 return 0; }
asm_main.s
AREA asm,CODE,READonLY ;声明代码段asm import init ;引入外部函数,即C语言函数init EXPORT asm_main ;声明,以便调用 asm_main mov r0, #20 ;使寄存器r0的值等于20 BL init ;调用外部函数,即C语言函数 bx lr ;返回主函数
编译没有错误:
2、仿真调试
参数设置同上。
先查看R0的值为14(十六进制),转化为十进制为20。
单步运行后,调用外部函数init,R0的值为78,转化为十进制后为120=100+20。
三、个人总结
C语言直观,汇编效率高,C语言里嵌入汇编是很好的选择。
四、参考内容
ARM下C语言和汇编语言混合编程_diyu-CSDN博客



