1. 创建工程并编写汇编程序
- 编写
test.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. 设置断点并开始调试
调试方法: Keil(MDK-ARM)系列教程(八)_在线调试(Ⅰ)_strongerHuang-CSDN博客_keil单步调试
要在编译没问题的情况下进行调试
- 调试结果
3. hex文件格式详解
- hex文件是什么
它是由一行行符合Intel HEX 文件格式的文本所构成的ASCII 文本文件。每一行包含一 个 HEX 记录 ,由对应机器语言码和/或常量数据的十六进制编码数字组成。Hex文件通常用于传输将被存于ROM 或者EPROM 中的程序和数 据。大多数EPROM 编程器或模拟器使用Intel HEX 文件。Hex文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。
- hex文件格式
冒号 | 数据长度 | 数据起始地址 | 数据类型 | 数据 | 校验码 |
---|---|---|---|---|---|
: | 1 byte | 2 byte | 1 byte | n byte | 1 byte |
第一个字节:表示数据的长度,即有多少个数据
第二个,第三个字节表示数据的起始地址.
第四字节表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。
‘00’ Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
‘01’ End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
‘02’ Extended Segment Address Record: 用来标识扩展段地址的记录
‘03’ Start Segment Address Record: 开始段地址记录
‘04’ Extended Linear Address Record: 用来标识扩展线性地址的记录
‘05’ Start Linear Address Record: 开始线性地址记录
第五个字节到最后一个字节之前,为数据
最后一个字节 为校验和。
校验和的算法为:计算校验和前所有16进制码的累加和(不计进位),检验和 = 0x100 - 累加和.
- 示例说明
其中第一行数据 :020000040800F2 ,可拆分为:
0x02
表示有两个数据
0x00 0x00
数据起始地址
0x04
代表数据类型,即扩展线性地址记录
0x08 0x00
表示两个数据
0xF2
校验和,检验和 = 0x100 - 累加和.
检验数据
累加和:将最后一个字节之前的数据相加,即0x02+0x00+0x00+0x04+0x08+0x00=0x0E
校验和=0x100-0x0E=0xF2,数据检验正确