ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍

本文详细介绍了ARM汇编中的伪指令,包括符号定义、数据定义、汇编控制和其他常用伪指令,旨在帮助读者理解汇编代码中辅助指令的作用和用法,如GBLA、SETA、MACRO等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要学习一个东西首先要把概念搞清楚,下面只是自己的一些关于汇编的理解。


可执行文件中的01码是机器码,机器码不等于汇编码,虽然机器码可以很容易翻译成汇编码。

汇编码中包含很多汇编指令、伪指令和宏指令等,这些是不可以直接在机器上运行的。

机器指令是ARM指令集和Thumb指令集这些arm硬件支持的指令集组成的。


汇编码中的伪指令和宏指令这些都是汇编语言这个级别的指令,在汇编文件编译的时候汇编编译器as会去处理这些指令,在编译期间也会对宏进行展开,类似于gcc编译的时候对C代码中的宏展开一样。个人感觉这两类指令都是为编写汇编代码提供一些辅助作用,其次对编译器编译汇编代码也会提供一些辅助作用。

下面转发一篇关于ARM伪指令的文章,原帖

ARM汇编伪指令介绍.

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

    符号定义( Symbol Definition )伪指令    
    符号定义伪指令用于定义 ARM 汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。    
    常见的符号定义伪指令有如下几种:    
    — 用于定义全局变量的 GBLA 、 GBLL 和 GBLS 。    
    — 用于定义局部变量的 LCLA 、 LCLL 和 LCLS 。    
    — 用于对变量赋值的 SETA 、 SETL 、 SETS 。    
    — 为通用寄存器列表定义名称的 RLIST 。    
    1、 GBLA、GBLL 和GBLS    
    语法格式:    
    GBLA ( GBLL 或 GBLS ) 全局变量名    
    GBLA 、 GBLL 和 GBLS 伪指令用于定义一个 ARM 程序中的全局变量,并将其初始化。其中:    
    GBLA 伪指令用于定义一个全局的数字变量,并初始化为 0 ;    
    GBLL 伪指令用于定义一个全局的逻辑变量,并初始化为 F (假);    
    GBLS 伪指令用于定义一个全局的字符串变量,并初始化为空;    
    由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。    
    使用示例:    
    GBLA Test1 ;定义一个全局的数字变量,变量名为 Test1    
    Test1 SETA 0xaa ;将该变量赋值为 0xaa    
    GBLL Test2 ;定义一个全局的逻辑变量,变量名为 Test2    
    Test2 SETL {TRUE} ;将该变量赋值为真    
    GBLS Test3 ;定义一个全局的字符串变量,变量名为 Test3    
    Test3 SETS “ Testing ” ;将该变量赋值为 “ Testing ”  
  
    2、 LCLA、LCLL 和LCLS    
    语法格式:    
    LCLA ( LCLL 或 LCLS ) 局部变量名    
    LCLA 、 LCLL 和 LCLS 伪指令用于定义一个 ARM 程序中的局部变量,并将其初始化。其中:    
    LCLA 伪指令用于定义一个局部的数字变量,并初始化为 0 ;    
    LCLL 伪指令用于定义一个局部的逻辑变量,并初始化为 F (假);    
    LCLS 伪指令用于定义一个局部的字符串变量,并初始化为空;    
    以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。    
    使用示例:    
    LCLA Test4 ;声明一个局部的数字变量,变量名为 Test4    
    Test3 SETA 0xaa ;将该变量赋值为 0xaa    
    LCLL Test5 ;声明一个局部的逻辑变量,变量名为 Test5    
    Test4 SETL {TRUE} ;将该变量赋值为真    
    LCLS Test6 ;定义一个局部的字符串变量,变量名为 Test6    
    Test6 SETS “ Testing ” ;将该变量赋值为 “ Testing ”   

    3、 SETA、SETL 和SETS    
    语法格式:    
    变量名 SETA ( SETL 或 SETS ) 表达式    
    伪指令 SETA 、 SETL 、 SETS 用于给一个已经定义的全局变量或局部变量赋值。    
    SETA 伪指令用于给一个数学变量赋值;    
    SETL 伪指令用于给一个逻辑变量赋值;    
    SETS 伪指令用于给一个字符串变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值