EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM汇编指令之伪指令介绍。 ARM汇编伪指令 在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。 在ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。
3 E) { h: A% R
一、符号定义(Symbol Definition)伪指令 符号定义伪指令用于定义ARM 汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。 常见的符号定义伪指令有如下几种: 0 u1 P4 E; L( [( h
— 用于定义全局变量的GBLA 、GBLL 和GBLS 。
7 ~) z/ a* t C ^+ S — 用于定义局部变量的LCLA 、LCLL 和LCLS 。 1 @$ a8 e0 g! @
— 用于对变量赋值的SETA 、SETL 、SETS 。
8 T& N% \) D6 w5 t: ^ — 为通用寄存器列表定义名称的RLIST 。 1、GBLA、GBLL 和GBLS 语法格式: ' |9 p- C) M- r3 H( o
GBLA (GBLL 或GBLS )全局变量名
/ E: b& @& {& w0 q. H GBLA 、GBLL 和GBLS 伪指令用于定义一个ARM 程序中的全局变量,并将其初始化。其中:
5 I; i2 [# e! u GBLA 伪指令用于定义一个全局的数字变量,并初始化为0 ; 9 }0 D9 o% q# H2 U! ?" s' B! J" h
GBLL 伪指令用于定义一个全局的逻辑变量,并初始化为F(假); 2 w1 p; N9 t4 l8 {: T8 x
GBLS 伪指令用于定义一个全局的字符串变量,并初始化为空; 4 b1 {4 Z5 E. L5 O
由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。 使用示例: GBLA Test1 ; 定义一个全局的数字变量,变量名为 Test1。 % I8 S) r: Z; `! E* S" N
Test1 SETA 0xaa ; 将该变量赋值为0xaa。
& y0 \, q0 m9 I3 M. r Z" g1 ?& z N& v GBLL Test2 ; 定义一个全局的逻辑变量,变量名为 Test2。 * R" y0 y$ s8 c" H8 r; c
Test2 SETL {TRUE} ;将该变量赋值为真。 ' N4 `8 C$ O9 {" R0 v6 R
GBLS Test3 ; 定义一个全局的字符串变量,变量名为 Test3。
5 w& [! t- P% X6 L- j% W7 n# V Test3 SETS “Testing” ;将该变量赋值为"Testing”。
6 y5 Z( n4 e( C( l$ N2、LCLA、LCLL 和LCLS 语法格式:
% L$ W: J d4 k0 y0 U2 F* V! e6 k LCLA (LCLL 或 LCLS )局部变量名
1 ?' z9 X$ H8 z/ ?; X$ a LCLA 、LCLL 和LCLS 伪指令用于定义一个ARM 程序中的局部变量,并将其初始化。其中: . j. Y- [8 Y- j V% ]
LCLA伪指令用于定义一个局部的数字变量,并初始化为0 ; / l4 q% N/ b! D3 c0 u
LCLL伪指令用于定义一个局部的逻辑变量,并初始化为F(假);
9 z" e& P$ G; t$ Q9 Q' ] LCLS伪指令用于定义一个局部的字符串变量,并初始化为空;
+ b2 n- i9 @$ p( T- D6 D 以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。 使用示例: LCLA Test4 ; 声明一个局部的数字变 量,变量名为Test4。 6 g' @1 ]' B! C6 e( V
Test3 SETA 0xaa ; 将该变量赋值为0xaa。
% { R, |" }6 t$ p; j LCLL Test5 ; 声明一个局部的逻辑变 量,变量名为Test5。 5 y7 G6 k. D1 Q8 R) m, F8 l4 h
Test4 SETL {TRUE} ;将该变量赋值为真。
9 s. e: M' |, Y, s3 k LCLS Test6 ; 定义一个局部的字 符串变量,变量名为Test6。 9 s* N- c h" ?
Test6 SETS “Testing” ;将该变量赋值为 "Testing”。 . z1 T' Y( O$ l* V8 s4 V9 `: {
3、SETA、SETL 和SETS 语法格式:
8 i. Z) _0 D$ c: s1 V 变量名 SETA (SETL 或 SETS )表达式
8 j! C( T8 B! K# E1 D) F9 v 伪指令 SETA 、SETL 、SETS 用于给一个已经定义的全局变量或局部变量赋值。
+ ^4 t* v. m7 I h SETA伪指令用于给一个数学变量赋值; 4 W5 Y3 _. W$ g$ R: P
SETL伪指令用于给一个逻辑变量赋值;
! n5 v' G4 J& o9 H: M SETS伪指令用于给一个字符串变量赋值;
$ Y& a# t$ q6 c& j9 n. c+ `& U 其中,变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。 使用示例: ; a5 G& e5 W% i; J5 D6 R5 M& d
LCLA Test3 ; 声明一个局部的数字变量,变量名为 Test3。 # v1 g1 {5 S- S/ N' J
Test3 SETA 0xaa ; 将该变量赋值为0xaa。 8 j _5 @6 b6 R) J! C; Y
LCLL Test4 ; 声明一个局部的逻辑变量,变量名为 Test4。 # q" a4 K" U5 F) C2 i& q* o
Test4 SETL {TRUE} ;将该变量赋值为真。
5 J) Y* ?4 V7 F4 、RLIST 语法格式: / \+ B8 h7 @; ], G
名称 RLIST { 寄存器列表 } RLIST伪指令可用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在ARM 指令 LDM/STM中使用。在LDM/STM指令中,列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。 使用示例:
1 P- n5 u. l$ o+ e! n1 R. C RegList RLIST {R0-R5 ,R8 ,R10} ;将寄存器列表名称定义为 RegList ,可在ARM指令LDM/STM中通过该名称访问寄存器列表。
/ F' ]$ m r% {; D" X |
二、数据定义(Data Definition)伪指令 + _9 K' V9 B4 A% w2 K6 |
* t$ K x# J9 U! z+ y
|