一、创建一个新工程
1.创建工程
①点击Project,选择New uvison Project

选择文件保存的路径以及文件的名称
2.环境配置
选择对应的芯片,文中使用了STM32F103C8T6

运行环境配置,主要是CMSIS下选择CORE;Device下Startup,其中包含了启动文件

二、添加文件
1.鼠标右键单击Source Group 1,选择Add New Item to Group

2.选择 Asm File (.s) ,设置源文件的名称,点击Add(.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 of target ,选择Debug

Debug中 左上角有Use simulator 选项勾上 才可以进行仿真,不选择该选项程序无法进行仿真。
之后 我们进行仿真器的选择。
设置硬件仿真器为J_Link(根据实际情况选择),仿真器的模式设置为JTAG接口或者SW(根据实际情况选择)。设置完成,连接相应的仿真器会有对应信息显示。
仿真调试(断点设置是在代码行前点击,出现红点,即表明断点设置成功)
四、分析编译生成的Hex文件

关于HEX文件的一些解析
Code:代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区。
RO-data: Read Only data,只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。C语言中const关键字定义的变量就是典型的RO-data。
RW-data: Read Write data,可读写数据域,它指初始化为“非0值”的可读写数据,程序刚运行时,这些数据具有非0的初始值,且运行的时候它们会常驻在RAM区,因而应用程序可以修改其内容。C语言中定义的全局变量,且定义时赋予“非0值”给该变量进行初始化。
ZI-data: Zero Initialie data,即0初始化数据,它指初始化为“0值”的可读写数据域。它与RW-data的区别是程序刚运行时这些数据初始值全都为 0,而后续运行过程与RW-data的性质一样,它们也常驻在RAM区,因而应用程序可以更改其内容。例如C语言中使用定义的全局变量,且定义时赋予“ 0 值”给该变量进行初始化(若定义该变量时没有赋予初始值,编译器会把它当ZI-data来对待,初始化为 0);
ZI-data 的栈空间(Stack)及堆空间(Heap):在C语言中,函数内部定义的局部变量属于栈空间,进入函数的时候会向栈空间申请内存给局部变量,退出时释放局部变量,归还内存空间。而使用malloc动态分配的变量属于堆空间。在程序中的栈空间和堆空间都是属于ZI-data区域的,这些空间都会被初始值化为0值。编译器给出的ZI-data占用的空间值中包含了堆栈的大小(经实际测试,若程序中完全没有使用malloc动态申请堆空间,编译器会优化,不把堆空间计算在内)。
第一行内容分别是0x02,0x00,0x00,0x04,0x08,0x00,0xF2。
- 0x02
- 该行数据中有两个数据
- 0x00 0x00
- 本行数据的起始地址位
- 0x04
- 用来标识扩展线性地址的记录
- 该字节还可以是其他值,下面是其他值的含义
- 00:用来记录数据,HEX文件的大部分记录都是数据记录
- 01:用来标识文件结束,放在文件的最后,标识HEX文件的结尾
- 02:用来标识扩展段地址的记录
- 03:开始段地址记录
- 05:开始线性地址记录
- 0x08 0x00
- 该行两个字节的数据
- 数据类型是 04 ,即该行记录的是一个拓展地址(0x08 0x00 是地址信息,用法是将该地址(0x0800<<16) 后作为基地址
- 0xF2
- 校验和,校验和= 0x100 - 累加和
五、实验心得
通过对于汇编语言的初步学习,理解了汇编语言不像是高级程序设计语言一样具有很强的可读性,要有很强的层次性和逻辑性,对于晦涩不容易懂得汇编语言还需要进行加强一步的学习,才可以利用汇编语言进行程序的设计,而不是简单的Ctrl+C写代码的过程。
虽然汇编语言晦涩难懂,但是学习起来还是挺有乐趣,希望在接下来的学习过程中可以提高写代码的水平,同时利用汇编开发更高效的程序。
参考博客链接如下:https://blog.csdn.net/qq_43279579/article/details/111717607
https://blog.csdn.net/tyustli/article/details/86061856
