基于ARM7系列的汇编语言程序设计

上传人:飞*** 文档编号:2822486 上传时间:2017-07-27 格式:PPT 页数:85 大小:2.47MB
返回 下载 相关 举报
基于ARM7系列的汇编语言程序设计_第1页
第1页 / 共85页
基于ARM7系列的汇编语言程序设计_第2页
第2页 / 共85页
基于ARM7系列的汇编语言程序设计_第3页
第3页 / 共85页
基于ARM7系列的汇编语言程序设计_第4页
第4页 / 共85页
基于ARM7系列的汇编语言程序设计_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《基于ARM7系列的汇编语言程序设计》由会员分享,可在线阅读,更多相关《基于ARM7系列的汇编语言程序设计(85页珍藏版)》请在金锄头文库上搜索。

1、1,1. ARM7汇编语言程序结构格式2. ARM7汇编语言程序中的符号3. ARM7汇编器伪指令4. ARM7汇编语言程序的上机过程5. ARM7汇编语言程序设计6.C语言和ARM7汇编语言的混合/交叉编程,第4章 基于ARM7系列的 汇编语言程序设计,2,4.1 ARM7汇编语言程序结构格式,4.1.1汇编语言的基本概念4.1.2ARM7汇编语言程序框架,3,4.1.1 汇编语言的基本概念,计算机语言 语言是信息的传播载体。计算机语言是计算机可以识别、理解的语言。,不同的应用场合和应用目的,有不同的系统描述需求,派生出了多种计算机语言。按照形式与功能的不同可分为三类,即机器语言、汇编语言和

2、高级语言。,4,机器语言,机器语言(Machine Language)是由0和1二进制代码表示和存储的指令与数据。优点是能被机器直接识别与执行;程序所占内存空间较少。缺点是难认、难记、难编、易错。,5,汇编语言,汇编语言(Assembly Language)是一种面向物理层操作的计算机语言,是一种采用助记符表示指令的程序设计语言。 汇编语言中使用助记符来表示指令的操作码和操作数,用标号或符号代表地址、常量或变量。 特点是不同的处理器类型,具有不同的汇编语言。汇编语言程序能够直接利用硬件系统的特性(如寄存器、标志、中断系统等),可直接对位、字节、字寄存器或存储单元、I/O端口进行处理,同时也能直

3、接使用CPU指令系统提供的各种寻址方式,编制出的程序不但占用内存空间少,而且执行速度快。,6,高级语言,高级语言(High Level Language)是脱离具体机器(即独立于机器)的通用语言,不依赖于特定计算机的结构与指令系统。 特点是由于高级语言程序不用考虑机器的结构特点,因而它不能充分利用CPU所具有的某些特性,并且编译器生成的目标程序往往比较冗长,占有较多的内存空间,执行时间也比较长。,7,4.1.2 ARM7汇编语言程序框架,;文件名:TEST1.S ;功能:实现字符串拷贝功能 ;说明:使用ARMulate软件仿真调试 AREAExample1,CODE,READONLY ;声明代

4、码段Example1 num EQU 20 ;设置拷贝字的个数 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令STARTLDRR0, =src ; R0指向源数据块LDRR1, =dst ; R1指向目的数据块MOVR2, #num ; R2需要拷贝的数据个数 wordcopyLDRR3, R0, #4 ; 从源数据块中取一个字,放入R3中,; R0=R0+4STRR3, R1, #4; 将R3中的数据存入R1指向的存储; 单元中,R1=R1+4SUBSR2, R2, #1; R2计数器减1BNEwordcopy; 如果R2不为0,则转向wordcopy处,使用“;”进行注释

5、,标号顶格写,程序代码段,8,4.1.2 ARM7汇编语言程序框架,stopMOVR0, #0x18; 程序运行结束返回编译器调试环境LDRR1, =0x20026SWI0x123456AREA BlockData, DATA, READWRITE; 数据段的名字BlockDataSrcDCD1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4DstDCD0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0AREA |.extra|, NOINIT, READWRITE; 未初始数据段的名字.extradataSPACE1024END; 文件

6、结束,声明文件结束,9,4.1.2 ARM7汇编语言程序框架,段:,ARM汇编程序由段组成(程序段、数据段);段是由汇编器伪指令AREA定义的相对独立程序块;段的属性:READONLY(只读)或READWRITE(读写)分别用于定义一个代码段或数据段;,10,4.1.2 ARM7汇编语言程序框架,标识符(标号):,(用途)用来表示指令的地址、数据的地址、变量、过程名和常量;(组成)标号是一个自行设计的字母数字串,通常以字母开头,由字母、数字、下划线等组成;(注意1)标号不能与寄存器名、指令助记符、伪指令(操作)助记符等 “关键字” 同名;(注意2)标号必须在一行的开头书写,不能留空格;,11,

7、4.1.2 ARM7汇编语言程序框架,ARM汇编语言程序中,有一些特殊的指令助记符,称为汇编器伪指令。它们无论表示形式或其在程序中所处的位置,都与指令相似,但二者之间有着重要的区别。指令是供CPU执行的操作命令,每条指令对应CPU的一种特定操作,在用户代码运行期间执行;而汇编器伪指令是供汇编器处理的命令,在汇编过程中由汇编器进行处理,例如定义数据、分配存储区、定义段、定义宏等;汇编以后,汇编器伪指令不产生与之对应的目标代码。,12,4.2 ARM7汇编语言程序中的符号,4.2.1符号命名规则4.2.2常量4.2.3变量,13,4.2.1 符号命名规则,在汇编语言程序设计中,经常使用各种符号表示

8、变量、常量和地址等,以增加程序的可读性。 在编制符号名时,必须遵循以下的约定: 符号由大小写字母、数字以及下划线组成; 符号区分大小写,同名的大、小写符号会被汇编器认为是 两个不同的符号; 符号在其作用范围内必须惟一,即在其作用范围内不可有 同名的符号;且符号名不得与系统中保留字相同; 符号名不应与指令或伪指令同名。,14,4.2.2 常量,常量就是程序中出现的那些固定值,也就是说其值在程序的运行过程中不能被改变,除了自身的值以外,没有其他属性的数值。ARM7汇编程序所支持的常量可以分为数值常量、逻辑常量、字符串常量和和字符常量。,15,4.2.3 变量,变量就是在程序运行过程中可以改变的量。

9、通过定义变量可以简化程序的表达,增加程序的可读性,方便对程序进行修改,便于交流与记忆。 ARM7汇编语言程序所支持的变量有数值变量、逻辑变量和字符串变量。,16,4.3 ARM7汇编器伪指令,4.3.1符号定义伪指令4.3.2数据定义伪指令4.3.3ARM7汇编控制伪指令4.3.4杂项汇编器伪指令,17,4.3.1 符号定义伪指令,1. 全局变量定义伪指令GBLA、GBLL、GBLS2. 局部变量定义伪指令LCLA、LCLL、LCLS3. 变量赋值伪指令SETA、SETL、SETS4. 寄存器列表定义伪指令RLIST,18,1. 全局变量声明GBLA、GBLL和GBLS,格 式:GBLA(GB

10、LL或GBLS)全局变量名功 能:GBLA、GBLL和GBLS伪操作用于定义一个ARM程序中的全局变量,并将其初始化。其中: GBLA: 定义一个全局的数值变量,并初始化为0 GBLL: 定义一个全局的逻辑变量,并初始化为F GBLS:定义一个全局的字符串变量,并初始化为空 由于以上三条伪操作用于定义全局变量,因此在整个程序范围内变量名必须唯一。,19,例 4.7 使用示例,GBLA A1 ; 定义一个全局的数值变量,变量名为A1 A1 SETA 0x0F ;将该变量赋值为0x0F GBLL A2 ;定义一个全局的逻辑变量,变量名为A2 A2 SETL TRUE ;将该变量赋值为真 GBLS

11、A3 ;定义一个全局的字符串变量,变量名为A3 A3 SETS “Testing” ;将该变量赋值为“Testing”,20,2. LCLA、LCLL和LCLS,格 式:LCLA(LCLL或LCLS)局部变量名功 能:LCLA、LCLL和LCLS伪操作用于定义一个ARM程序中的局部变量,并将其初始化。其中: LCLA:定义一个局部的数值变量,并初始化为0 LCLL:定义一个局部的逻辑变量,并初始化为F LCLS:定义一个局部的字符串变量,并初始化为空以上三条伪操作用于声明局部变量,在其作用范围内变量名必须唯一。,21,例 4.8 使用示例:,LCLA Test4 ;声明一个局部的数值变量,变量

12、名为Test4 Test4 SETA 0xaa ;将该变量赋值为0xaa LCLL Test5 ;声明一个局部的逻辑变量,变量名为Test5 Test5 SETL TRUE ;将该变量赋值为真 LCLS Test6 ;定义一个局部的字符串变量,变量名为Test6 Test6 SETS “Testing” ;将该变量赋值为“Testing”,22,3. SETA、SETL和SETS,格 式:变量名SETA(SETL或SETS)表达式 功 能:伪操作SETA、SETL、SETS用于给一个已经定义的全局变量或局部变量赋值。SETA:给一个数值变量赋值;SETL:给一个逻辑变量赋值;SETS:给一个字

13、符串变量赋值; 其中,变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。,23,例 4.9 使用示例:,LCLA Test3 ;声明一个局部的数值变量,变量名为Test3 Test3 SETA 0xaa ;将该变量赋值为0xaa LCLL Test4 ;声明一个局部的逻辑变量,变量名为Test4 Test4 SETL TRUE ;将该变量赋值为真,24,4 寄存器列表定义伪指令RLIST,格式:名称RLIST通用寄存器列表功能:用于对一个通用寄存器列表定义名称, reglist RLIST R0-R3, R8, R12STMFDSP!, reglist; 将列表reglist存

14、储到堆栈中LDMIAR4, reglist; 将列表reglist加载到R4中,25,4.3.2 数据定义伪指令,1. 定义字节存储单元伪指令DCB2. 定义半字存储单元伪指令DCW(DCWU)3. 定义字存储单元伪指令DCD(DCDU)4. 为单精度浮点数定义字存储单元伪指令DCFS(DCFSU)5. 为双精度浮点数定义字存储单元伪指令DCFD(DCFDU)6. 内存单元分配伪指令SPACE7. 定义结构化内存表首地址伪指令MAP8. 定义结构化内存表中数据域伪指令FIELD9. 定义文字池伪指令LTORG,26,1. DCB,格 式:标号DCB 表达式功 能:DCB伪操作用于分配一片连续的

15、字节存储单元并用伪操作中指定的表达式初始化。其中,表达式可以为0255的数值或字符串。DCB也可用“=”代替,27,2. DCW(DCWU),格 式:标号DCW(或DCWU)表达式 功 能:DCW(或DCWU)伪操作用于分配一片连续的半字存储单元并用伪操作中指定的表达式初始化。其中,表达式可以为程序标号或数值表达式。用DCW分配的字存储单元是半字对齐的,而用DCWU分配的字存储单元并不严格按照半字对齐。,28,3. DCD(或DCDU),格 式:标号DCD(或DCDU)表达式功 能:DCD(或DCDU)伪操作用于分配一片连续的字存储单元并用伪操作中指定的表达式初始化。其,表达式可以为程序标号或数值表达式。DCD也可用“&”代替。用DCD分配的字存储单元是字对齐的,而用DCDU分配的字存储单元并不严格按照字对齐。,

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

当前位置:首页 > 研究报告 > 综合/其它

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