arm汇编基础基于keil创建stm32汇编程序的编写(代码片段)

死妖阿 死妖阿     2023-01-09     489

关键词:

一、新建项目

(1)工具介绍

使用工具是arm keil,可在官网下载—— 官网链接,点击下载:

(2)创建项目:

打开keil,点击project–>new μvision project:

选择文件路径,输入文件名,点击保存,建立项目:

二、配置环境

(1)配置芯片

这里选择STM32的芯片,F103系列:

选择STM32F103ZE,点击OK:

(2)配置运行环境

分别打开CMSIS的CORE,点击勾选,打开Device的startup,点击勾选,再点击OK:

到这里项目就创建和配置完成了,我们可以发现左边出现了项目文件,在Source Group 1中需要创建一个TEST的测试代码的文件:

右键鼠标,选择ADD NEW Item…:

选择Asm的file,输入文件名,再add:

三、调试代码(这里选择使用的是仿真调试)

(1)源代码

在TEST的文件中放入下面的测试代码:

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)仿真设置

仿真是因为在没有芯片的情况下来调试运行代码的一种方式。
后面会要分析hex文件,所以打开project里的option for target…后选择Target:

再选择debug,选择use simulator,再将第二步里的两个参数分别改为DARMSTM.DLL和-pSTM32F103ZE,点击ok:

点击21行位置设置断点后build,再开始仿真调试:

运行后,点击F10,跳转到最后:

hex文件分析

(1)hex文件介绍

Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。

(2)hex文件数据格式

可以在创建项目的文件夹objects中找到hex文件,以文本格式打开:

:020000040800F2
:100000000004002031010008390100083B0100080C
:100010003D0100083F010008410100080000000008
:100020000000000000000000000000004301000884
:1000300045010008000000004701000849010008D0
:100040004B0100084B0100084B0100084B01000860
:100050004B0100084B0100084B0100084B01000850
:100060004B0100084B0100084B0100084B01000840
:100070004B0100084B0100084B0100084B01000830
:100080004B0100084B0100084B0100084B01000820
:100090004B0100084B0100084B0100084B01000810
:1000A0004B0100084B0100084B0100084B01000800
:1000B0004B0100084B0100084B0100084B010008F0
:1000C0004B0100084B0100084B0100084B010008E0
:1000D0004B0100084B0100084B0100084B010008D0
:1000E0004B0100084B0100084B0100084B010008C0
:1000F0004B0100084B0100084B0100084B010008B0
:100100004B0100084B0100084B0100084B0100089F
:100110004B0100084B0100084B0100084B0100088F
:100120004B0100084B0100084B0100084B0100087F
:100130000648804706480047FEE7FEE7FEE7FEE781
:10014000FEE7FEE7FEE7FEE7FEE7FEE781020008C6
:10015000550100084FF00A004FF00B014FF00C0260
:100160004FF00D0300F009F800F00AF800F00BF86A
:10017000DFF81CE0DFF81CF0FEE74FF005057047E4
:100180004FF0060670474FF007074FF0080870471A
:100190007B0100088701000810B500F001F810BDD0
:1001A0000CB50020019000903348006840F4803086
:1001B0003149086000BF3048006800F4003000900A
:1001C0000198401C0190009818B90198B0F5A06FF3
:1001D000F1D12948006800F4003010B101200090EE
:1001E00001E0002000900098012843D123480068D6
:1001F00040F01000214908600846006820F0030024
:1002000008600846006840F0020008601A4840682C
:10021000194948600846406848600846406840F40C
:10022000806048600846406820F47C1048600846BA
:10023000406840F4E81048600846006840F080706C
:10024000086000BF0C48006800F000700028F9D07A
:100250000948406820F003000749486008464068A4
:1002600040F00200486000BF0348406800F00C0006
:100270000828F9D10CBD0000001002400020024007
:1002800010B51348006840F00100114908600846A5
:100290004068104908400E494860084600680E4909
:1002A00008400B4908600846006820F48020086078
:1002B0000846406820F4FE0048604FF41F00886044
:1002C000FFF76AFF4FF000600449086010BD0000AE
:1002D000001002400000FFF8FFFFF6FE08ED00E00E
:0400000508000131BD
:00000001FF

其中第一行 :020000040800F2 中,可以看做是0x02 0x00 0x00 0x04 0x08 0x00 0xf2;
第一个0×02表示该行数据中有两个数据;
第二个,第三个0x00 0x00表示本行数据的起始地址位;
第四个字节 0x04 表示扩展线性地址记录,对应上述的TT域;
第五个、第六个 0x08 0x00表示数据字节,与**数据长度域(LL)**中对应,即第一个 0x02;
最后一个字节0xf2为校验和。校验和= 0x100 - 累加和。

参考资料

ARM汇编基础之基于MDK创建纯汇编语言的STM32工程
hex文件百科
基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容
STM32基于汇编方式创建工程文件和闪烁LED灯

基于stm32的汇编程序(代码片段)

...EIL的下载及安装1.1mdk531的下载1.2mdk531的安装2基于STM32编写汇编程序2.1在Keil中新建工程2.2添加源文件2.3编译并调试程序2.4HEX文件分析3总结4参考文献1.KEIL的下载及安装1.1mdk531的下载链接:https://pan.baidu.com/s/1uiPGz_5Gorv0wOsAGUQsvg提... 查看详情

Keil stm32,使用汇编,分散文件和c。如何将c代码入口点导出到程序集?

】Keilstm32,使用汇编,分散文件和c。如何将c代码入口点导出到程序集?【英文标题】:Keilstm32,usingassembly,scatterfileandc.Howtoexportccodeentrypointtoassembly?【发布时间】:2019-08-0905:51:10【问题描述】:为了结合.c和汇编,我想传递我的.c... 查看详情

stm32代码的启动过程

...pwRAlZCjkmltPXfNxDA目录STM32三种启动模式串口下载程序原理从汇编代码分析STM32启动过程分享这篇文章,谈一下STM32启动流程。如果读者朋友已经有过汇编相关基础,能够够好理解本文内容。汇编语言 查看详情

如何用keil5创建stm32的工程

参考技术A基本不用自己建立工程。你可以使用STM32CUBEMX工具,你配置好后它自动帮你建立相应IDE的工程。MDK或IAR都可以。另外,STM32CUBE库里有基于各种IDE的工程例程,随便打开学习或使用。本回答被提问者采纳 查看详情

stm32

...载方法(ISP串口下载+JLINK下载更方便)新建工程模板——基于固件库新建工程模板——基于寄存器GPIO相关配置寄存器端口复用、重映射、中断JLINK在线调试JTAG/SWD调试原理软件仿真ST-LINK下载与调试程序(硬件)蓝牙模块HC05使用模块... 查看详情

stm32实例——基于stm32开发板实现传感数据采集-dht11温湿度采集(代码片段)

...发板实现传感数据采集-DHT11温湿度采集一、前言本项目是基于STM32开发板的温湿度采集,传感器采用DHT11温湿度传感器,软件采用keil5等。本项目采用ARM结构中最为代表的Cortex-M4系列的芯片,选用STM32F407ZGT6开发板进行... 查看详情

stm32f4_引领入门

1.开发工具Keil开发ST芯片的工具有很多,官方也提供有(STVP),笔者这里不评论哪一个工具好,哪一个工具不好,只想说,各有各的好,你使用哪一个看你自己选择。笔者习惯性使用Keil(MDK-ARM),因此,推荐的也是Keil。关于Keil(MD... 查看详情

stm32的意思是啥呢?

...上讲,一方面就是学习接口电路设计,另一方面就是学习汇编和C语言的板级编程。如果从软件上讲,就是要学习基于ARM处理器的操作系统层面的驱动、移植了。硬件的寄存器类的东西还是要能看懂的,掌握基于板级的汇编和C编... 查看详情

stm32之开发入门

...stm32应用之前,我们需要先配置好开发环境。  首先从keil官网下载keilMDK-ARM软件包(v5版本与v4版本不同,v5版本需要下载额外的stm32芯片包)和芯片包(芯片包按照你需要的版本下载即可)。keilMDK-ARM软件包下载地址:https://www.... 查看详情

stm32开发中startup.s文件中常见的命令功能

...发展,越来越多的软件工程师在编程时很少有机会接触到汇编语言。在ARM的开发中,我们不可避免的会遇到启动文件的编写,在KEIL环境中一般采用了startup.s的文件作为启动代码,很多工程师一见到这个文件就很头痛,这里我简... 查看详情

ARM 汇编中的 STR 指令不起作用(使用 KEIL)

】ARM汇编中的STR指令不起作用(使用KEIL)【英文标题】:STRinstructioninARMassemblydoesn\'twork(usingKEIL)【发布时间】:2015-03-1619:40:29【问题描述】:我正在尝试在内存中存储一​​个值。我的代码在这里:TTLTESTglobalmainAREAPROGRAM,CODE,READO... 查看详情

arm汇编基础

...多版本。学习处理器,还是从最简单的入手,就像学习x86汇编,先学习8086一样。1.ARM汇编分类标准汇编:ARM公司标准的汇编环境,只有ARM编译器才可以使用,如ADS集成开发环境。GNU汇编:Linux下的GNU交叉工具链中的汇编环境,我... 查看详情

stm32学习笔记①:环境配置及室内温湿度检测(代码片段)

...第一个项目,在此做下笔记一、项目简介1.项目名称基于STM32的室内温湿度检测2.项目设计思路思路:本项目采用ARM结构中最为代表的Cortex-M4系列的芯片,选用STM32F407ZGT6开发板进行项目开发,选用的传感器为常见通... 查看详情

android逆向基础之arm汇编语言知识总结(代码片段)

文章目录前言ARM32汇编1.1寄存器1.2寻址方式1.3汇编指令1.4代码识别1.5IDA示例ARM64汇编2.1寄存器2.2变址寻址方式2.3常用汇编指令2.4实例程序分析总结前言X86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称,包括Intel8086... 查看详情

keil5创建工程(stm32f407)(代码片段)

...假设电脑已安装好了Keil5,安装部分不讲STM32F40x工程创建1.安装芯片支持包2.新建项目目录3.新建工程newproject4.STM32固件库5.工程文件添加6.源码修改及编译7.工程烧录1.安装芯片支持包Keil只是一个开发平台,不带STM32的芯片... 查看详情

如何查看keil能否支持stm32m0内核

参考技术A你说的是两个部分,一个是uv3(keil)的使用,另一个是stm32的使用、编程。你要先熟悉uv3的使用,网上能找到keil(uv2)的使用视频。先打开keil目录下(D:\Keil\arm\Boards\st\EK-stM32F)有一些stm32的简单例程,... 查看详情

stm32怎么通过仿真器在keil的debug中查看定时器的计数值

...,选定一下就行了。参考技术A__asm只表示该函数是纯粹的汇编语言写成的,因此需要手工在函数最后加上BXLR以返回程序调用者。 查看详情

android逆向基础之arm汇编语言知识总结(代码片段)

文章目录前言ARM32汇编1.1寄存器1.2寻址方式1.3汇编指令1.4代码识别1.5IDA示例ARM64汇编2.1寄存器2.2变址寻址方式2.3常用汇编指令2.4实例程序分析总结前言X86是英特尔Intel首先开发制造的一种微处理器体系结构的泛称,包括Intel8086... 查看详情