找回密码
 注册
关于网站域名变更的通知
查看: 354|回复: 1
打印 上一主题 下一主题

超级实用的ARM 汇编指令集(续)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-16 17:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

ARM汇编指令之伪指令介绍。

ARM汇编伪指令

       在ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。     

     在ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。

* a! R( J* D/ t5 g7 F8 ~

一、符号定义(Symbol Definition)伪指令   

符号定义伪指令用于定义ARM 汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。   

常见的符号定义伪指令有如下几种:    $ R, x- R/ i; a7 V8 b
    — 用于定义全局变量的GBLA 、GBLL 和GBLS 。   
7 }/ B6 Y: q0 k1 u' \: d    — 用于定义局部变量的LCLA 、LCLL 和LCLS 。    $ ]; Y& h' e6 U
    — 用于对变量赋值的SETA 、SETL 、SETS 。    ) I. E8 h; O: E6 M' |  ~2 O
    — 为通用寄存器列表定义名称的RLIST 。   

1、GBLA、GBLL 和GBLS   

语法格式:   
) |$ u  W+ R- G1 t0 R& H9 V    GBLA (GBLL 或GBLS )全局变量名   
3 `" m% o  d  p7 s# e8 m0 g    GBLA 、GBLL 和GBLS 伪指令用于定义一个ARM 程序中的全局变量,并将其初始化。其中:   
- J8 z1 K- \% ]8 _6 {9 _    GBLA 伪指令用于定义一个全局的数字变量,并初始化为0 ;   
+ V5 [! B8 s4 [1 V  ?* r3 ~    GBLL 伪指令用于定义一个全局的逻辑变量,并初始化为F(假);    5 e# ~! F& B' v! N5 C
    GBLS 伪指令用于定义一个全局的字符串变量,并初始化为空;   
; O; ?1 P) p- g$ m0 s    由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。   

使用示例:   

    GBLA Test1 ;           定义一个全局的数字变量,变量名为 Test1。    5 b0 Q# v# F9 M$ H) L1 |& @& Z3 L8 s
    Test1 SETA 0xaa ;   将该变量赋值为0xaa。   
6 V- Y( S$ C: v7 ^! Z/ x    GBLL Test2 ;            定义一个全局的逻辑变量,变量名为 Test2。    - s0 g  ^" w0 H1 L3 d0 w! ?/ ~: H. q
    Test2 SETL {TRUE} ;将该变量赋值为真。    ( z5 h% I7 u/ N9 z) I$ N2 u; \
    GBLS Test3 ;             定义一个全局的字符串变量,变量名为 Test3。   
0 w& q' A6 ~! f    Test3 SETS “Testing” ;将该变量赋值为"Testing”。  

1 q1 y7 w- W  R" c% h/ b  c  T

2、LCLA、LCLL 和LCLS   

语法格式:    5 z  S& o8 V1 V. Q) J
    LCLA (LCLL 或 LCLS )局部变量名   
1 d* J" m. P+ T3 `6 h2 [  U    LCLA 、LCLL 和LCLS 伪指令用于定义一个ARM 程序中的局部变量,并将其初始化。其中:   
" a+ F5 O+ m( g5 m* |    LCLA伪指令用于定义一个局部的数字变量,并初始化为0 ;    & o" f0 N; f' g( k+ ~9 m
    LCLL伪指令用于定义一个局部的逻辑变量,并初始化为F(假);   
, }9 ^$ V# D/ }9 i. W% i    LCLS伪指令用于定义一个局部的字符串变量,并初始化为空;   
' I7 t1 H$ G) u3 r    以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。   

使用示例:   

    LCLA Test4 ;            声明一个局部的数字变 量,变量名为Test4。  
/ j; X- z$ A3 w+ T, h8 K4 v    Test3 SETA 0xaa ;   将该变量赋值为0xaa。   
. A; P+ A4 S: y( P! @& e: H   LCLL Test5 ;             声明一个局部的逻辑变 量,变量名为Test5。    3 S! E) g! F5 S1 }, r& ?. R
    Test4 SETL {TRUE} ;将该变量赋值为真。    + Y" B1 w6 ^. M% v
    LCLS Test6 ;             定义一个局部的字 符串变量,变量名为Test6。    5 E& M( V. o) I0 j9 P! Y
    Test6 SETS “Testing” ;将该变量赋值为 "Testing”。   


# J6 Q  Y" M; h+ d% @. V0 E8 ~" @) z

3、SETA、SETL 和SETS   

语法格式:    " @+ q5 V  P8 I& {3 l, K- J
    变量名 SETA (SETL 或 SETS )表达式      T3 S! u3 n3 s, X
    伪指令 SETA 、SETL 、SETS 用于给一个已经定义的全局变量或局部变量赋值。    5 s4 f; t9 r. Y! Q6 i
    SETA伪指令用于给一个数学变量赋值;    7 _+ M. F' }2 f  a
    SETL伪指令用于给一个逻辑变量赋值;    : N: s8 `& K* J1 ]: y
    SETS伪指令用于给一个字符串变量赋值;   
" Z* Z+ f& S0 ]8 s+ m" ?0 C    其中,变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。   

使用示例:    $ L/ ^: U% X" i# ]" @4 E- w
    LCLA Test3 ;             声明一个局部的数字变量,变量名为 Test3。   
" h% P4 \& S" e! O% m& M- {    Test3 SETA 0xaa ;    将该变量赋值为0xaa。   
" Z. L8 p( K4 x# t& h    LCLL Test4 ;             声明一个局部的逻辑变量,变量名为 Test4。    $ T' @2 n3 @* R) _6 v: j+ T. |  C
    Test4 SETL {TRUE} ;将该变量赋值为真。   

! E$ Q, ]$ [0 t; ?# K5 I$ {( D  f

4 、RLIST   

语法格式:    ( O3 x9 v% C2 p, ^: X
    名称 RLIST { 寄存器列表 }   

RLIST伪指令可用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在ARM 指令 LDM/STM中使用。在LDM/STM指令中,列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。   

使用示例:    & T: V& @; l* ~- ~' E8 d
    RegList RLIST {R0-R5 ,R8 ,R10} ;将寄存器列表名称定义为 RegList ,可在ARM指令LDM/STM中通过该名称访问寄存器列表。  

& u0 d- I/ u0 J4 G$ d8 B

二、数据定义(Data Definition)伪指令   

游客,如果您要查看本帖隐藏内容请回复


% L% H' v$ ^* v5 }% q" b, D8 U* o

6 K2 U& \9 H  u) W( v

该用户从未签到

2#
发表于 2019-9-17 20:59 | 只看该作者
谢谢楼主分享的实用的ARM 汇编指令集。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 00:14 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表