arm汇编语言程序设计基础讲义

上传人:bin****86 文档编号:54833064 上传时间:2018-09-20 格式:PPT 页数:75 大小:1.70MB
返回 下载 相关 举报
arm汇编语言程序设计基础讲义_第1页
第1页 / 共75页
arm汇编语言程序设计基础讲义_第2页
第2页 / 共75页
arm汇编语言程序设计基础讲义_第3页
第3页 / 共75页
arm汇编语言程序设计基础讲义_第4页
第4页 / 共75页
arm汇编语言程序设计基础讲义_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《arm汇编语言程序设计基础讲义》由会员分享,可在线阅读,更多相关《arm汇编语言程序设计基础讲义(75页珍藏版)》请在金锄头文库上搜索。

1、第9章 ARM汇编语言 程序设计基础,ARM汇编程序设计,但是,CPU执行指令的细节差异会反应在系统的非功能特性上,例如系统程序的规模和运行速度。,由于高级编程语言隐藏了CPU执行指令的许多细节,因此在只关心系统所具有功能的系统中,采用高级语言编写程序更为合适。,因此,掌握汇编语言程序设计对于嵌入式系统的设计者来说是非常必要的。,ARM汇编伪指令,伪指令:特殊的指令助记符,不会生成机器码,仅仅是在编译器软件中起着格式化的作用。,数据常量定义伪指令;数据变量定义伪指令;内存分配伪指令;其他伪指令。,为完成汇编程序作各种准备工作的,仅在汇编过程中起作用, 一旦汇编结束,伪指令的使命就完成。,在 A

2、RM 的汇编程序中,有如下几种伪指令:,数据常量定义伪指令,EQU语法格式 : 名称 EQU 表达式 ,类型 ;其中 EQU 可用 “ * ” 代替,EQU:用于为程序中的常量、标号等定义一个等效的 字符名称,类似于 C 语言中的#define 。,当表达式为 32 位的常量时,可以指定表达式的数据类型,可以有以下三种类型: CODE16 、 CODE32 和 DATA 。,数据变量定义伪指令,(1)GBLA、GBLL 和GBLS 用于定义全局变量,并将其初始化。语法格式:GBLA ( GBLL 或 GBLS ) 全局变量名, GBLA用于定义一个全局的数字变量,并初始化为 0 GBLL用于定

3、义一个全局的逻辑变量,并初始化F(假); GBLS用于定义一个全局的字符串变量,并初始化为空;,用于ARM汇编程序中的变量定义、变量赋值以及定义寄存器的别名等操作。,LCLA 、 LCLL 和 LCLS 伪指令用于定义一个 ARM 程序中的局部变量,并将其初始化。语法格式: LCLA ( LCLL 或 LCLS ) 局部变量名, LCLA用于定义一个局部的数字变量,并初始化为 0 ; LCLL用于定义一个局部的逻辑变量,并初始化为 F(假); LCLS 用于定义一个局部的字符串变量,并初始化为空;,(2)LCLA、LCLL 和LCLS,用于给一个已经定义的全局变量或局部变量赋值。语法格式:变量

4、名 SETA ( SETL 或 SETS ) 表达式,(3)SETA、SETL 和SETS, SETA 伪指令用于给一个数学变量赋值; SETL 伪指令用于给一个逻辑变量赋值; SETS 伪指令用于给一个字符串变量赋值;,用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在 ARM 指令 LDM/STM 中使用。语法格式:名称 RLIST 寄存器列表 ,在 LDM/STM 指令中,列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。,(4)RLIST,内存分配伪指令,为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。,语法格式: 标号 DCB 表

5、达式 str DCB “This is a test!”,(1)DCB,用于分配一段连续的字节单元并初始化,语法格式: 标号 DCW (或 DCWU ) 表达式 Str DCW 1,2,3,(2) DCW(或DCWU),用于分配一段连续半字节单元 并初始化,DCW: 半字对齐 DCWU:不严格半字对齐,(4)DCFD(或DCFDU)- 双精度(2字) 语法格式: 标号 DCFD (或 DCFDU ) 表达式(5)DCFS(或DCFSU)- 单精度 (1字) 语法格式: 标号 DCFS (或 DCFSU ) 表达式,(3)DCD(或DCDU) -字 语法格式: 标号 DCD (或 DCDU )

6、表达式,(6)DCQ(或DCQU) 语法格式: 标号 DCQ (或 DCQU ) 表达式 分配一片以8字节为单位的连续存储区域,并初始化Src DCQ 100,(9)FILED (定义结构化内存表中的数据域)语法格式:标号 FIELD 表达式MAP 0X100A FIELD 16 ;定义A的长度为16字节,位置为0X100,MAP 和FILED 只定义数据结构,不实际分配存储单元。,(7) SPACE 分配一片连续字节单元并初始化为0 语法格式: 标号 SPACE 表达式 Src SPACE 100,(8)MAP ( 定义结构化内存表的首地址。) 语法格式: MAP 表达式 ,基址寄存器 MA

7、P 0X100, R0 ;内存表首地址R0+0X100,汇编控制伪指令,语法格式: IF 逻辑表达式 指令序列 1 ELSE 指令序列 2 ENDIF,用于控制汇编程序的执行流程。,常用的汇编控制伪指令包括以下几条:,(1) IF、ELSE、ENDIF,(2) WHILE、WEND (循环),语法格式: WHILE 逻辑表达式 指令序列 WEND,语法格式: MACRO $ 标号 宏名 $ 参数 1 , $ 参数 2 , 指令序列 MEND,(4) MEXIT MEXIT 用于从宏定义中跳转出去。语法格式: MEXIT,(3) MACRO、MEND 宏,将一段代码定义为一个整体,在程序中通过宏

8、指令调用该段代码。,相对于子程序,宏适用于代码短、参数多情况。,其他常用的伪指令,AREA、ALIGN、ENTRY、END CODE16、CODE32 EXPORT(或 GLOBAL) IMPORT、EXTERN GET(或 INCLUDE ) RN、ROUT等。,属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔,(1)AREA,定义一个代码段或数据段。,语法格式: AREA 段名 属性 1 ,属性 2 ,,段名若以数字开头,则该段名需用 “ | ” 括起来,如 |1_test| 。,(2) ALIGN (通过填充字节满足一定对齐方式)语法格式: ALIGN 表达式 , 偏移量

9、(3) CODE16、CODE32 语法格式: CODE16 (或 CODE32 ) (4) ENTRY(指定汇编程序入口点) (5) END 源程序结尾,(7) IMPORT 要使用的标号是在其它源文件中定义的 ,要在当前文件中引用。不论引用与否标号都会加入当前文件的符号表中。语法格式: IMPORT 标号 WEAK,(6) EXPORT(或GLOBAL) 在本程序中声明一个全局的标号,可在其它文件中使用。 语法格式: EXPORT 标号 WEAK,(8) EXTERN 语法格式: EXTERN 标号 WEAK 要使用的标号是在其它源文件中定义的 ,要在当前文件中引用。只有引用标号才会加入当

10、前文件的符号表中。,ARM的汇编语言结构,以程序段为单位组织程序代码; 段可以分为代码段和数据段; 一个汇编程序至少应该有一个代码段,也可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行的映象文件。,可执行映象文件通常由以下几部分构成: 一个或多个代码段,属性为只读。 零个或多个包含初始化数据的数据段,属性为可读写。 零个或多个不包含初始化数据的数据段,属性为可读写。,ARM汇编语言的语句格式,1. 基本语句格式ARM(Thumb)汇编语言的语句格式为:标号 指令或伪指令 ;注释, 如果一条语句太长,可将其分为若干行来书写,在行的末用续行符“”来标识下一行与本行为同一条语句

11、。, 每一条指令的助记符可以全部用大写、或全部用小写,但不能在一条指令中大、小写混用。,规则:, 符号名不应与指令或伪指令同名; 符号在其作用范围内必须唯一; 符号区分大小写,同名的大、小写符号被视为两个不同的符号; 自定义的符号名不能与系统保留字相同。,2. 汇编语言程序中常用的符号,ARM(Thumb)汇编程序所支持的常量有 逻辑常量、数字常量和字符串常量。,3. 程序中的常量, 数字常量一般为32位的整数,无符号常量取值范围为0232-1,有符号常量取值范围为-231231-1; 逻辑常量只有两种取值:真或假; 字符串常量为一个固定的字符串,一般用来提示程序运行时的信息。, 逻辑变量用于

12、在程序的运行中保存逻辑值(真/假); 数字变量用于在程序的运行中保存数字值,但数字值的大小不应超出数字变量所能表示的范围; 字符串变量用于在程序的运行中保存一个字符串,但字符串的长度不应超出字符串变量所能表示的范围;,4. 汇编语言程序中的变量,汇编程序例题,AREA SUMM , CODE , READONLYX EQU 8Y EQU 16ENTRYMOV R0 , #XMOV R1 , #YADD R2 , R0 , R1AND R0 , R2 , #0X0FADDS R2 , R0 , R1 , LSR #1STOP B STOPEND,1、在每条语句后做简要注释,写出程序执行后R0、R

13、1 、R2和C的值。 (知识点:算术、逻辑操作、影响标志位S),AREA STK , CODE , READONLYENTRYMOV R1 , #0X30MOV R2 , #0X08MOV SP , #0X400STMFD SP!,R1,R2;/ 写出语句执行后SP和R2的值LDMFD SP!,R5,R6;/ 写出语句执行后SP、R5和 R6的值 LOOP B LOOPEND,2、分析程序,按照加“/”语句的要求解答。 (知识点:堆栈操作),AREA armcopy CODE, READONLY num EQU 16 ENTRY ADR r1, src ADR r3, dst MOV r2,

14、#num copy LDR R0 , r1 , #4STR R0 , r3 , #4SUBS r2 , r2 , #1 BNE copy stop B stop src DCD 1,2,3,4,1,2,3,4,5,6,1,2,3,4,1,2 dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END,3、写出程序实现的功能,并在每条语句后做简要注释。(知识点:变址寻址, 循环体、字数据拷贝),AREA thcopy, CODE, READONLY ENTRY CODE32LDR r1, =src LDR r3, =dst MOV r2, #4 LDR r4, =copy+1 ;BX r4 ;CODE16 ; copyLDRB r0,r1 ADD r1,#1STRB r0,r3 ADD r3,#1SUB r2, r2, #1 BNE copy stop B stop src DCB 1,2,3,4 dst DCB 0,0,0,0END,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号