嵌入式系统arm汇编语言程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统arm汇编语言程序设计课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 arm 汇编语言 程序设计 课件
- 资源描述:
-
1、第四章第四章 ARM汇编语言程序设计汇编语言程序设计4.1 汇编语言程序格式汇编语言程序格式4.2 ARM汇编器的伪操作汇编器的伪操作4.3 汇编语言上机过程汇编语言上机过程4.4 汇编语言程序设计汇编语言程序设计4.1 汇编语言程序格式汇编语言程序格式4.1.1 汇编语言程序的组成汇编语言程序的组成AREA Init, CODE, READONLYENTRYStartLDR R0,=0 x3FF5000LDR R1,0 xFFSTR R1,R0LDR R0,=0 x3FF5008LDR R1,0 x01STR R1,R0.ENDAREA Init, CODE, READONLYENTRYSt
2、artLDR R0,=0 x3FF5000LDR R1,0 xFFBLPRINT_TEXT.PRINT_TEXT.MOV PC,LREND;FULL SEGMENT DEFINITION-Intel 8086;-stack segment-STACKSEGMENT DB64 DUP(?)STACK ENDS;-data segment-DATASEGMENT;data definitions are placed hereDATAENDS;-code segment-CODESEGMENTMAIN PROC FAR ASSUME CS: CODE, DS: DATA, SS: STACK MO
3、V AX,DATA MOV DS,AX - - MOV AH,4CH INT 21HMAIN ENDPCODEENDS END MAIN4.1.2 汇编语言的语句格式汇编语言的语句格式ARM汇编语言程序的每行语句由14部分组成。LABELOPERATION OPERAND;COMMENT标号域操作助记符域 操作数域注释域4.2 ARM汇编器的伪操作汇编器的伪操作符号定义伪操作(Symbol Definition)数据定义伪操作(Data Definition )汇编控制伪操作(Assembly Control)框架描述伪操作(Frame Description)其他伪操作(Miscellane
4、ous)数据定义伪操作数据定义伪操作数据定义伪操作用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。DCB分配一片连续的字节存储单元并初始化。DCW分配一片连续的半字存储单元并初始化。DCD分配一片连续的字存储单元并初始化。SPACE分配一片连续的存储单元并初始化为0。MAP定义一个结构化的内存表首地址。FIELD定义一个结构化的内存表的数据域。 DCB格式:标号 DCB表达式功能:DCB伪操作用于分配一片连续的字节存储单元,并用伪操作中指定的表达式初始化。其中,表达式可以为0255的数值或字符串。DCB也可以用“=”代替。示例:StrDCB“This is a test!” D
5、CW格式:标号 DCW表达式功能:DCW伪操作用于分配一片连续的半字存储单元,并用伪操作中指定的表达式初始化。其中,表达式可以为程序标号或数值表达式。用DCW分配的存储单元是半字对齐的。示例:DataTestDCW 1,2,3 DCD格式:标号 DCD表达式功能:DCD伪操作用于分配一片连续的字存储单元,并用伪操作中指定的表达式初始化。其中,表达式可以为程序标号或数值表达式。用DCD分配的存储单元是字对齐的。DCD也可 以用 “&”代替。示例:Test DCD4,5,6 SPACE格式:标号 SPACE表达式功能:SPACE伪操作用于分配一片连续的存储区域并初始化为0。其中,表达式为要分配的字
6、节数。SPACE也可以用 “%”代替。示例:DataSpace SPACE100 MAP格式:MAP 表达式 ,基址寄存器功能:MAP伪操作用于定义一个结构化的内存表首地址。表达式可以为程序标号或数值表达式,基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址。否则,内存表的首地址为表达式的值与基址寄存器的和。也可以用 “”代替。示例:MAP 0 x100,R0;首地址的值为0 x100+R0 FIELD格式:标号 FIELD 表达式 功能: FIELD伪操作用于定义一个结构化的内存表中的数据域。表达式的值为当前数据域在内存表中所占的字节数。 FIELD伪操作常与MAP配
7、合使用来定义结构化的内存表。注意:MAP和FIELD仅用于定义数据结构,并不实际分配存储单元。 FIELD也可以用 “#”代替。由MAP和FIELD配合定义的内存表有3种:(1)表达式是一个基于绝对地址的内存表:MAP 0 x100;首地址为0 x100AFIELD 4;A的长度为4字节,位置为0 x100BFIELD 4;B的长度为4字节,位置为0 x104SFIELD 16 ;S的长度为16字节,位置为0 x108.LDRR0,=A;读取A的地址0 x100LDRR1,R0 ;将A的内容读到R1(2)表达式是一个数值,是一个相对地址的内存表:MAP0 x04,R9;首地址为R9的值AFIE
8、LD 4;A的长度为4字节,相对位置为0BFIELD 8;B的长度为8字节,相对位置为4SFIELD 96;S的长度为96字节,相对位置为12.LDRR9,=0 x900;表的首地址为0 x904ADRR0,A;读取A的地址0 x904LDRR2,R0;将A的内容读到R2.LDRR9,=0 x2000;同一表的首地址为0 x2004ADRR1,B;读取B的地址0 x2008STRR9,R1;将R9的内容写到B(3)表达式是一个标号,基于PC的内存表:Data SPACE 100 ;分配100字节的内存单元初始化0MAPData;首地址为Data内存单元AFIELD 4;A的长度为4字节,相对位
9、置为0BFIELD 4;B的长度为4字节,相对位置为4SFIELD 4;S的长度为4字节,相对位置为8.LDRR5,B;相当于LDR R5,PC,#4其它常用的伪操作其它常用的伪操作 AREA格式:AREA 段名属性1,属性2,功能:AREA伪操作定义一个代码段、数据段或特定属性的段。CODE: 定义代码段。DATA: 定义数据段。READONLY: 只读,代码段默认。READWRITE: 可读可写,数据段默认。一个汇编程序至少包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。AREA Init,CODE,READONLYENTRYBSTARTAREA Stack,DATA,REA
10、DWRITESAVESPACE20AREA Init,CODE,READONLYSTARTADDR1,R2,R3BSTART ALIGN格式:ALIGN表达式,偏移量功能:ALIGN可通过添加填充字节的方式,使当前位置满足一定的对齐方式。其中,表达式的值用于指定对齐方式,可能取的值为2的幂,如1、2、4、8、16等。如果没有指定表达式,则将当前位置对齐到下一个字的位置。ADDR0,R4,R5BSTARTDATA1DCB“strin”ALIGN 4STARTLDRR0,R54.3 汇编语言上机过程汇编语言上机过程1. 编辑汇编语言源程序2. 编译源程序3. 链接汇编程序4. 调试汇编程序4.4
11、汇编语言程序设计汇编语言程序设计4.3.1 程序设计步骤程序设计步骤4.3.2 简单程序设计(顺序、分支、循环)简单程序设计(顺序、分支、循环)4.3.3 子程序设计子程序设计4.3.4 模式切换程序设计模式切换程序设计4.3.5 汇编语言和汇编语言和C语言编程语言编程模块化的程序设计模块化的程序设计(从功能分析(从功能分析战略上)战略上)汇编语言程序设计的基本方法(战术上看)汇编语言程序设计的基本方法(战术上看)l 程序设计步骤(对每一模块)程序设计步骤(对每一模块)1. 1. 问题定义问题定义2. 2. 算法设计算法设计3. 3. 选择指令选择指令4. 4. 编写程序编写程序l 结构化程序
12、设计(算法设计)结构化程序设计(算法设计)1.1. 顺序结构顺序结构2 2. . 分支结构分支结构 3.3. 循环结构循环结构4. 4. 子程序设计子程序设计l 上机过程上机过程(具体实现)(具体实现)1.1. 编辑程序编辑程序2.2. 汇编源程序汇编源程序3.3. 链接程序链接程序4.4. 调试源程序调试源程序结构化程序设计概述:结构化程序设计概述:写任何程序最成功的方式是先人工的解决问题写任何程序最成功的方式是先人工的解决问题找出算找出算法!法!用结构用结构IFTHENELSE,CASE,REPEATUNTIL,WHILEDO,FORDO写算法,然后再将该算法翻译成一种合适的程序设计语写算
13、法,然后再将该算法翻译成一种合适的程序设计语言言结构化的程序设计!结构化的程序设计!程序设计步骤程序设计步骤 1.1.问题的定义问题的定义仔细思考程序所要解决的问题,即用自然语言描述仔细思考程序所要解决的问题,即用自然语言描述“做什么做什么?以及程序做这些工作时的时序?以及程序做这些工作时的时序”如:如:1.1.从传感器读取温度值。从传感器读取温度值。 2.2.加上调整因子。加上调整因子。 3.3.将结果存储在存储单元里。将结果存储在存储单元里。 2.2.算法及表示方法算法及表示方法用来表示程序设计问题的操作序列或步骤用来表示程序设计问题的操作序列或步骤算法,算法, 即即“怎样做怎样做?”。
14、表示方法:表示方法:1 1)流程图流程图 2 2)伪指令伪指令3. 3. 选择适当的指令(按功能选择适当的指令(按功能)一、数据传送类指令一、数据传送类指令二、算术运算指令二、算术运算指令三、逻辑操作指令三、逻辑操作指令四、程序控制指令四、程序控制指令4. 4. 编写程序(从算法到程序)编写程序(从算法到程序)(1 1)建立算法使用的数据结构建立算法使用的数据结构 1 1)数据将存放在存储器还是存放在寄存数据将存放在存储器还是存放在寄存器中?器中? 2 2)数据类型是字节、数据类型是字节、半半字或字?字或字? 3 3)有多少数据项?有多少数据项? 4 4)数据为无符号数还是符号数?数据为无符号
15、数还是符号数?(2 2)在代码段开始处写出变量、段寄存器、外围设在代码段开始处写出变量、段寄存器、外围设备等所需要的初始化指令备等所需要的初始化指令(3 3)选择实现算法中每一主要动作所需要的指令,)选择实现算法中每一主要动作所需要的指令,并决定数据在这些指令中的存放形式。并决定数据在这些指令中的存放形式。(4 4)按照主要指令的要求,用)按照主要指令的要求,用LDR、STR指令或指令或MOV指令把数据送到正确的位置。指令把数据送到正确的位置。顺序程序设计:已知32位变量X、Y存放在存储器的地址0 x90010、0 x90014中,要求实现Z=X+Y,并且Z的值存放在0 x90018中。ARE
16、A Exam,CODE,READONLYENTRYSTARTLDRR0,=0 x90010LDRR1,R0, #4LDRR2,R0,#4ADDR1,R1,R2STRR1,R0END分支程序设计:已知32位有符号数X存放在存储器的地址0 x90010中,要求实现: Y=X (X=0)或 Y=-X (X0)AREA Exam CODE READONLYENTRYSTARTLDRR1,=0 x90010LDRR2,R1MOVR0,#0CMPR2,R0SUBLT R2,R0,R2STRR2,R1END已知32位有符号数X存放在存储器的地址0 x90010中,要求实现:Y=1(X0)或 Y=0 (X=0
展开阅读全文