微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM学习手札之汇编伪指令

ARM学习手札之汇编伪指令

时间:11-22 来源:互联网 点击:
ARM 汇编程序由机器指令,伪指令和宏指令组成。伪指令不像机器指令那样在处理器运行期间由机器执行,而是汇编程序对源程序汇编期间由汇编程序处理。在前面的指令集章节中,我们已经接触了几条常用到的伪指令,如ADR 、ADRL、LDR、NOP 等,把它们和指令集一起介绍是因为它们在汇编时会被合适的机器指令代替,实现真正机器指令操作。宏是一段独立的程序代码,它是通过伪指令定义的,在程序中使用宏指令即可调用宏。

当程序被汇编时,汇编程序将对每个调用进行展开,用宏定义取代源程序中的宏指令。

符号定义伪指令
符号定义伪指令用于定义ARM 汇编程序的变量,对变量进行赋值以及定义寄存器名称,该类伪指令如下:
全局变量声明:GBLA、GBLL 和GBLS。
局部变量声明:LCLA、LCLL 和LCLS。
变量赋值: SETA、SETL 和SETS。
为一个通用寄存器列表定义名称:RLIST。
为一个协处理器的寄存器定义名称:CN。
为一个协处理定义名称: CP。
为一个VFP 寄存器定义名称:DN 和SN。
为一个FPA 浮点寄存器定义名称:FN。

GBLA、GBLL、GBLS
全局变量声明伪指令。
GBLA 伪指令用于声明一个全局的算术变量,并将其初始化为0。
GBLL 伪指令用于声明一个全局的逻辑变量,并将其初始化为{FALSE}。
GBLS 伪指令用于声明一个全局的字符串变量,并将其初始化为空字符串“”。
伪指令格式:
GBLA variable
GBLL variable
GBLS variable
其中:variable 定义的全局变量名,在其作用范围内必须惟一。全局变量的作用范围为包含该变量的源程序。
伪指令应用举例如下:
GBLL codedbg ;声明一个全局逻辑变量
codebg SETL {TRUE} ;设置变量为{TRUE}

LCLA、LCLL、LCLS
局部变量声明伪指令,用于宏定义的体中。
LCLA 伪指令用于声明一个局部的算术变量,并将其初始化为0。
LCLL 伪指令用于声明一个局部的逻辑变量,并将其初始化为{FALSE}。
LCLS 伪指令用于声明一个局部的字符串变量,并将其初始化为空字符串“”。
伪指令格式:
LCLA variable
LCLL variable
LCLS variable
其中:variable 定义的局部变量名。在其作用范围内必须惟一。局部变量的作用范围为包含该局部变量只能在宏中进行声明及使用。
伪指令应用举例如下:
MACRO ;声明一个宏
SENDDAT $dat ;宏的原型
LCLA bitno ;声明一个局部算术变量

bitno SETA 8 ;设置变量值为8

MEND

SETA、SETL、SETS
变量赋值伪指令。用于对已定义的全局变量,局部变量赋值。
SETA 伪指令用于给一个全局/局部的算术变量赋值。
SETL 伪指令用于给一个全局/局部的逻辑变量赋值。
SETS 伪指令用于给一个全局/局部的字符串变量赋值。
伪指令格式:
variable_a SETA expr_a
variable_l SETL expr_l
variable_s SETS expr_s
其中:variable_a 算术变量。用GBLA、LCLA 伪指令定义的变量。
expr_a 赋值的常数。
variable_l 逻辑变量。用GBLL、LCLL 伪指令定义的变量。
expr_l 逻辑值,即{TRUE}或{FALSE}。
variable_s 字符串变量。用GBLS、LCLS 伪指令定义的变量。
expr_s 赋值的字符串。
伪指令应用举例如下:
GBLS ErrStr

ErrStr SETS “No,semaphone”

RLIST
RLIST 为一个通用寄存器列表定义名称。伪指令格式如下:
name RLIST {reglist}
其中:name 要定义的寄存器列表的名称。
reglist 通用寄存器列表。
伪指令应用举例如下:
LoReg RLIST {R0-R7} ;定义寄存器列表LoReg

STMFD SP!,LoReg ;保存寄存器列表LoReg

CN
CN 为一个协处理器的寄存器定义名称。
伪指令格式:
name CN expr
其中:name 要定义的协处理器的寄存器名称。
expr 协处理器的寄存器编号,数值范围为0~15。
伪指令应用举例如下:
MemSet CN l ;将协处理的寄存器l 名称定义为MemSet

CP
CP 为一个协处理器定义的名称。
伪指令格式:
name CP expr
其中:name 要定义的协处理器名称。
expr 协处理器的编号,数值范围为0~15。
伪指令应用举例如下:
DivRun CN 5 ;将协处理器5 名称定义为DivRun

DN、SN
DN 和SN 为VFP 的寄存器的名称定义的伪指令。
DN 为一个双精度原VFP 寄存器定义名称。
SN 为一个单精度的VFP 寄存器定义名称。
伪指令格式:
name DN expr
name SN expr
其中:name 要定义的VFP 寄存器名称。
expr 双精度的VFP 寄存器编号为0~15,单精度的VFP 寄存器编号为0~31。
伪指令应用举例如下:
cdn DN 1 ;将VFP 双精度寄存器1 名称定义为cdn
rex SN 3 ;将VFP 单精度寄存器3 名称定义为rex

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top