chapter 5 汇编语言语句格式 嵌入式课件.docVIP

chapter 5 汇编语言语句格式 嵌入式课件.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
chapter 5 汇编语言语句格式 嵌入式课件

5.2 ARM汇编语言语句格式 学习完ARM的指令系统后,让我们系统地看一下ARM汇编语言的语句格式。 {符号}{指令或伪指令}{; 注释} 其中,需要注意的是: 在ARM汇编语言中,符号必须从一行的行头开始,并且符号中不能包含空格。符号可以为地址标号,也可以是某些指令中的变量或常量。 在ARM汇编语言中,指令不能从一行的行头开始,前面必须有空格或者符号。 注释以“:”开头,可以单独占据一行。汇编器在汇编时忽略所有的注释。 在ARM汇编语言中,指令助记符必须统一大写或者小写,不能在一个助记符中既有大写字母又有小写字母。伪指令必须大写。 语句之间可以插入空行,以增加程序的可读性。如果一条语句很长,可以分成若干行来写。在一行的末尾用“\”表示下一行将续在本行之后。注意在“\”之后不能再有其它任何字符。 ARM汇编语言的符号 前面提到ARM汇编语言的符号可以为地址标号,以可以为变量或者是常量。对于地址标号,当以数字开头时,其作用范围为当前段(当没有使用ROUT伪操作时),这种标号又称局部标号。 标号的命名满足如下规则: 符号由大小字母、数字以及下划线组成; 局部标号以数字开头,其他的符号均不能以数字开头; 符号区分大小写; 符号中所有字符都是有意义的; 符号在其作用范围内必须唯一,即在其作用范围内不可有同名的符号; 程序中的符号不能与系统内部变量或者系统预定义的符号同名; 程序中的符号通常不要与指令助记符或伪指令同名。当程序中的符号与指令助记符或伪指令同名时,用双竖线将符号括起来,如||require||,这时的双竖线并不是符号的组成部分。 常量 ARM中的常量有数字常量、逻辑常量、串常量和字符常量。在ARM汇编语言中,使用EQU来定义常量,常量一经定义,其数字就不能再修改。 数字常量是一个32位的整数,当作为无符号整数时,取值范围为0~232-1;当作为有符号整数时,取值范围为-231~231-1汇编器并不区分一个数是无符号数还是有符号数,事实上-n与232-n在内存中是同一个数。进行大小比较时,认为数字常量都是无符号的数。 数字常量常采用3种表示方式: 十进制表示,如123。 十六进制表示,如0x7c。 N进制表示n_XXX,其中n为2~9之间的整数。例如8_123表示十进制数83。 逻辑常量包括TRUE和FALSE两个取值,使用时必须写出{TRUE}和{FALSE}两种形式。 串常量时用双引号括起来的字符串,中间可以包含空格。如果串常量本身含有双引号或$形式字符,则必须书写两次,例如:”abc$$cba”表示的是字符串”abc$cba”。 字符常量是用单引号括起来的单一的字符。 变量及变量替换 ARM中的变量有数字变量、逻辑变量和串变量3种,变量的类型在程序中不能改变。 数字变量的取值范围为数字常量和数字表达式所能表示的数值范围。 逻辑变量的取值为{TRUE}和{FALSE}。 串变量的取值范围为串表达式可以表示的范围,如“abcd”。 在ARM汇编语言中,用GBLA、GBLL、GBLS声明全局变量,用LCLA、LCLL、LCLS声明局部变量,用SETA、SETL、SETS为变量赋值。 如果在串变量前面有一个$字符,汇编时编译器会用该串变量的数值取代该串变量。例如下面的指令汇编后STR2的值为This is a pen。 GBLS STR1 GBLS STR2 STR1 SETS “pen” STR2 SETS “This is a $STR1” 如果数字变量的前面有一个$字符,汇编时编译器会将该数字变量的数字转换成十六进制的串,用它来取代$后面的数字变量。 如果逻辑变量的前面有一个$字符,汇编时编译器会将该逻辑变量替换成它的取值(TRUE或FALSE). 如果程序中需要字符$,则用$$来表示。 标号及局部标号 符号表示地址时常被称为标号,汇编器根据标号在程序中的位置为标号赋予相应的地址值。根据地址值的生成方式可以把标号分为以下3种: 基于PC的标号:在汇编时处理成PC值加上或减去一个偏移量。 基于寄存器的标号:在结构化的内存表(MAP)中通常含有标号,程序中内存表的首地址常放在某一个寄存器中,则标号在汇编时被处理成寄存器的值加上一个偏移量,这种类型的标号称为基于寄存器的标号。 绝对地址:连接时生成的标号地址值。 局部标号为0~99之间的十进制数字。其语法格式如下: N{routname} 其中,N为0~99之间的数字,routname为局部标识的作用范围,可选项。与其他标号不同,局部标号可以被定义多次。局部标号在宏定义中非常有用,其作用范围限制在当前段(AREA)中,也可以用ROUT伪指令来定义局部变量的作用范围。 局部标号的引用: %{F|B}{A|T} N{routname} 其中,F表示编译

文档评论(0)

skvdnd51 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档