【嵌入式系统开发07】基于STM32汇编程序的编写

一、环境的搭建

关于MDK的安装

参考
https://blog.csdn.net/qq_43279579/article/details/108880667?utm_source=app
很详细
但是keygen注册码只有到2020年的,需要另外找一个2032年的版本。

二、基于MDK创建汇编语言STM32工程

建立新项目

选择STM32F103ZE,勾选设置如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入Name之后点击Add 即可完成创建。

三.代码

源代码如下

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

步骤:

在Debug选项卡中选择Use Simulator,表示使用软件仿真;

选择Run to main()则表示跳过汇编代码,直接跳转到main函数开始仿真;

设置下面的Dialog DLL项为DARMSTM.DLLTARMSTM.DLL

parameter项为-pSTM32F103C8,用于设置支持STM32F103C8的软硬件仿真。

四、编译调试

在这里插入图片描述
点击左边保存后,右边编译调试。
随后发现寄存器R5,R6,R7,R8与程序设置一致,如下图所示。在这里插入图片描述
点击右边的三次后点左边的×。发现
在这里插入图片描述

五.生成HEX文件

按图所点后 点击确定
在这里插入图片描述

六.分析HEX文件

文件使用txt文本打开后如图。

:020000040800F2
:100000001806002031010008390100083B010008F2
:100010003D0100083F010008410100080000000008
:100020000000000000000000000000004301000884
:1000300045010008000000004701000849010008D0
:100040004B0100084B0100084B0100084B01000860
:100050004B0100084B0100084B0100084B01000850
:100060004B0100084B0100084B0100084B01000840
:100070004B0100084B0100084B0100084B01000830
:100080004B0100084B0100084B0100084B01000820
:100090004B0100084B0100084B0100084B01000810
:1000A0004B0100084B0100084B0100084B01000800
:1000B0004B0100084B0100084B0100084B010008F0
:1000C0004B0100084B0100084B0100084B010008E0
:1000D0004B0100084B0100084B0100084B010008D0
:1000E0004B0100084B0100084B0100084B010008C0
:1000F0004B0100084B0100084B0100084B010008B0
:100100004B0100084B0100084B0100084B0100089F
:100110004B0100084B0100084B0100084B0100088F
:100120004B0100084B0100084B0100084B0100087F
:100130000948804709480047FEE7FEE7FEE7FEE77B
:10014000FEE7FEE7FEE7FEE7FEE7FEE704480549B7
:10015000054A064B704700004F020008590300088B
:1001600018000020180600201802002018020020A5
:100170000CB50020019000906C48006840F480307D
:100180006A49086000BF6948006800F400300090C8
:100190000198401C0190009818B90198B0F5A06F23
:1001A000F1D16248006800F4003010B101200090E5
:1001B00001E0002000900098012843D15C480068CD
:1001C00040F010005A4908600846006820F003001B
:1001D00008600846006840F0020008605348406824
:1001E000524948600846406848600846406840F404
:1001F000806048600846406820F47C1048600846EB
:10020000406840F4E81048600846006840F080709C
:10021000086000BF4548006800F000700028F9D071
:100220004248406820F00300404948600846406862
:1002300040F00200486000BF3C48406800F00C00FD
:100240000828F9D10CBD10B5FFF792FF10BD10B50D
:100250003648006840F001003449086008464068AC
:10026000344908403149486008460068324908402E
:100270002E4908600846006820F48020086008467F
:10028000406820F4FE0048604FF41F008860FFF7CC
:10029000DAFF4FF000602949086010BD10B5002159
:1002A00000200022214B5B6803F00C0121B10429DE
:1002B00006D0082928D107E0214B224C236027E0F3
:1002C0001F4B204C236023E0184B5B6803F4701035
:1002D000164B5B6803F48032022303EB904022B993
:1002E000194B4343174C23600DE0104B5B6803F43C
:1002F000003323B1144B4343124C236003E0104BF3
:100300004343104C236003E00D4B0E4C236000BFB1
:1003100000BF064B5B68C3F303130C4CE15C094B55
:100320001B68CB40074C236010BD0000001002404A
:10033000002002400000FFF8FFFFF6FE08ED00E09D
:1003400000127A000000002000093D000400002097
:1003500070477047704700004FF00A004FF00B01E4
:100360004FF00C024FF00D0300F009F800F00AF80E
:1003700000F00BF8DFF81CE0DFF81CF0FEE74FF0B0
:10038000050570474FF0060670474FF007074FF01E
:10039000080870477F0300088B03000800A24A0486
:1003A0000000000000000000010203040607080925
:040000050800035993
:00000001FF

每行数据都会有一个冒号开始,后面的数据由:数据长度、地址、标识符、有效数据、校验数据等构成

第四个字节有0x00 0x01 0x02 0x03 0x04 0x05,分别有以下含义

'00’Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
'01’文件结束记录:用来标识文件结束,放在文件的最后,标识HEX文件的结尾
'02’扩展段地址记录:用来标识扩展段地址的记录
'03’开始段地址记录:开始段地址记录
'04’扩展线性地址记录:用来标识扩展线性地址的记录
'05’开始线性地址记录:开始线性地址记录

七、总结

利用Keil MDK创建汇编语言stm32工程并不复杂,虽然断点调试过程中出现了一些问题,但最终得以解决。如果想要实现预期,还是需要掌握了解汇编语言,需要不断实践,在之后配合硬件学习,相信会有跟进一步的学习和掌握。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不知名未几

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值