建立工程
选择芯片STM32F103VE
配置环境
编写C语言程序
#includeextern void Init_1(void); int main() { Init_1(); return 0; }
编写汇编语言
AREA My_Function,CODE,READonLY EXPORT Init_1 Init_1 MOV R1,#0 MOV R2,#0 LOOP CMP R1,#10 BHS LOOP_END ADD R2,#1 ADD R1,#1 B LOOP LOOP_END NOP END
修改设置以进行模拟仿真
运行结果
二、代码改写 要求将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100。#includeextern int Init_1(int x); int main() { Init_1(1); return 0; }
AREA My_Function,CODE,READonLY
EXPORT Init_1
Init_1
ADD R0,#100
END
从C语言中传入的数值默认存在R0寄存器中,在R0寄存器中加100
运行结果
在十六进制下101为65
三、在汇编语言中调用C语言程序#includeextern int Init_1(); int Init_1() { int x=1; return x+100; }
import Init_1
AREA MYCODE, CODE
EXPORT __main
__main
BL Init_1
END
运行结果
在十六进制下101为65
四、总结初次尝试C与汇编语言混合编程,尝试了在C语言中调用汇编语言与在汇编语言中调用C语言,对寄存器功能有初步了解,还有不足需要继续学习。
五、参考*** error 65: access violation at C:0x003D : no 'execute/read' permission_xiaobai06的博客-CSDN博客https://blog.csdn.net/qq_40766654/article/details/102572078Keil下STM32的C与汇编语言混合编程_m0_58414679的博客-CSDN博客https://blog.csdn.net/m0_58414679/article/details/120683774?spm=1001.2014.3001.5501



