8ARM汇编语言程序设计习题5.ppt

  1. 1、本文档共115页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2008年3月28日 南京大学计算机系 第5章 ARM指令集和汇编语言程序 本章主要介绍以下内容: ARM汇编语言程序格式 典型ARM汇编语言程序举例 ARM汇编与C,C++混合编程 嵌入式系统开发中汇编语言设计的意义 汇编语言程序设计更能充分发挥处理器的硬件特性 两个优势 操作系统移植需要编写几百行底层硬件的汇编语言程序,这是C语言不可取代的。 优化算法的时空效率,C语言的目标代码优化是编译器完成的,而汇编语言的目标代码优化是人工完成的。人是算法的创造者,也是编译器的设计者,人工优化比编译器质量高。 弱点 编程效率低,开发周期长,经济代价大。 5.1 ARM汇编语言程序格式 两种ARM汇编语言格式 ARM汇编语言程序格式主要有两种: 基于ADS1.2集成开发环境的汇编器格式 包括SDT在内,统称为ADS 基于Linux的GNU汇编器格式 在本章主要介绍基于ARM公司ADS集成开发环境汇编器格式的汇编语言程序设计。 在后面将介绍基于GNU汇编器的ARM汇编语言程序编写方法。 预定义寄存器名及内部变量名 ARM汇编器中将几十个寄存器名称作为保留字预先给与了定义,这些预定义寄存器名都是大小写敏感的,它们都与具体的寄存器一一对应。参看下面的表格。 ARM公司ADS预定义的寄存器名一览表 ARM公司ADS预定义的寄存器名一览表(续) ARM汇编语言程序的部分内部变量名清单 ARM汇编语言程序的语句格式 ARM汇编语言程序的语句格式格式如下: { symbol } { instruction | directive | pseudo-instruction } { ;comment } 对应的中文语句格式描述是: { 符号 (标号)} { 指令 | 指示符 | 伪指令 } { ;注释 } 语句格式中,花括号括起来的部分表示可以省略;竖线分隔的字段表示可以替换。 ARM汇编语言程序中的符号 ARM汇编语句中的符号可以是指令地址或标号、变量、常量和局部标号,符号属性可以是程序相关的、寄存器相关的或者是绝对地址。 (一)符号命名和书写规则 符号的命名和书写有以下规则: ①符号命名可以使用大小写字母,数字和下划线。 ②符号是大小写字母敏感的。 ③除本地行号外,名称不能以数字开头。 ④一个程序段中不能重名。 ⑤符号在其作用范围内必须唯一。 ⑥符号不能够与系统内部变量或者系统预定义的符号同名。例如:a1 or R0、sp、cpsr、{PC} or .、{VAR} or @、{CONFIG}、{CPU}等等。 符号命名和书写规则(续) ⑦当程序中的符号与指令助记符或者指示符同名时,用双竖线将符号括起来。如||buffe_a||,这时双竖线并不是符号的组成部分。 ⑧在ARM汇编语言程序中,所有符号必须在一行的最左边位置开始书写,即所谓的顶格书写,不允许包含空格或者制表符。 ⑨符号的字符序列中不能大小写字母相混杂。 (二)常量 ARM汇编语言中使用到的常量可以是数字常量、字符常量、字符串常量和布尔常量。 数字常量有以下3种表示方式: 1)十进制数,如:535,246。 2)十六进制数,如:0x645,0xff00。 3)n进制数,格式为n_XXX,其中n表示n进制,从2~9,XXX是具体的数字。 例如:8_3777,8_5237702 字符常量 字符常量由一对单引号括起来,包括一个单字符或者标准C中的转义字符。 例如:’A’,’\n’。 字符串常量由一对双引号以及由它括住的一组字符串组成,包括标准C中的转义字符。如果需要使用双引号或字符$,则必须用””和$$代替。 例如执行语句:strtwo SETS “This is character of ””” 其编译结果是:字符串“This is character of ””被赋值给strtwo变量。 $$在汇编语句中的使用举例 GBLS add4ff add4ff SETS “ADD r4,r4,#0xFF“ ; set up add4ff $add4ff.00 ; invoke add4ff ; this produces ; ADD r4,r4,#0xFF00 ; elaborate substitution GBLS s1 GBLS s2 GBLS fixup GBLA 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|

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档