版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章基于ARM的嵌入式程序设计1ARM汇编语言的伪操作、宏指令与伪指令
--ARM汇编语言程序设计2ARM汇编程序的结构
.equ x,45 /*x=45*/.equ y,64 /*y=64*/.equ z,87 /*z=87*/.equ stack_top,0x1000 /*definethetopaddressforstacks*/.global_start.text_start: /*codestart*/ mov r0,#x /*putxvalueintoR0*/ mov r0,r0,lsl#8 /*R0=R0<<8*/ mov r1,#y /*putyvalueintoR1*/ add r2,r0,r1,lsr#1/*R2=(R1>>1)+R0*/
stop: b stop /*endthecode,cycling*/.end4.1ARM汇编语言的伪操作、宏指令与伪指令
伪操作:ARM汇编语言程序里的一些特殊指令助记符,它的作用主要是为完成汇编程序做各种准备工作。宏指令:一段独立的程序代码,可以插在源程序中,它通过伪操作来定义。伪操作、宏指令一般和编译程序有关。因此ARM汇编语言的伪操作、宏指令在不同的编译环境下有不同的编写形式和规则。目前常用的ARM编译开发环境有两种ADSIDE开发环境:它由ARM公司开发,使用了CodeWarrior公司的编译器;集成了GNU开发工具的IDE开发环境:它由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。4.1.1GNU编译环境下的ARM伪操作常量编译控制伪操作1.byte用于分配一段字节内存单元,并用伪操作中的expr初始化。语法格式.byteexpr{,expr}….byte21,48,89,0x13,0xff 4.1.1GNU编译环境下的ARM伪操作常量编译控制伪操作1.word.long.int用于分配一段字内存单元,并用伪操作中的expr初始化。语法格式.wordexpr{,expr}….word21,0x1,10033,0x77ff2255 4.1.1GNU编译环境下的ARM伪操作Src:.long1,2,3,4,5,6 /*定义一个数据区,以src为起始地址*/ /*每个数据均分配4B空间*/ 4.1.1GNU编译环境下的ARM伪操作字符编译控制伪操作1.equ及.set.equ伪操作用于为数字常量、基于寄存器的值和程序中的标号定义一个字符名称。.set作用同.equ。语法格式.equsymbol,expr.equ x,45 /*定义变量x,并赋值为45*/2.global,.globl,.extern声明一个符号可以被其他文件引用。相当于声明了一个全局变量,语法格式 .globalsymbol其中:symbol为声明的符号的名称,它是区分大小写的。示例:.global_start.externMain汇编程序代码控制伪操作1.text.text伪操作将操作符开始的代码编译到代码段或代码段子段(subsection)。语法格式.text{subsection}示例.text2.data作用:.data伪操作将操作符开始的数据编译到数据段或数据段子(subsection)。语法格式.data{subsection}示例.datasrc: .long1,2,3,4,5/*定义了一个数据区,以src为起始地址*/dst: .long0,0,0,0,0/*定义了一个数据区,以src为起始地址*/3.code16|32作用:.code伪操作用于选择当前汇编指令的指令集。参数16选择Thumb指令集,参数32选择ARM指令集。语法格式.code16.code32.thumb同.code16。.arm同.code32。.code32
ADRr0,Tstart+1BXr0
NOP.code16Tstart:MOVr0,#10MOVr1,#3.arm
ADRr0,Tstart+1BXr0
NOP.thumbTstart:MOVr0,#10MOVr1,#34.end
作用:标记汇编文件的结束行,即标号后的代码不作处理。语法格式.end5.include作用:.include伪操作用于将一个源文件包含到当前源文件中。一般是将该源文件用到的库文件包含到本源文件中。语法格式.include“”#include"44blib.h"4.1.2宏编译控制伪操作.macro伪操作标识宏定义的开始,.endm标识宏定义的结束。用.macro及.endm定义一段代码,称为宏定义体,这样在程序中就可以通过宏指令多次调用该代码段。语法格式.macromacroname{parameter…}… /*代码段*/.endm其中,宏参数的定义可以使用逗号分隔,宏字符参数可以使用斜线“\字符”直接使用。.macro.endm.macroHANDLERLabel /*宏名为HANDLER,有一个参数Label*/sub sp,sp,#4stmfdsp!,{r0}ldrr0,=\Labelldrr0,[r0]strr0,[sp,#4]ldmfdsp!,{r0,pc}.endm /*宏定义体结束*/
HandlerRTC: HANDLERHandleRTCHandlerRTC:
sub sp,sp,#4stmfdsp!,{r0}ldrr0,=HandleRTCldrr0,[r0]strr0,[sp,#4]ldmfdsp!,{r0,pc}
HandlerRTC: HANDLERHandleRTC4.1.3ARM伪指令1.ADR(小范围的地址读取伪指令)该指令将基于PC的地址值或基于寄存器的地址值读取到寄存器中。.armADRr0,Tstart+1BXr0
NOP.thumbTstart:MOVr0,#10MOVr1,#32.LDR大范围的地址读取伪指令当需要读取到寄存器中的数据超过了MOV及MVN指令可以操作的范围时,可以使用LDR伪指令将该数据读取到寄存器中。LDR r0,=0x78100000LDR r1,=0x2A8STR r1,[r0]寄存器赋值时经常使用Ldrr0,=WTCON /*watchdogdisable*/Ldrr1,=0x0 Strr1,[r0]//为WTCON寄存器赋值0NOP空操作伪指令使用格式:
nop
nop
4.2ARM汇编程序的结构ARM汇编源文件*.sARM汇编头文件*.a注释行:@.....或/*……..*/4.2ARM汇编程序的结构.equ x,45 /*定义变量x,并赋值为45*/.equ stack_top,0x1000 /*定义栈顶0x1000*/.global_start.text_start: /*程序代码开始标志*/MOV sp,#stack_topMOVr0,#x /*x的值放入R0*/STR r0,[sp] /*x保存到堆栈地址0x1000中*/stop:B stop/*程序结束,进入死循环*/.end开发流程工程建立
源文件工程配置Buildremoteconnect
C语言程序*.c汇编源程序*.sdownload调试&运行程序执行起始地址程序入口点是:_start,默认地址是0x8000调试配置设置调试信息文件设置下载文件设置下载到RAM区地址改变代码段地址的方法链接选项:-Ttext0x0Debug的download填入地址链接脚本链接脚本是用来控制连接过程,连接脚本是用连接脚本语言来实现,控制如何放在输出文件中,以及放入存储器的什么位置。最简单的连接脚本只包含一个SECTION语句,控制文件在存储器中地址的分配。链接脚本的后缀名为.ld链接脚本举例SECTIONS{ .=0x1000; .text:{*(.text)} .=0x80000; .data:{*(.data)} .rodata:{*(.rodata)} .bss:{*(.bss)}}复位运行停止重新运行单步进入函数单步执行单步跳出函数执行到光标设置断点禁止断点控制程序执行实验一ARM汇编指令实验实验二
ARM处理器工作模式实验
实验一ARM汇编指令实验实验内容:1.完成将src:处的数据拷贝到dst:处。src:
.long1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4dst:.long0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02.完成数据运算:结果存入R10寄存器中。要求:定义变量x=45,y=32,z=7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年职业能力倾向测试题及其答案
- 企业员工工作重塑对工作绩效影响潜在剖面与转变分析
- 半导体封装工艺流程与操作规范手册
- 1.4 开源硬件与创新教学设计高中信息技术人教中图版2019选修6 开源硬件项目设计-人教中图版2019
- 芯片前端设计架构规划与方案手册
- 1 我们的好朋友 教学设计道德与法治四年级下册统编版
- 2025-2026学年多喝热水教案
- 2025-2026学年动物表演教学设计
- 员工异动与内部调动工作手册
- 2023-2025年高中化学 2.1.1 有机化合物的结构教学设计 苏教版选择性必修3
- 2026年安徽白帝集团有限公司社会招聘7人笔试参考试题及答案详解
- 2026年四史知识竞赛(改革开放史篇)考试题库及答案
- 2026成都兴城投资集团有限公司成都蓉城数字科技有限公司招聘产品经理岗位1人备考题库(基础题)附答案详解
- 成都川师附外2026小升初入学分班考试语文考试试题及答案
- 《中国肺血栓栓塞症诊治、预防和管理指南(2025版)》解读课件
- 2026年贵州省算力科技有限责任公司第一批人员招聘20人笔试备考题库及答案详解
- 肺结节诊治中国专家共识(2024年版)解读课件
- 彩钢板拆除及安装施工方案旧房改造方案
- 2026年高考全国一卷政治真题试卷及答案
- 2026年敏感个人信息处理合规要求详解
- 31.1 确定事件和随机事件说课稿2025学年初中数学冀教版2012九年级下册-冀教版2012
评论
0/150
提交评论