《汇编语言程序设计 -基于ARM体系结构》课件第4章ARM汇编语言程序设计1.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《汇编语言程序设计 -基于ARM体系结构》课件第4章ARM汇编语言程序设计1.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计 基于ARM体系结构 汇编语言程序设计 基于ARM体系结构课件第4章ARM汇编语言程序设计1 汇编语言 程序设计 基于 ARM 体系结构 课件
- 资源描述:
-
1、教学目的掌握汇编语言程序的基本结构掌握汇编语言程序的上机过程 掌握ARM汇编器的伪操作掌握ARM汇编程序和C语言程序的交互教学内容 4.1汇编语言程序格式 4.2 ARM汇编器的伪操作 4.3汇编语言程序的上机过程 4.4汇编语言程序设计 4.5工作模式切换编程 4.6 ATPCS介绍 4.7 ARM和Thumb混合编程 4.8汇编语言和C语言交互编程4.1汇编语言程序格式 4.1.1汇编语言的基本概念 4.1.2汇编语言源程序的组成 4.1.3汇编语言程序中常用的符号 4.1.4汇编语言程序中的表达式和运算符4.1.1汇编语言的基本概念1机器语言与汇编语言 计算机程序由指令序列组成。计算机通
2、过对每条指令的译 码和执行来完成相应的操作。指令必须以二进制代码的形 式存放在内存中,才能够被计算机所识别和理解,并加以 执行。由二进制代码表示的指令称为机器指令,相应的 程序称为机器语言程序。机器语言程序由0、1二进制代码组成,不便于编程和记 忆。由此产生了用指令助记符表示的汇编语言指令,对应 的程序称为汇编语言程序。例 4.1 以下指令序列完成两个128位二进制数的加法,第一个数由高到低存放在寄存器R7R4,第二个数由高到低存放在寄存器R11R8,运算结果由高到低存放在寄存器R3R0:ADDS R0,R4,R8 ;加低端的字 ADCS R1,R5,R9 ;加第二个字,带进位 ADCS R2
3、,R6,R10 ;加第三个字,带进位 ADC R3,R7,R11 ;加第四个字,带进位 对例4.1程序进行汇编以后,得到ARM汇编指令对 应的机器代码(用十六进制数表示),如表4-1所示。在表中,第一列表示机器代码存放的内存地址,该地址与机器所处环境有关;第二列表示ARM机器代码,每条指令的机器代码由32位组成;第三列表示汇编指令,由指令助记符和操作数组成。指令前可能有标号,表示该指令第一个字节所在的地址。2汇编语言与高级语言 汇编语言是一种依赖于计算机微处理器的语言,每种机器 都有它专用的汇编语言(如ARM与8051单片机的汇编语言 是不相同的),故汇编语言一般不具有通用性和可移植性。由于进
4、行汇编语言程序设计必须熟悉机器的硬件资源和软 件资源,因此具有较大的难度和复杂性。高级语言,如BASIC,FORTRAN,C语言等是面向过程的语 言,不依赖于机器,因而具有很好的通用性和可移植性,并且具有很高的程序设计效率,便于开发复杂庞大的软件 系统。4.1.2汇编语言源程序的组成1汇编语言源程序的结构 例 4.2 以下是一个汇编语言源程序的基本结构:AREA Init,CODE,READONLY ENTRY Start LDR R0,=0 x3FF5000 LDR R1,0 xFF STR R1,R0 LDR R0,=0 x3FF5008 LDR R1,0 x01 STRR1,R0 END
5、 在ARM(Thumb)汇编语言程序中,以程序段为单位组织代码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段、数据段和通用段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。在汇编语言程序中,用AREA伪操作定义一个段,并说明 所定义段的相关属性。如:代码段的默认属性为 READONLY,数据段的默认属性为READWRITE。一个汇编程序至少应该有一个代码段 本例定义一个名为Init的代码段,属性为 READONLY。ENTRY伪操作标识程序的入口点,一个 ARM程序中可以有多个ENTRY,至少要有一个ENTRY。接 下来为指令序列,程序的末尾为END伪操作,该伪
6、操作告 诉编译器源文件的结束,每一个汇编程序段都必须有一条 END伪操作,指示代码段的结束。当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译连接时最终形成一个可执行的映象文件。可执行映象文件通常由以下几部分构成:一个或多个代码段,代码段的属性为只读。零个或多个包含初始化数据的数据段,数据段的属性为可读写。零个或多个不包含初始化数据的数据段,数据段的属性为可读写。连接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。因此源程序中段之间的相对位置与可执行的映象文件中段的相对位置一般不会相同。一个典型的映象文件的结构如图4-1所示。图4-1 映象文件的结构2汇编语言的语句
7、格式 ARM汇编语言程序的每行语句由14个部分组成。格式如下:LABEL OPERATION OPERAND ;COMMENT 标号域 操作助记符域 操作数域 注释域 (1)标号域(Label)标号域用来表示指令的地址、变量、过程名、数据的地址和常量。标号是一个自行设计的标识符或名称,语句标号可以是大小写字母混合,通常以字母开头,由字母、数字、下划线等组成。语句标号不能与寄存器名、指令助记符、伪指令(操作)助记符、变量名同名。语句标号必须在一行的开头书写,不能留空格。(2)操作助记符域(OPERATION)操作助记符域可以为指令、伪操作、宏指令或伪指令的助记符。ARM汇编器对大小写敏感,在汇编
8、语言程序设计中,每一条指令的助记符可以全部用大写、或全部用小写,但不允许在一条指令中大、小写混用。所有的指令都不能在行的开头书写,必须在指令的前面有空格,然后再书写指令。指令助记符和后面的操作数或操作寄存器之间必须有空格,不可以在这之间使用逗号。伪操作是ARM汇编语言程序里的一些特殊助记符,其作用 主要是为完成汇编程序做的各种准备工作,在源程序进行 汇编时由汇编程序处理,而不是程序运行期间由机器执行。宏指令是一段独立的程序代码,可插在源程序中,它通过 伪操作来定义。宏在使用之前必须提前定义好,宏之间可 互相调用,也可递归调用。通过直接书写宏名来使用宏,并根据宏指令的格式设置相 应的输入参数。宏
9、定义本身不会产生代码,只是在调用它 时把宏体插入到源程序中。调用宏时通过实际的指令来代 替宏体实现相关的一段代码。伪指令是ARM汇编语言程序里的特殊指令助记符,也不在程序运行期间由机器执行。它们在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作。(3)操作数域(OPERAND)操作数域表示操作的对象,操作数可以是常量、变量、标号、寄存器名或表达式,不同对象之间必须用逗号“,”分开。(4)注释域(COMMENT)注释域用来说明语句的功能,以“;”开始。汇编程序对“;”以后的部分不予汇编。例 4.3 指令和伪操作书写格式的举例 AREA EX4_3,CODE,READO
10、NLY;前面必须有空格 GBLA DATA ;前面必须有空格 DATA SETA 0 x20 ;DATA变量名前面不能留空格 ADD R0,R1,R2 ;全部大写,正确 ADD R0,R1,r2 ;寄存器小写,正确 add R0,R1,r2 ;指令助记符小写,寄存器大写或小写,正确 Add R0,R1,r2 ;寄存器小写,正确;指令助记符大小写混合,不正确4.1.3汇编语言程序中常用的符号 在汇编语言程序设计中,经常使用各种符号表示变量、常量和地址等,以增加程序的可读性。尽管符号的命名由编程者决定,但并不是任意的,必须遵循以下的约定:符号由大小写字母、数字以及下划线组成。符号区分大小写,同名的
11、大、小写符号会被编译器认为是两个不同的符号。符号在其作用范围内必须唯一,即在其作用范围内不可有同名的符号。自定义的符号名不能与系统的保留字相同。符号名不应与指令或伪指令同名。1程序中的变量 程序中的变量是指其值在程序的运行过程中可以改变的量。通过定义变量可以简化程序的表达,增强程序的可读性,方便对程序进行修改,便于交流和记忆。同时编译程序会自动安排变量的存储空间,程序设计工程师可以不必去关心存储空间的安排,因此一个好的程序设计工程师应该要恰当地使用变量。ARM(Thumb)汇编程序所支持的变量有数值变量、逻辑变量和字符串变量。在ARM(Thumb)汇编语言程序设计中,可使用GBLA、GBLL、
12、GBLS伪操作声明全局变量,使用LCLA、LCLL、LCLS伪操作声明局部变量,并可使用SETA、SETL和 SETS对其进行初始化。数值变量用于在程序的运行中保存数值值,但注意数值值 的大小不应超出一个32位数所能表示的范围。全局数值变 量使用伪操作GBLA定义,局部数值变量使用伪操作LCLA 定义。数值变量使用SETA赋值。逻辑变量用于在程序的运行中保存逻辑值,逻辑值只有两 种取值情况:真(TRUE)或假(FALSE)。全局逻辑变量 使用伪操作GBLL定义,局部逻辑变量使用伪操作LCLL定 义。逻辑变量使用SETL赋值 字符串变量用于在程序的运行中保存一个字符串,但注意 字符串的长度不应超
13、出512字节,最小长度为0。全局字符 变量使用伪操作GBLS定义,局部字符变量使用伪操作 LCLS定义。字符变量使用SETS赋值。2程序中的常量 程序中的常量是指其值在程序的运行过程中不能被改变的量。ARM(Thumb)汇编程序所支持的常量有数值常量、逻辑常量和字符串常量。数值常量一般为32位的整数,当作为无符号数时,其取值范围为0232-1,当作为有符号数时,其取值范围 为-231231-1。在ARM汇编语言中,使用EQU来定义数 值常量。数值常量一经定义,其数值就不能再修改。数值常量有下列表示方式:十进制数:在表达式中可以直接表达。如1、2、345。十六进制数:有两种表达方法:使用前缀0
14、x,如0 x003、0 x001C,或使用前缀&,如&10F、&134。这两种方法都 是等效的。n进制数:形如n_XXX,其中n的范围是2到9,XXX是具体数值。如:8_247表示一个八进制数。ASCII的表示:有些值可以使用ASCII表达,例如:A表达A的ASCII码。指令:MOV R1,#B 等同于 MOV R1,#0 x42。逻辑常量只有两种取值情况:TRUE和FALSE,注意带大括号。字符串常量为一个固定的字符串,一般用于程序运行时的信息提示。字符常量由单引号表示,包括C语言中的转义字符,如n。字符串常量用双引号表示,也包括C语言中的转义字符如“abcd0 xcr”。3汇编时变量代换
15、如果在字符串变量前面有一个代换操作符“$”,编译器会将该字符串变量的值代换“$”后的字符串变量。例 4.4 字符串变量代换的例子:LCLS str1 ;定义局部字符串变量str1和str2 LCLS str2 str1 SETS“pen”;str1赋值 str2 SETS“It is a$str1”;str2赋值 则在汇编后,str2的值为“It is a pen”。如果在数值变量前面有一个代换操作符“$”,编译器 会将该数值变量的值转换为十六进制的字符串,并将该十 六进制的字符串代换“$”后的数值变量。例 4.5 数值变量代换的例子:a1 SETA 12 str1 SETS“The numb
16、er is$a1”则汇编后str1的值为“The number is 0000000C”。如果在逻辑变量前面有一个代换操作符“$”,编译器 会将该逻辑变量代换为它的取值(真或假)。4.1.4汇编语言程序中的表达式和运算符 在汇编语言程序设计中,也经常使用各种表达式,表达式一般由 变量、常量、运算符和括号构成。常用的表达式有数值表达式、逻辑 表达式和字符串表达式。1数值表达式及运算符 数值表达式一般由数值常量、数值变量、数值运算符和括号构成。与数值表达式相关的运算符有:(1)算术运算符 算术运算符包括:“”、“”、“”、“/”及“MOD”等,他们分别 代表加、减、乘、除和取余数运算。例如,以X和
17、Y表示两个数值表 达式,则:XY 表示X与Y的和。XY 表示X与Y的差。XY 表示X与Y的乘积。X/Y 表示X除以Y的商。X:MOD:Y 表示X除以Y的余数。(2)移位运算 移位运算包括:“ROL”、“ROR”、“SHL”及“SHR”等。移位运算符以X和Y表示两个数值表达式,以上的移 位运算符代表的运算如下:X:ROL:Y 表示将X循环左移Y位。X:ROR:Y 表示将X循环右移Y位。X:SHL:Y 表示将X左移Y位。X:SHR:Y 表示将X右移Y位。(3)位逻辑运算符 位逻辑运算符包括:“AND”、“OR”、“NOT”及“EOR”运算。按以X和Y表示两个数值表达式,按位逻辑运算符代表的运算如下
18、:X:AND:Y 表示将X和Y按位作逻辑与操作。X:OR:Y 表示将X和Y按位作逻辑或操作。:NOT:Y 表示将Y按位作逻辑非操作。X:EOR:Y 表示将X和Y按位作逻辑异或操作。例 4.6 数值表达式应用举例,下列指令汇编的结果是什么?MOV R5,#0 x20:MOD:0 x04 ADD R4,R5,#0 x20+0 x20/4-8 MOV R4,#OxFF000000:AND:0 x55000000 分析:以上指令汇编后分别等价于如下指令:MOV R5,#0 ADD R4,R5,#0 x20 MOV R4,#0 x550000002逻辑表达式及运算符 逻辑表达式一般由逻辑量、逻辑操作符、
19、关系操作符 和括号构成,其表达式的运算结果为真TRUE或假 FALSE。与逻辑表达式相关的运算符如下:(1)关系操作符 关系操作符用于表示两个同类表达式之间的关系。关 系操作符和它的两个操作数组成一个逻辑表达式,其取值为 TRUE或FALSE.关系操作符包括:“=”、“”、“=”、“=”、“/=”、“”运算符。以X和Y表示两个逻辑表达式,以上的运算符代表的运算如下:X=Y 表示X等于Y。X Y 表示X大于Y。X=Y 表示X大于等于Y。X=Y 表示X小于等于Y。X/=Y 表示X不等于Y。X Y 表示X不等于Y。(2)逻辑操作符 逻辑操作符进行两个逻辑表达式之间的基本逻辑操作。操作结果为TRUE或
20、FALSE,逻辑操作符包括:“LAND”、“LOR”、“LNOT”及“LEOR”运算符。以X和Y表示两个逻辑表达式,以上的逻辑运算符代表的运算如下:X:LAND:Y 表示将X和Y 作逻辑与操作。X:LOR:Y 表示将X和Y作逻辑或操作。:LNOT:Y 表示将Y作逻辑非操作。X:LEOR:Y 表示将X和Y作逻辑异或操作。3.字符串表达式及运算符 字符串表达式一般由字符串常量、字符串变量、运算符 和括号构成。字符串最小长度为0,最大长度为512字节。与字符串表达式相关的运算符如下:(1)LEN运算符 LEN运算符返回字符串的长度(字符数),以X表示字符串表达式,其语法格式如下:LEN:X 其中,X
21、为字符串变量。(2)CHR运算符 CHR运算符将0255之间的整数转换为一个含ASCII字符的字 符串。当有些ASCII字符不方便放在字符串中时,可以使用CHR将其放 在字符串表达式中。以M表示某一个整数,其语法格式如下:CHR:M 其中,M为某一字符的ASCII值。(3)STR运算符 STR运算符将一个数值表达式或逻辑表达式转换为一个字符串。对于数值表达式,STR运算符将其转换为一个以十六进制组成的字符串;对于逻辑表达式,STR运算符将其转换为字符串T或F,其语法格式如下:STR:X 其中,X为一个数值表达式或逻辑表达式。(4)LEFT运算符 LEFT运算符返回某个字符串左端的一个子串,其语
22、法格式如下:X:LEFT:Y 其中:X为源字符串,Y为一个整数,表示要返回的字符个数。(5)RIGHT运算符 与LEFT运算符相对应,RIGHT运算符返回某个字符串右端的一个子串,其语法格式如下:X:RIGHT:Y 其中:X为源字符串,Y为一个整数,表示要返回的字符个数。(6)CC运算符 CC运算符用于将两个字符串连接成一个字符串,其语法格式如下:X:CC:Y 其中:X为源字符串1,Y为源字符串2,CC运算符将Y连接到X的后面。4.基于寄存器和程序计数器(PC)的表达式基于PC的表达 式表示了PC寄存器的值加上(或减去)一个数值表达式。基于PC的表达式通常由程序中的标号与一个数值表达 式组成。
23、相关的操作符包括:(1)BASE运算符 BASE运算符返回基于寄存器的表达式中寄存器的编号,其语法格式如下:BASE:X 其中,X为与寄存器相关的表达式。(2)INDEX运算符 INDEX运算符返回基于寄存器的表达式中相对于其基址寄存器的偏移量,其语法格式如下:INDEX:X 其中,X为与寄存器相关的表达式。5.其它常用运算符 ARM汇编语言中的操作还有下面一些:(1)?运算符?运算符返回某代码行所生成的可执行代码的长度,例如:?X 返回定义符号X的代码行所生成的可执行代码的字节数。(2)DEF运算符 DEF运算符判断是否定义某个符号,例如:DEF:X 如果符号X已经定义,则结果为TRUE,否
24、则为FALSE。6.表达式中各元素运算次序的优先级 表达式中各元素运算次序的优先级如下:括号运算符的优先级最高。相邻的单目运算符的运算顺序为从右到左,单目运算符的优先级高于其它运算符。优先级相同的双目运算符的运算顺序为从左到右。4.2 ARM汇编器的伪操作 4.2.1符号定义伪操作 4.2.2数据定义伪操作 4.2.3汇编控制伪操作 4.2.4信息报告伪操作 4.2.5其它常用的伪操作4.2 ARM汇编器的伪操作在ARM汇编语言程序里,有一些特殊指令助记符,这些 助记符与指令系统的助记符不同,没有相对应的操作 码,通常称这些特殊指令助记符为伪操作。伪操作不像机器指令那样在程序运行期间由机器执行
25、,伪操作在源程序中的作用是为完成汇编程序作各种准备 工作的,这些伪操作仅在汇编过程中起作用,一旦汇编 结束,伪操作的使命就完成。在ARM的汇编程序中,有如下几种伪操作:符号定义(Symbol Definition)伪操作 数据定义(Data Definition)伪操作 汇编控制(Assembly Control)伪操作 框架描述(Frame Description)伪操作 信息报告(Reporting)伪操作 其它(Miscellaneous)伪操作。伪操作一般与编译程序有关,因此ARM汇编语言的伪操作在不同的编译环境下有不同的编写形式和规则。4.2.1符号定义伪操作 符号定义伪操作用于定义
展开阅读全文