C语言嵌套汇编语言

目录

一.创建新工程

 二.编写程序

2.1 main.c

2.2 Func.s

2.3 原理

三.添加源代码

3.1 添加main.c

 3.2 添加Func.s

 3.3修改debug参数改成只运行程序

 四.编译调试

 4.1 编译

 4.2 设置断点观察每次比较时的R1,R2大小

五、修改参考代码

5.1 函数的参数传递机制

5.1.1 对于x86平台

5.1.2 对于ARM平台

5.2main.c

5.3 Func.s

5.4添加文件编译

5.5设置断点调试

5.6 寄存器与堆栈使用规则

1)寄存器的使用规则

2)堆栈的使用规则

六.总结

七.参考文献


一.创建新工程

 

取名test1

 选择STM32F103C8

 

 二.编写程序

2.1 main.c

  1. 
    #include<stdio.h>
     
    extern void Init_1(void);
     
    int main(){
    	
    	Init_1();
    	
    	return 0;
    	
    }

2.2 Func.s

  1. AREA	My_Function,CODE,READONLY	;这一行必有的除了My_ Function可以自己取名意以外,其它的都是模版啦
    	EXPORT Init_1	;与在c文件中定义的Init_ 1函数关联起来
    	;高级语言中的声明和使用变量其实是对板子寄存器的使用,所以我们只需要直接使用寄存器即可
    Init_1
    	MOV R1,#0	;设R1寄存器是i
    	MOV R2,#0	;设R2寄存器是j
    LOOP	;写在最左边的是程序段的段名,执行跳转程序时要用到
    	CMP R1,#10 ;比较R1和10的大小
    	BHS LOOP_END	;如果R1大于或等于10,则跳转到LoOP_ END程序段,反之忽略该语句,直接执行下面的语句
    	ADD R2,#1	;j++
    	ADD R1,#1	;i++
    	B LOOP	;执行一次循环后,无条件再次进入循环判断,既是跳转到Loop段
    LOOP_END	;写在最左边的是程序段的段名,执行跳转程序时要用到
    	NOP
    
        END ;必须空格后在写END,不然会认为是段名,会结束程序

 注释变成了问号,解决办法Edit-configuraton

 点击ok就可以啦,重新复制一遍就ok啦

2.3 原理

首先在C里面用 extern 声明 Init_1这个函数,再在main里面调用好了。 然后在汇编里面用EXPORT Init_1与C联系起来就可以了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值