ARM汇编语言编程入门实践
文章目录
- 一、keil的安装
- 二、安装stm32 pack
- 三、keil 的简单设置
- 四、基于STM32汇编程序的编写
- 4.1 新建工程
- 4.2 新建test.s文件
- 4.3 编译程序
- 4.4 分析HEX文件
- 五、总结
- 六、参考资料
一、keil的安装
- 双击打开mdk_510.exe应用程序文件,点击Next>>。
- 勾选I agree…后,点击Next>>。
- 选择安装路径,并点击Next>>。
- 随意输入Name和E-mail,再点击Next>>。
- 点击安装
- 点击Finish。
- 点击OK后,鼠标会变成转圈圈的,因为正在进行在线安装各种pack,但会安装失败,不用着急,右上角关掉窗口,下面开始手动安装pack包。
二、安装stm32 pack
- 在刚解压缩的文件中,双击打开
ARM.CMSIS.3.20.4
包,出现安装界面后点击Next>>,开始安装。
- 点击Finish。
- 在刚解压缩的文件中,双击打开
Keil.STM32F1xx_DFP.1.0.4
包,出现安装界面后点击Next>>,开始安装。
- 安装结束后点击Finish。
- 当双击2.2.0的STM32 pack时,会出现安装失败,是因为2.2.0版本的pack只支持更高版本的keil软件,如若想安装上这个pack,可以去下载最新的keil,这里我们只做学习用,1.0.4版本的足够了。
三、keil 的简单设置
下载好了 keil 后,我们需要进行一些简单的设置
首先点击Edit→Configuration…,或者直接点工具栏的扳手图标,进入设置界面。
设置编码形式为
Chinese GB2312(Simplified)
,如果不设置,你从其它地方粘贴过来的代码含有中文的话,就会出现乱码,然后设置Tab size
为4。
进入
Color & Fonts
,选中C/C++ Editor files
,选中中间窗口内的元素后,可以在右侧修改样式,比如设置字体、大小、颜色、背景,Sample是设置后预览效果。
四、基于STM32汇编程序的编写
现在安装好了 keil 和 stm32 包,就来开始一个 stm32 的简单程序的编译。
4.1 新建工程
- 打开
Keil uVision5
,并新建一个工程。
- 在左侧的窗口内选择STM32芯片,这里我们选择
STM32F103RB
,并保存。
- 勾选相应的选项,并点击OK,这样工程创建完毕。
4.2 新建test.s文件
右键
Source Group
,选择Add New Item ...
添加
test.s
文件
然后将下列代码复制粘贴到
test.s
内。
AREA MYDATA, DATAAREA MYCODE, CODEENTRYEXPORT __main__mainMOV R0, #10MOV R1, #11MOV R2, #12MOV R3, #13;LDR R0, =func01BL func01;LDR R1, =func02BL func02BL func03LDR LR, =func01LDR PC, =func03B .func01MOV R5, #05BX LRfunc02MOV R6, #06BX LRfunc03MOV R7, #07MOV R8, #08 BX LR
- 仿真器设置
4.3 编译程序
点击左上角编译按钮,开始编译程序,此时0错误,0警告,表示编译成功。
可以看到寄存器R5、R6、R7、R8的值和程序设置的一样。
4.4 分析HEX文件
- .hex文件是什么:
它是由一行行符合
Intel HEX
文件格式的文本所构成的ASCII
文本文件。每一行包含一 个 HEX 记录 ,由对应机器语言码和/或常量数据的十六进制编码数字组成。Hex
文件通常用于传输将被存于ROM
或者EPROM
中的程序和数 据。大多数EPROM 编程器或模拟器使用Intel HEX
文件。Hex
文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex
文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex
。
:020000040800F2
:100000000006002031010008390100083B0100080A
:100010003D0100083F010008410100080000000008
:100020000000000000000000000000004301000884
:1000300045010008000000004701000849010008D0
:100040004B0100084B0100084B0100084B01000860
:100050004B0100084B0100084B0100084B01000850
:100060004B0100084B0100084B0100084B01000840
:100070004B0100084B0100084B0100084B01000830
:100080004B0100084B0100084B0100084B01000820
:100090004B0100084B0100084B0100084B01000810
:1000A0004B0100084B0100084B0100084B01000800
:1000B0004B0100084B0100084B0100084B010008F0
:1000C0004B0100084B0100084B0100084B010008E0
:1000D0004B0100084B0100084B0100084B010008D0
:1000E0004B0100084B0100084B0100084B010008C0
:1000F0004B0100084B0100084B0100084B010008B0
:100100004B0100084B0100084B0100084B0100089F
:100110004B0100084B0100084B0100084B0100088F
:100120004B0100084B0100084B0100084B0100087F
:100130000948804709480047FEE7FEE7FEE7FEE77B
:10014000FEE7FEE7FEE7FEE7FEE7FEE704480549B7
:10015000054A064B7047000041020008990200085A
:100160000000002000060020000200200002002005
:10017000704770477047000080B500F001F880BDFF
:1001800082B041F204000021C4F20200019100910A
:1001900050F8041C41F4803140F8041C50F8041C51
:1001A00001F400310091019901310191009919B9CF
:1001B0000199B1F5A06FF1D150F8041C890354BF27
:1001C0000021012100910099012936D142F200015C
:1001D000C4F202010A6842F010020A600A6822F0C2
:1001E00003020A600A6842F002020A6001680160C4
:1001F00001680160016841F480610160016821F4D7
:100200007C110160016841F4E811016050F8041CA0
:1002100041F0807140F8041C50F8041C8901FBD5A2
:10022000016821F003010160016841F002010160F1
:10023000016801F00C010829FAD102B070470000F2
:1002400080B541F20000C4F202000168002241F0D2
:10025000010101604168CFF6FF0211404160016871
:100260004FF6FF72CFF6F66211400160016821F48B
:1002700080210160416821F4FE0141604FF41F01BB
:100280008160FFF779FF4EF60850CEF200004FF084
:100290000061016080BD00004FF00A004FF00B01CB
:1002A0004FF00C024FF00D0300F009F800F00AF8CF
:1002B00000F00BF8DFF81CE0DFF81CF0FEE74FF071
:1002C000050570474FF0060670474FF007074FF0DF
:0C02D00008087047BF020008CB020008BD
:040000050800029954
:00000001FF
该文件为16进制的一串字符。hex文件的第一排字符称之为扩展线性地址记录,也称为32位地址记录
或HEX386
记录。
在第一行数据020000040800F2中,其实际表达为0x02 0x00 0x00 0x04 0x08 0x00 0xf2。具体含义为:
1.第一个字节 0x02 表示本行数据的长度;
2.第二三字节 0x00 0x00 表示本行数据的起始地址;
3.第四字节 0x04 表示数据类型;
4.然后是数据 0x08 0x00;
5.最后一个字节 0xf2 为检验和。
五、总结
通过本次实验,了解了HEX
的文件的内容,以及熟悉了对烧录代码到STM32的流程,受益匪浅。
六、参考资料
搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写
ARM汇编基础之基于MDK创建纯汇编语言的STM32工程
ARM汇编语言编程入门实践相关推荐
- 利用keil完成ARM汇编语言编程入门实践
文章目录 一.安装keil软件 1.下载安装包 2.安装keil 3.安装stm32 pack 二.简单的stm汇编语言的编程 1.新建工程项目 2.新建main.c文件 3.编译 4.stm32仿真 ...
- 【嵌入式系统开发05】ARM汇编语言编程入门实践
本文目的是主要介绍如何搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写.记录build生成的 hex文件各段的大小,了解Hex文件格式及其前8个字节内容含义,学习在没有硬件条件下 ...
- 搭建Keil编程环境,ARM汇编语言编程入门实践
多看多学 一.安装及配置环境 01 型号分类及缩写 02 资料共享 03 安装器件支持包 04 Keil简单设置 二.简单程序编译 01 新建工程 02 配置环境 03 添加源文件 04 设置仿真器模 ...
- 树莓派ARM汇编语言编程十讲(第1讲)
内容简介 树莓派单板机(Raspberry Pi Single Computer)是一种极了不起的产品,用户可以以非常低的成本获得一个Linux环境并带GPIO硬件扩展的迷你计算机系统.新一代树莓派4 ...
- WinPcap编程入门实践
转自:http://www.cnblogs.com/blacksword/archive/2012/03/19/2406098.html WinPcap可能对大多数人都很陌生,我在这里就先简单介绍一下 ...
- ARM 汇编语言编程学习笔记(1)
0.1.Thumb指令集 Thumb指令集是ARM指令集的子集,其性能更低,但是代码密度更高,功耗更低. Thumb指令集分为Thumb-1指令集和Thumb-2指令集,其中Thumb-1指令集是16 ...
- 第三周--AEM汇编语言编程入门
文章目录 一.STM32汇编程序 1.keil环境搭建 2.stm32程序 (1).新建工程 (2).配置环境 (3).编译调试 3.分析HEX文件 二.基于MDK创建STM32 1.创建一个新工程 ...
- ARM汇编语言编程-Keil环境搭建及STM32程序的编写
目录 一.keil环境搭建 1.keil安装 2.注册LIC 3.支持包安装 二.STM32程序 1.新建工程 2.配置环境 三.总结 一.keil环境搭建 推荐百度网盘下载mdk531 mdk31安 ...
- python入门实践1-11课视频分享
分享视频,分享知识,收获友谊,收获财富. 我是你们的老朋友,小雨,QQ:798033502 <Python编程入门实践>在先观看地址: 第一讲:我的第一个python实例 http://w ...
最新文章
- 处理器解决物联网和人工智能的融合
- 一行代码都不写!Github博客小白版入门教程
- CCAI 2020 | 黄铁军:“仿真主义”下的人工智能发展之路
- java中静态是什么,java中静态和非静态有什么区别
- postfix 部署ssl后还是25_宝塔面板的邮局管理器Postfix无法启动解决办法
- python sendto函数返回值_有返回值的函数amp;闭包(python)
- ffmpeg 新老接口问题及对照集锦
- 外部依赖项很多未定义标识符_从日本编程书籍《我的第一本编程书》中译版看中文例程如何扬长避短——标识符(一)
- iPad加价抢购,iPhone 11面临缺货,苹果的供应链困局来了
- 3D Math Primer for Graphics and Game Development -- 图形与游戏开发(3D数学基础) (简介)...
- UVA 1411 - Ants(二分图完美匹配)
- 7.2 重入锁(ReentrantLock)
- CListCtrl控件的使用指南
- Total Commander工具栏图标 备份
- Chinese Std GBT7714-2015.ens EndNote 样式文件
- 上海泛微面经(从Java开发到项目实施岗)
- found 1 high severity vulnerability in 1481 scanned packages run `npm audit fix` to fix 1 of them.
- 低成本WebIDE(centos7+codeserver+内网穿透)
- 【飞桨】GAN:U-GAT-IT【2020 ICLR】论文研读
- wex5 实战 常用代码模型集合
热门文章
- 为什么商家有了收款二维码还要使用聚合支付?
- 小程序跳到h5页面_小程序如何跳转h5页面
- (二)进程管理之进程状态及组织方式
- android studio编程实例,Android Studio JNI 开发简单案例
- NoSQL代表: Mongo DB(芒果数据库) NoSQL代表: Mongo DB(芒果数据库)
- K_均值聚类算法(算法设计与C代码实现)
- js实现搜索框智能搜索提示,类似百度搜索
- rz command
- Unity Steam_VR VRTK开发插件自带案例详解(一)
- 《高质量程序设计指南——C/C++语言》第1章 高质量软件开发之道