基于MDK创建纯汇编语言的STM32工程

实验内容:参考作业附件或者博客 “ 基于MDK创建纯汇编语言的STM32工程 ”,在Keil下完成一个汇编程序的编写,学习动态调试变量;并注意观察最终生成 hex文件的各段的大小,以及Hex文件前8个字节内容。

一、新建项目
1)新建工程
点击 Project ——> New uVision Project 创建新项目:

在这里插入图片描述
输入工程名:
在这里插入图片描述
2)配置环境
设置工程的目标环境STM32F103C8:

在这里插入图片描述
在CMSIS下选择CORE,Device下选择Startup:

在这里插入图片描述
右击 Source Group 1 ,点击 Add New Item to Group:

在这里插入图片描述

点击 Asm Files (.s)创建汇编文件 ,输入文件名:

在这里插入图片描述
完成结果:
在这里插入图片描述
二、测试代码
1)编写代码

 AREA MYDATA, DATA
	
 AREA MYCODE, CODE
	ENTRY
	EXPORT __main

__main
	MOV R0, #10
	MOV R1, #11
	MOV R2, #12
	MOV R3, #13
	;LDR R0, =func01

	BL	func01
	;LDR R1, =func02
	BL	func02
	
	BL 	func03
	LDR LR, =func01
	LDR PC, =func03
	B .
		
func01
	MOV R5, #05
	BX LR
	
func02
	MOV R6, #06
	BX LR
	
func03
	MOV R7, #07
	MOV R8, #08	
	BX LR

2)设置仿真器
点击 魔法棒 ,在 Output 中勾选 Create HEX File 生成 hex 文件:

在这里插入图片描述
在debug中选择“Use Simulator”,设置Dialog DLL项为“DARMSTM.DLL”,parameter项为“-pSTM32F103C8”:

在这里插入图片描述
3)编译调试
编译工程:
在这里插入图片描述

调试模式:
在这里插入图片描述
结果符合预期,寄存器R5,R6,R7,R8的值和程序设置一致:
在这里插入图片描述

三、分析 hex 文件
1)hex文件
最终生成的 hex 文件的各段大小:

在这里插入图片描述
用记事本打开 hex 文件:

在这里插入图片描述
2)hex文件格式
Intel HEX 由任意数量的十六进制记录组成,每个记录包含 5 个域,它们按一定格式排列::llaaaatt[dd…]cc。每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字;每一个域由至少两个十六进制编码数字组成,它们构成一个字节。

在这里插入图片描述
3)前8个字节的内容含义
在这里插入图片描述
以此文件为例:

:020000040800F2  //==文件第一行==
例::020000040800F2
02:代表本行有2个字节数据
0000:本行数据的起始地址(偏移地址)
04:扩展线性地址标识,表面后面2个字节数据是后面数据的基地址
注:由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,故有了扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录含数据的高16位,扩展线性地址记录总是有两个数据字节。
0800:是扩展地址 (0x0800 << 16) = 0x08000000后面的数据记录都以这个地址为基地址。
F2: 记录本行校验和 F2=0x100-(0x02+0x04+0x08)

四、实验总结
通过完成本次实验——基于MDK创建纯汇编语言的STM32工程,我了解了STM32汇编语言的知识,明白了hex文件的格式和数字段的意义,对以后更加深入地学习STM32汇编打下了良好的基础。
五、参考资料
1、ARM汇编基础之基于MDK创建纯汇编语言的STM32工程链接
2、基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容链接
3、基于MDK使用汇编语言创建STM32工程链接

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姝歌

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值