完成汇编程序&分析生成的hex文件

完成汇编程序&分析生成的hex文件



任务摘要

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


提示:以下是本篇文章正文内容,下面案例可供参考

一、新建项目

打开编译软件
在这里插入图片描述
新建工程
点击project,选择New uVision Project...
在这里插入图片描述
输入名后保存
在这里插入图片描述
选择STM32F103VE芯片,然后点击 OK
在这里插入图片描述
ARMCMSIS已经把开发所需要的软件组件都封装好了,因此直接选择即可—— CMSIS下选择COREDeviceStartup
在这里插入图片描述
点击ok
在这里插入图片描述
添加源文件
右击Source Group 1,点击Add New Item to Group 'Source Group 1'...
在这里插入图片描述
点击 Asm Files (.s)添加汇编文件,然后输入文件名,并点击 Add
在这里插入图片描述
添加后显示如下
在这里插入图片描述

二、程序编写与烧录

1.程序编写

one.s中添加如下代码

 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 界面下,选择 ST-Link Debugger
在这里插入图片描述
然后点击ST-Link Debugger旁边的Settings,设置端口为SW
在这里插入图片描述
点击Flash Download,点击Add,选中STM32F10x High-density Flash ,然后点击Add
在这里插入图片描述
最后保存。

3.硬件连接

硬件连接如下
在这里插入图片描述
在这里插入图片描述

4.编译调试

编译结果
在这里插入图片描述
点击调试按钮
在这里插入图片描述
结果符合预期
在这里插入图片描述

三、分析hex文件

hex文件各段
在这里插入图片描述
记事本打开 hex 文件
在这里插入图片描述
扩展线性地址记录
扩展线性地址记录(hex 文件的第一排十六进制)也叫作 32 位地址记录或 HEX386 记录
这些记录包含数据地址的高 16 位
扩展线性地址记录总是有两个数据字节,外观如下
在这里插入图片描述
当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从 Intel HEX 文件读取来的随后的记录
线性地址保持有效,直到它被另外一个扩展地址记录所改变
通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址
数据部分
Intel HEX 由任意数量的十六进制记录组成。每个记录包含 5 个域,它们按一定格式排列::llaaaatt[dd…]cc
每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字
每一个域由至少两个十六进制编码数字组成,它们构成一个字节
在这里插入图片描述
Intel HEX文件由任意数量以回车换行符结束的数据记录组成
在这里插入图片描述
文件尾
在文件的最后一排,是一个文件的结束标志::00000001FF
在这里插入图片描述
END OF FILE RECORD,标识文件的结尾


总结

生成hex文件才能成功在单片机上进行烧录。此文件比较小,以冒号开始,回车键结束的一条条数据组成,每个数据的格式一一对应,这样就方便单片机读取数据并执行。

参考资料

ARM汇编基础之基于MDK创建纯汇编语言的STM32工程.

猜你喜欢

转载自blog.csdn.net/QWERTYzxw/article/details/111991122
今日推荐