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

目录

一:新建工程

1.新建工程

2.配置环境

2.1.选择设备

 2.2选择运行环境

 2.3添加源文件

二:汇编程序

1.代码

2.仿真器设置

 3.编译调试

4.调试结果

三.分析编译生成的Hex文件

1.扩展线性地址记录

2.数据方面

四.总结


一:新建工程

1.新建工程

2.配置环境

2.1.选择设备

 2.2选择运行环境

 2.3添加源文件

点开Target1 然后右击Source Group1进行文件添加

 

 选择 Asm File (.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 表示使用软件仿真;选择“Run to main()”则表示跳过汇编代码,直接跳转到main函数开始仿真。设置下面的“Dialog DLL”项为“DARMSTM.DLL”;parameter项为“-pSTM32F103C8”(parameter要改成自己选的芯片的型号),用于设置支持STM32F103C8的软硬件仿真。

 3.编译调试

4.调试结果

最终结果寄存器的值与设置的值一致。

三.分析编译生成的Hex文件

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

hex整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)

:020000040800F2为0x02,0x00,0x00,0x04,0x08,0x00,0xF2。

1.扩展线性地址记录

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

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

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

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

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

2.数据方面

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

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

在文件的最后一排,是一个文件的结束标志::00000001FF。这个是一个 END OF FILE RECORD,标识文件的结尾

四.总结

在仿真器设置时遇到了困难,在查阅多番资料后发现了问题所在,在运行调试时也出现了一些问题,在几番调试测验后成功。

参考文献:基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容_ssj925319的博客-CSDN博客

Guess you like

Origin blog.csdn.net/SS_SS_SSS_SSS/article/details/120555059