第章ARM汇编语言程序设计-Read.doc

第章ARM汇编语言程序设计-Read.doc

第4章ARM汇编语言程序设计 本章介绍如何编写ARM和thumb汇编语言程序。同时介绍ARM汇编编译器armasm的使用方法。 4.1伪操作 ARM 汇编语言源程序中语句由指令、伪操作和宏指令组成。在ARM中伪操作称为derective,这里为保持和国内在IBM PC汇编语言中对名词翻译的一致性derective称为伪操作;同样在ARM中宏指令被称为pseudo-instructlon,这里将其称为宏指令,宏指令也是通过伪操作定义的。本节介绍伪操作和宏指令。伪操作不像机器指令那样在计算机运行期间由机器执行,它是在汇编程序肘源程序汇编期间由汇编程序处理的。宏是一段独立的程序代码。在程序中通过宏指令调用该宏。当程序被汇编时,汇编程序将对每个宏调用作展开,用宏定义体取代源程序中的宏指令。本节介绍以下类型的ARM伪操作和宏指令。 符号定义(Symbol definition伪操作。 数据定义(Data definition)伪操作。 汇编控制(Assembly control)伪操作。 框架描述(Frame description)伪操作。 信息报告(Reporting)伪操作。 其他(Miscellaneous)伪操作。 4.1.1符号定义伪操作 符号定义(Symbol definition)伪操作用于定义ARM汇编程序中的变量,对变量进行赋值以及定义寄存器名称。包括以下伪操作。 GBLA、GBLL及GBLS声明全局变量。 LCLA.LcLL及LCLS 声明局部变量。 SETA.SETL及SETS 给变量赋值。 RLIST为通用寄存器列表定义名称。 CN为协处理器的寄存器定义名称。 CP为协处理器定义名称。 DN及SN为VFP的寄存器定义名称。 FN为FPA的浮点寄存器定义名称。 1 GBLA GBLL及GBLS GBLA GBLL及GBLS伪操作用于声叫个ARM程序中的全局变量,并将其初始化。 GBLA0。 GBLL伪操作声明一个全局的逻辑变量,并将其初始化成{FALSE} GBLS伪操作声明一个全局的串变量,并将其初始化成宅串“”。 语法格式 gblx variable 其中: gblx是后面3种伪操作之一:GBLA,GBLL或者GBLS。 variable是所说明的全局变量的名称。在其作用范围内必须惟一。 如果用这些伪操作重新声明已经声明过的变量,则变量的值将被初始化成后一次声明语句中的值。 全局变量的作用范围为包含该变量的源程序。 示例 GBLA objectsize ;声明一个全局的算术变量 objectsize SETA 0xff ;向该变量赋值 SPACE objectsize ;引用该变量 2 LCLA、LCLL及LCLS LCLA.LCLL及LCLS伪操作用于声明 个ARM程序中的局部变量,并将其初始化。 LCLA伪操作声明一个局部的算术变量,并将其初始化成0。 LCLL伪操作声明一个局部的逻辑变量,并将其初始化成{FALSE} LCLS伪操作声明一个局部的串变量,并将其初始化成空串“” 语法格式 lclx variable lclx是后面3种伪操作之一:LCLA,LCLL或者LCLS。 variable是所说明的局部变量的名称。在其作用范围内必须惟一。 如果用这些伪操作重新声明已经声明过的变量,则变量的值将被初始化成后一次声明语句中的值。 局部变量的作用范围为包含该局部变量的宏代码的一个实例。 示例 MACRO ;声明个宏 $label message $a ;宏的原型 LCLS err ;声明一个局部串变量err err SETS error no: ;向该变量赋值 $label ;代码 INFO 0,”err”:CC::STR:Sa ;使用该串堂且 MEND ;宏定义结束 3 SETA,SETL及SETS SETA,SETL及SETS伪操作用于给个ARM程序中的变量赋值。 SETA伪操作给一个算术变量赋值。 SETL伪操作给一个逻辑变量赋值。 SETS伪操作给一个串变量赋值。 语法格式 setx variable expr setx是后而3种伪操作之:SETA,SETL或者SETS。 variable是使用GBLA、GBLL、GBLS、LCLA、LCLL或LCLS说明的变最 expr为表达式,即赋予变量的值。 使用说明 示例 GBLA objectsize ;声明一个全局的算术变量 objectsize SETA 0xff ;向该变量赋值 SPACE objectsize ;引用该变量 GBLL statusB

文档评论(0)

1亿VIP精品文档

相关文档