ARM汇编语言程序设计 习题

上传人:豆浆 文档编号:50755830 上传时间:2018-08-10 格式:PPT 页数:115 大小:437.50KB
返回 下载 相关 举报
ARM汇编语言程序设计 习题_第1页
第1页 / 共115页
ARM汇编语言程序设计 习题_第2页
第2页 / 共115页
ARM汇编语言程序设计 习题_第3页
第3页 / 共115页
ARM汇编语言程序设计 习题_第4页
第4页 / 共115页
ARM汇编语言程序设计 习题_第5页
第5页 / 共115页
点击查看更多>>
资源描述

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

1、第5章 ARM指令集和汇编语言程序n本章主要介绍以下内容:nARM汇编语言程序格式n典型ARM汇编语言程序举例nARM汇编与C,C+混合编程1嵌入式系统开发中汇编语言设计的意义n汇编语言程序设计更能充分发挥处理器的硬件 特性n两个优势n操作系统移植需要编写几百行底层硬件 的汇编语言程序,这是C语言不可取代的。n优化算法的时空效率,C语言的目标代码 优化是编译器完成的,而汇编语言的目标代 码优化是人工完成的。人是算法的创造者, 也是编译器的设计者,人工优化比编译器质 量高。n弱点n编程效率低,开发周期长,经济代价大 。25.1 ARM汇编语言程序格式n两种ARM汇编语言格式nARM汇编语言程序格

2、式主要有两种:n基于ADS1.2集成开发环境的汇编器 格式n包括SDT在内,统称为ADSn基于Linux的GNU汇编器格式n在本章主要介绍基于ARM公司ADS集成开 发环境汇编器格式的汇编语言程序设计。n在后面将介绍基于GNU汇编器的ARM汇 编语言程序编写方法。3预定义寄存器名及内部变量名nARM汇编器中将几十个寄存器名称作为保 留字预先给与了定义,这些预定义寄存器名 都是大小写敏感的,它们都与具体的寄存器 一一对应。参看下面的表格。 4ARM公司ADS预定义的寄存器名一览表预预定义义寄存器 名描述r0-r15 and R0- R15ARM处处理器的通用寄存器a1-a4入口参数,处处理结结果

3、,暂暂存寄存器; r0-r3的同义词义词 v1-v8变变量寄存器,r4-r11sb and SB静态态基址寄存器,r9sl and SL栈栈界限寄存器,r10fp and FP帧帧指针针寄存器,r11ip and IP内部过过程调调用暂暂存寄存器,r12sp and SP 栈栈指针针寄存器,r13 5ARM公司ADS预定义的寄存器名 一览表(续)预预定义义寄存器名描述 lr and LR连连接寄存器,r14 pc and PC程序寄存器,r15 cpsr and CPSR当前程序状态态寄存器spsr and SPSR保存的程序状态态寄存器 f0-f7 and F0-F7浮点数运算加速寄存器 s

4、0-s31 and S0-S31单单精度向量浮点数运算寄存器 d0-d15 and D0-D15 双精度向量浮点数运算寄存器 p0-p15协处协处 理器0-15 c0-c15协处协处 理器寄存器0-156ARM汇编语言程序的部分内部变量 名清单 内部变变量描述 PC or .当前指令地址 VAR or 内存区定位计计数器的当前值值 TRUE逻辑值逻辑值 真 FALSE逻辑值逻辑值 假 CONFIG汇编汇编 器如果在汇编汇编 ARM指令,取值为值为 32,如果 汇编汇编 Thumb指令,取值值16 ENDIAN如果汇编汇编 器是大端序,则则取值值big;如果是小端 序,则则取值值little。

5、CPU被选择选择 的CPU名称。缺省值值是ARM7TDMI。 ARCHITECT URE该变该变 量内容是被选择选择 的ARM体系结结构的名称。 如:3, 3M, 4T CODESIZECONFIG的同义词义词7ARM汇编语言程序的语句格式nARM汇编语言程序的语句格式格式如下: symbol instruction | directive | pseudo- instruction ;comment n对应的中文语句格式描述是: 符号 (标号) 指令 | 指示符 | 伪指令 ; 注释 n语句格式中,花括号括起来的部分表示可 以省略;竖线分隔的字段表示可以替换。8ARM汇编语言程序中的符号nA

6、RM汇编语句中的符号可以是指令地址或 标号、变量、常量和局部标号,符号属性可 以是程序相关的、寄存器相关的或者是绝对 地址。9(一)符号命名和书写规则n符号的命名和书写有以下规则: 符号命名可以使用大小写字母,数字和下 划线。 符号是大小写字母敏感的。 除本地行号外,名称不能以数字开头。 一个程序段中不能重名。 符号在其作用范围内必须唯一。 符号不能够与系统内部变量或者系统预定 义的符号同名。例如:a1 or R0、sp、cpsr、 PC or .、VAR or 、CONFIG、CPU等 等。10符号命名和书写规则(续)当程序中的符号与指令助记符或者指示符 同名时,用双竖线将符号括起来。如 |

7、buffe_a|,这时双竖线并不是符号的组成部 分。 在ARM汇编语言程序中,所有符号必须在 一行的最左边位置开始书写,即所谓的顶格书写 ,不允许包含空格或者制表符。 符号的字符序列中不能大小写字母相混杂 。11(二)常量nARM汇编语言中使用到的常量可以是数字 常量、字符常量、字符串常量和布尔常量。n数字常量有以下3种表示方式: 1)十进制数,如:535,246。 2)十六进制数,如:0x645,0xff00。 3)n进制数,格式为n_XXX,其中n表示n进 制,从29,XXX是具体的数字。 例如:8_3777,8_5237702数字常量12字符常量n字符常量由一对单引号括起来,包括一个单字

8、符 或者标准C中的转义字符。n例如:A,n。n字符串常量由一对双引号以及由它括住的一组字 符串组成,包括标准C中的转义字符。如果需要使 用双引号或字符$,则必须用”和$代替。n例如执行语句:strtwo SETS “This is character of ” 其编译结果是:字符串“This is character of ” 被赋值给strtwo变量。13$在汇编语句中的使用举例GBLS add4ff add4ff SETS “ADD r4,r4,#0xFF“; set up add4ff$add4ff.00 ; invoke add4ff ; this produces; ADD r4,r

9、4,#0xFF00; elaborate substitution GBLS s1GBLS s2GBLS fixupGBLA count count SETA 14 s1 SETS “a$b$count“ ; s1 now has value a$b0000000E s2 SETS “abc“ Fixup SETS “|xy$s2.z|“ ; fixup now has value |xyabcz| |C$code| MOV r4,#16 ; but the label here is C$code14逻辑值常量n布尔常量TRUE和FALSE在表达式中写为 :TRUE,FALSE。15(三)表

10、达式nARM汇编语言中的表达式由符号、数值、 单目操作符、双目操作符以及括号组成。运 算的优先级次序与标准C一样。16字符串表达式n字符串由字符串常量、字符串变量、操作 符以及括号组成。最大长度为512字节,最短 0个字节。字符串表达式的组成元素有:字符 串常量、字符串变量、操作符等。字符串常 量由包含在双引号内的一系列字符组成。当 在字符串中包含美元符号$或者引号”时,用 $表示一个$,用”表示一个”。字符串变量 用指示符GBLS(全局字符串)或者LCLS( 局部字符串)声明,用SETS赋值。取值范围 与字符表达式相同。 17ARM汇编语言中的字符串操作符 操作符功能操作符功能 LEN返回字

11、符串的 长长度CHR将0255之间间整数 变为单变为单 个字符STR将一个数字量 变换为变换为 串LEFT返回字符串的左子 串RIGHT返回字符串的 右子串CC连连接两个字符串18n指令格式说明: LEN X ;返回X字符串长度 STR M ;将数字M转换成一个字符串 X RIGHT N;返回X字符串右边长度为N 的子串 X LEFT N;返回X字符串左边长度为N的 子串 CHR M ; 返回数字M表示的单个字符 X CC Y ;返回字符串X和Y连接的字符串19数字表达式n数字表达式由数字常量、数字变量、操作 符和括号组成。数字表达式表示的是一个32 位数的整数,其取值范围为0232-1;当作

12、为 有符号数时,其取值范围为-231231-1。n汇编器对-n和232-n不做区别,汇编时对关系 运算符采用无符号数方式处理,这就意味着 0-1是FALSE。20逻辑表达式n逻辑表达式由逻辑常量、逻辑操作符、关 系操作符以及括号组成。取值范围为 FALSE和TRUE。21(四)地址标号n当符号代表地址时称为标号(Label)。n以数字开头的标号其作用范围是当前段( 没有使用ROUT指示符时),这种标号又称 为局部标号(Local Label)。22三种类型标号(1)PC相关标号 (2)寄存器相关标号 (3)绝对地址23PC相关标号nPC相关标号表示程序计数器加减一个数值 常数后得到的地址值。常

13、用来指明一个分支 指令的目标地址,或者访问嵌入在代码段中 的一个数据项。n具体标记方法是:在汇编语言程序指令的 前面写入标号,或者在一个数据指示符前面 写入标号。通常用DCB或者DCD等指示符定 义。24nDCB,DCD指令格式:X DCB EXP1,EXP2如定义一个字节为单位的标号XSTR DCB “HELLO WORLD!”,0DCB 0x32,0x34,0x35X DCD EXP1,EXP2定义一个字为单位的标号LDR PC, RESETADDR RESETADDR DCD RESET RESET25寄存器相关标号n寄存器标号表示指定寄存器的值加减一个数值常 数后得到的地址值。常常用于

14、访问位于数据段中的 数据。通常用MAP或者FIELD等指示符定义。n格式:MAP EXPR ,BASEREGLABLEFIELD EXPR 如:MAP 0x00400000 ,R9COUNT FIELD 4X FIELD 8Y FIELD 826绝对地址n绝对地址是一个32位的无符号数字常量,可 寻址范围是0231-1。使用它可以直接寻址整个 地址空间。27(五)段内标号和段外标号nARM处理器的地址标号分为段内标号和段 外标号。段内标号的地址值在汇编时确定, 段外标号的地址值在连接时确定。28程序相对寻址和寄存器相对寻址n在程序段中标号代表其所在位置与段首地 址的偏移量,根据程序计数器和偏移

15、量计算 地址称为程序相对寻址。n在映像文件中定义的标号代表标号到映像 首地址的偏移量。映像的首地址通常被赋予 一个寄存器,根据该寄存器值与偏移量计算 地址称为寄存器相对寻址。29(六)局部标号nARM汇编语言的宏常常使用局部标号。局 部标号提供分支指令在汇编程序的局部范围 内进行跳转,主要用途是汇编子程序中的循 环和条件编码。它是一个099之间的数字, 后面可以有选择地附带一个符号名称。n局部标号特别适用于宏。30局部标号(续1)n使用ROUT指示符可以限制局部标号的范围 。只能在该局部标号的范围引用局部标号。 如果在该范围的上下两个方向都没有匹配的 标号,汇编器将给出一个错误信号并停止汇 编

16、。 局部标号语法格式如下: nroutname被引用的局部标号语法规则是: % F|B A|T n routname31局部标号(续2)n是局部标号的数字号。 routname是当前局部范围的名称。 %表示引用操作。 F指示汇编器只向前搜索 B指示汇编器只向后搜索 A指示汇编器搜索宏的所有嵌套层次 T指示汇编器搜索宏的当前层次 如果F和B都没有指定,则汇编器首先向前搜索,再 向后搜索。如果A和T都没有指定,汇编器搜索从宏的 当前层次到宏的最高层次,比当前层次低的宏不再搜索 。32ARM汇编语言程序编写规范 nARM汇编语言程序源代码中允许有空行,可以在 汇编程序中加上一个空白行,来增加程序的可阅读 性。此外需要注意的是:指令,指示符,伪指令前

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

当前位置:首页 > 行业资料 > 其它行业文档

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