首页 > 其他分享 >嵌入式:ARM符号定义伪操作详解

嵌入式:ARM符号定义伪操作详解

时间:2022-12-28 11:33:49浏览次数:36  
标签:定义 伪指令 嵌入式 详解 操作 赋值 ARM 变量

ARM汇编语言的伪操作、宏指令与伪指令

ARM汇编语言源程序中语句一般由指令、伪操作、宏指令和伪指令组成
伪操作是ARM汇编语言程序里的一些特殊指令助记符,它的作用主要是为完成汇编程序做各种准备工作,在源程序进行汇编时由汇编程序处理,而不是在计算机运行期间由机器执行。

宏指令是一段独立的程序代码,可以插在源程序中,它通过伪操作来定义。宏在被使用之前必须提前定义好,宏之间可以互相调用,也可以自己递归调用。通过直接书写宏名来使用宏,并根据宏指令的格式设置相应的输入参数。宏定义本身不会产生代码,只是在调用它时把宏体插入到源程序中。

伪指令也是ARM汇编语言程序里的特殊指令助记符,也不在处理器运行期间由机器执行,它们在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正指令操作。

两种编译模式的集成开发环境IDE介绍

ADS/SDT IDE开发环境

它由ARM公司开发,使用了CodeWarrior公司的编译器;

集成了GNU开发工具的IDE开发环境

它由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。

ADS编译环境下的ARM伪操作和宏指令

ADS编译环境下的伪操作有如下几种:

  • 符号定义(Symbol Definition)伪操作
  • 数据定义(Data Definition)伪操作
  • 汇编控制(Assembly Control)伪操作
  • 框架描述(Frame Description)伪操作
  • 信息报告(Reporting)伪操作
  • 其他(Miscellaneous)伪操作

符号定义伪操作

  1. 全局变量定义伪指令GBLA、GBLL、GBLS
  2. 局部变量定义伪指令LCLA、LCLL、LCLS
  3. 变量赋值伪指令SETA、SETL、SETS
  4. 寄存器列表定义伪指令RLIST

GBLA,GBLL及GBLS

GBLA,GBLL及GBLS伪操作用于声明一个ARM程序中的全局变量并在默认情况下将其初始化。

GBLA伪操作声明一个全局的算术变量,并将其初始化成0

GBLL伪操作声明一个全局的逻辑变量,并将其初始化成{FALSE}

GBLS伪操作声明一个全局的字符串变量,并将其初始化成空串“”

语法格式
<GBLX>  Variable

​ 其中:
​<GBLX>​​是GBLA,GBLL或GBLS 3种伪操作之一;Variable是全局变量的名称。在其作用范围内必须惟一,即同一个变量名只能在作用范围内出现一次。

使用示例
GBLA  A1  ;定义一个全局的数值变量,变量名为A1
A1 SETA 0x0F ;将该变量赋值为0x0F

GBLL A2 ;定义一个全局的逻辑变量,变量名为A2
A2 SETL {TRUE} ;将该变量赋值为真

GBLS A3 ;定义一个全局的字符串变量,变量名为A3
A3 SETS “Testing” ;将该变量赋值为“Testing”

LCLA,LCLL及LCLS

LCLA,LCLL及LCLS伪操作用于声明一个ARM程序中的局部变量,并在默认情况下将其初始化。

LCLA伪操作声明一个局部的算术变量,并将其初始化成0。

LCLL伪操作声明一个局部的逻辑变量,并将其初始化成{FALSE}

LCLS伪操作声明一个局部的串变量,并将其初始化成空串“”

语法格式
<LCLX>  Variable

其中:

​<LCLX>​​是LCLA,LCLL或LCLS 3种伪操作之一;Variable是局部变量的名称。在其作用范围内必须唯一,即同一个变量名只能在作用范围内出现一次。

使用示例
LCLA   Test4 ;声明一个局部的数值变量,变量名为Test4
Test4 SETA 0xaa ;将该变量赋值为0xaa

LCLL Test5 ;声明一个局部的逻辑变量,变量名为Test5
Test5 SETL {TRUE} ;将该变量赋值为真

LCLS Test6 ;定义一个局部的字符串变量,变量名为Test6
Test6 SETS “Testing” ;将该变量赋值为“Testing”

SETA,SETL及SETS

SETA,SETL及SETS伪操作用于给一个ARM程序中的全局或局部变量赋值。

SETA伪操作给一个全局或局部算术变量赋值

SETL伪操作给一个全局或局部逻辑变量赋值

SETS伪操作给一个全局或局部字符串变量赋值

语法格式
<SETX>  Variable  expr

其中:

​<SETX>​​是SETA,SETL或SETS 3种伪操作之一;Variable是使用GBLA,GBLL,GBLS,LCLA,LCLL或LCLS定义的变量的名称,在其作用范围内必须唯一;expr为表达式,即赋予变量的值。

寄存器列表定义伪指令RLIST

格式:名称 RLIST {通用寄存器列表}

功能:用于对一个通用寄存器列表定义名称,

reglist RLIST {R0-R3, R8, R12}

STMFD SP!, reglist
; 将列表reglist存储到堆栈中

LDMIA R4, reglist
; 将列表reglist加载到R4中

参考文献:

孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017.

标签:定义,伪指令,嵌入式,详解,操作,赋值,ARM,变量
From: https://blog.51cto.com/u_15736437/5973996

相关文章

  • Java千问11:instanceof运算符用法详解
    ​Java语言当中提供了一个叫做instanceof的运算符。很多教科书上对这个运算符的介绍并不详细,只是简单的说这个运算符是用来判断某个对象是不是属于某种类型。我们现在就用一......
  • vue环境配置文件详解
    一.什么是配置文件1.在vue项目目录下,我们可以看到诸如package.json、.gitignore、package-lock.json等等能配置项目的结构、引用的库、运行的方式、版本控制等等的都称为......
  • 【SSM框架】MyBatis核心配置文件详解
    1.MyBatis核心配置文件之environments<!--environments:配置多个连接数据库的环境属性:default:设置默认使用的环境的id--><environmentsdefault="development"><!......
  • Go-20 Golang 中go mod 和 golang包详解
    packagemainimport( "fmt" "github.com/shopspring/decimal")//Golang中的gomod以及Golang包详解funcmain(){ /* 1.初始化项目文件夹gomodinit文件......
  • WebUI自动化必备技能-HTML和css知识详解
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试 学习w......
  • 布隆过滤器详解
    (1)https://blog.csdn.net/tongkongyu/article/details/124842847 (2)https://blog.csdn.net/qq_38571892/article/details/123503418......
  • 详解数据链路层-介质访问控制【王道计算机网络笔记】
    数据传输使用的两种链路点对点链路:两个相邻结点通过一个链路相连,没有第三者。应用:PPP协议,常用于广域网。例如打电话广播式链路:所有主机共享通信介质。应用:早期总线以太......
  • LaTeX简易教程 | 04 一篇文章讲通LaTeX表格格式与常用表格类型详解
    导读LaTeX是我们科研过程中,非常重要的编写论文的工具。掌握LaTeX的基本用法,是科研人员必备的技能。学LaTeX的过程中,遇到很多坑,总结一下,写一份简易教程,方便大家入门LaTeX并能......
  • LaTeX简易教程 | 02 LaTeX模板下载与结构详解
    导读LaTeX是我们科研过程中,非常重要的编写论文的工具。掌握LaTeX的基本用法,是科研人员必备的技能。学LaTeX的过程中,遇到很多坑,总结一下,写一份简易教程,方便大家入门LaTeX并能......
  • 信息学集训 | 12 排序算法分析与sort函数详解
    导读信息学能够有助于孩子未来工作发展,提升孩子的综合能力。前面两节课,我们学了排序算法,这一节课我们来分析一下排序算法,并了解一下sort函数的用法吧!​1排序算法回顾前面......