keil环境下基于STM32汇编程序的编写及了解Hex文件的内容

本文内容:搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写。

1)记录build生成的 hex文件各段的大小,了解Hex文件格式及其前8个字节内容含义;

2)学习在没有硬件条件下进行仿真调试的方法,观察ARM寄存器变化状况。


一,创建一个新工程

二,添加文件

三,汇编程序

四,程序调试

五,分析编译生成的Hex文件

六,总结

一,创建一个新工程

1.创建工程

点击project,选择New uvison Project

 命名文件并保存

选择芯片,我选的是STM32F103VE,然后点击ok

 CMSIS下选择CORE;Device下Startup,选完后点击🆗

二, 添加源文件

右击Source Group1,点击add New item to Groupz'Source Group1'

选择文件类型,这里点击Asm Files(.s)添加汇编文件,再输入文件名,并点击Add

 

点击Source Group1左边的加号,看到test1.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

 程序编译

首先点击options for target,然后在output下面勾选,creaate Hex File

Debug界面下,勾选Use Simulator,因为在后面要进行虚拟调试,点OK

 

点击Rebuild进行编译 

编译成功

 

 四,程序调试

点击右上角的图标进入调试界面

 运行时有些错误

修改dialog

 

再次调试,结果符合预期

 

五,分析生成的HEX文件 

用记事本打开hex文件,是一串十六进制字符

1.扩展线性地址记录

扩展线性地址记录(hex 文件的第一排十六进制)也叫作 32 位地址记录或 HEX386 记录

这些记录包含数据地址的高 16 位

扩展线性地址记录总是有两个数据字节,外观如下(这里我通过标记方便对应原始数据):

:020000040800F2

内容 

 

当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从 Intel HEX 文件读取来的随后的记录

线性地址保持有效,直到它被另外一个扩展地址记录所改变

通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址

2.数据部分
Intel HEX 由任意数量的十六进制记录组成。每个记录包含 5 个域,它们按一定格式排列::llaaaatt[dd...]cc

每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字

每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:

:llaaaatt[dd…]cc

 

3.文件尾

在文件的最后一排,是一个文件的结束标志:

:00000001FF

六,总结

第一次在keil上创建stm32的汇编语言让我受益良多,虽然遇到了很多的问题,但最后还是在大佬们文章的帮助下,都一一解决了,文章可能还存在些许错误,请大家多多包涵。

参考文献Keil环境下创建STM32汇编语言工程并分析HEX文件内容_m0_58414679的博客-CSDN博客

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值