ARM汇编指令之伪指令介绍。
ARM汇编伪指令
在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。
在ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。
一、符号定义(Symbol Definition)伪指令
符号定义伪指令用于定义ARM 汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。
常见的符号定义伪指令有如下几种: . M" W( ^( V g4 V
— 用于定义全局变量的GBLA 、GBLL 和GBLS 。
— 用于定义局部变量的LCLA 、LCLL 和LCLS 。 3 ^" M7 F+ B ?6 d
— 用于对变量赋值的SETA 、SETL 、SETS 。 - C! u. F1 t' M- s
— 为通用寄存器列表定义名称的RLIST 。
1、GBLA、GBLL 和GBLS
语法格式: 6 O9 {5 Q) j/ m. ^% C# }/ A
GBLA (GBLL 或GBLS )全局变量名 # s9 g4 q/ M$ \ g2 E
GBLA 、GBLL 和GBLS 伪指令用于定义一个ARM 程序中的全局变量,并将其初始化。其中:
GBLA 伪指令用于定义一个全局的数字变量,并初始化为0 ; c$ u+ ^. A; c: |
GBLL 伪指令用于定义一个全局的逻辑变量,并初始化为F(假);
GBLS 伪指令用于定义一个全局的字符串变量,并初始化为空; % ]# `; m4 u) x/ B
由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。
使用示例:
GBLA Test1 ; 定义一个全局的数字变量,变量名为 Test1。
Test1 SETA 0xaa ; 将该变量赋值为0xaa。 3 r4 u7 }: G4 j* g" i0 K
GBLL Test2 ; 定义一个全局的逻辑变量,变量名为 Test2。
Test2 SETL {TRUE} ;将该变量赋值为真。
GBLS Test3 ; 定义一个全局的字符串变量,变量名为 Test3。
Test3 SETS “Testing” ;将该变量赋值为"Testing”。
2、LCLA、LCLL 和LCLS
语法格式: ! C7 g- O' F, i. r6 a( ?
LCLA (LCLL 或 LCLS )局部变量名
LCLA 、LCLL 和LCLS 伪指令用于定义一个ARM 程序中的局部变量,并将其初始化。其中: 4 }8 u1 Z5 C* Y9 H
LCLA伪指令用于定义一个局部的数字变量,并初始化为0 ;
LCLL伪指令用于定义一个局部的逻辑变量,并初始化为F(假);
LCLS伪指令用于定义一个局部的字符串变量,并初始化为空;
以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。
使用示例:
LCLA Test4 ; 声明一个局部的数字变 量,变量名为Test4。
Test3 SETA 0xaa ; 将该变量赋值为0xaa。 " E- o4 y7 y. S. m* g
LCLL Test5 ; 声明一个局部的逻辑变 量,变量名为Test5。 : r) a. K6 m y; c
Test4 SETL {TRUE} ;将该变量赋值为真。
LCLS Test6 ; 定义一个局部的字 符串变量,变量名为Test6。
Test6 SETS “Testing” ;将该变量赋值为 "Testing”。
3、SETA、SETL 和SETS
语法格式:
变量名 SETA (SETL 或 SETS )表达式
伪指令 SETA 、SETL 、SETS 用于给一个已经定义的全局变量或局部变量赋值。
SETA伪指令用于给一个数学变量赋值; 1 r+ p( Q8 K3 ?& z' u
SETL伪指令用于给一个逻辑变量赋值; : r2 \) F4 J% k' C) h
SETS伪指令用于给一个字符串变量赋值; - F D; u/ F# U* W% t) m; ? u! }- x
其中,变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。
使用示例:
LCLA Test3 ; 声明一个局部的数字变量,变量名为 Test3。 U6 k- x5 T3 ^
Test3 SETA 0xaa ; 将该变量赋值为0xaa。 2 t1 x/ x$ T. D2 T8 E2 H% F1 h" ]
LCLL Test4 ; 声明一个局部的逻辑变量,变量名为 Test4。
Test4 SETL {TRUE} ;将该变量赋值为真。
4 、RLIST
语法格式: 3 F5 c, K: ~2 S( I& H/ D9 E
名称 RLIST { 寄存器列表 }
RLIST伪指令可用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在ARM 指令 LDM/STM中使用。在LDM/STM指令中,列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。
使用示例: - Z+ ~8 f" m ^, s
RegList RLIST {R0-R5 ,R8 ,R10} ;将寄存器列表名称定义为 RegList ,可在ARM指令LDM/STM中通过该名称访问寄存器列表。
4 l+ e7 t. G3 P9 s% U- S
二、数据定义(Data Definition)伪指令
! v" I. o% c' K: c* ^: F
| 欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) | Powered by Discuz! X3.2 |