当前位置:网站首页 > R语言数据分析 > 正文

ldr伪指令的用法(arm ldr伪指令)



伪指令的本质,是多条指令集合而成的一段代码;

写代码的时候难免用会经常用到一些固定的功能,比如if else之类的;如果单纯的使用汇编指令,每次都要先比较然后再根据CPSR的内容进行BL;这样就很繁复;

所以伪指令应运而生,它从形式上来看像是宏定义;从功能上而言,是帮助我们简化某些固定操作的指令;

GNU有一套伪指令,MDK也有一套伪指令;这两台套伪指令相似,实际上最常用的是GNU风格伪指令,MDK风格的伪指令大致看看就行;(注意,GNU风格的编译器不能编译MDK风格的代码,反之亦然)

注意:伪指令要遵循所谓的ADS Style;

ADS风格:顶行写 或者使用tab缩进

什么时候顶行?诸如EQU,SET这类 使用时第一个字段不是伪指令,一定要顶行写

AREA

CODE32/CODE16

ENTRY

表示程序的入口点;就好像C语言中的main函数

END

表示结尾

EQU

EXPORT与IMPORT与EXTERN

EXPORT:将标号声明为全局标号,本质上和.global功能一样

IMPORT:是静态引用,告知编译器,会用到其他源文件中的定义;通过这个指令可以实现混合编程(例如可以引入C语言的函数);同时静态引用代表着只要使用IMPORT声明引入,无论后续是否调用,被引入的定义均会被加入符号表中;

EXTERN:是动态引用,如果声名了EXTERN但是后续没有引用,那么编译器就不会把引入的标签加入符号表;

GET

相当于include

RN

为寄存器定义别名

name RN Rn; 将寄存器Rn取名为name /*同时要注意,类似于EQU,这个命令也应当顶头写*/

-------分割线-------

为了让汇编用起来更加方便,汇编也提供了类似于高级语言的定义,条件分支等伪指令

定义变量,赋值

汇编中使用伪指令可以定义:数字变量,逻辑变量,字符串变量;

也可以使用伪指令对变量进行赋值

那么,局部和全局,他们的生效范围具体是什么?这两类变量存在哪里?

全局:全局变量的默认范围是整个.S文件,不过可以用EXPORT(或者.global)将其扩展到整个项目

局部:局部变量的生效范围是在一个宏定义内;

无论是局部变量还是全局变量,他们都是存在内存中的,并不是存在寄存器里;

全局变量存在数据段中;局部变量存在代码段中;(这一点和C语言是一样的)

为寄存器列表定义别名RLIST

$符号

$符号 的用法类似于 SHELL中的$符号 用法

运算符伪指令

+ ;加法 -  ;减法 *  ;乘法 /  ;触发 =  ;等于 >  ;大于 <  ;小于 >=  ;大于等于 <=  ;小于等于 /=  ;不等于 <> ;不等于 ROL ;循环左移 ROR ;循环右移 SHL ;左移 SHR ;右移 AND ;按位与 OR ;按位或 NOT ;按位非 EOR ;按位异或 LAND ;逻辑与 LOR  ;逻辑或 LNOT ;逻辑非 LEOR ;逻辑异或

寄存器伪指令

LDR:load date to register

ADR:

ADRL:

ADRL ;中范围寻址到寄存器

DCB:data control bytes

DCB可以用"="替代

DCW:data control half word注意:以半字为单位

DCD:以字为单位

SPACE

MAP与FIELD

这两个指令可以用于定义结构体

MAP用于定义一张结构化内存表的首地址(MAP可以用 "^" 替代)

FIELD用于定义结构化的内存表的数据域(FIELD可以用 "#" 替代)

控制语句IF ELSE

循环语句WHILE WEND

下一张看看GNU风格的语法

到此这篇ldr伪指令的用法(arm ldr伪指令)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • bert预训练模型(bert预训练模型可以直接用吗)2025-04-12 21:45:08
  • aurocean旗舰店(auz旗舰店)2025-04-12 21:45:08
  • spring 教程(spring教程 w3cschool)2025-04-12 21:45:08
  • rknn模型(rknn模型介绍)2025-04-12 21:45:08
  • zipsigner签名教程(zip sign)2025-04-12 21:45:08
  • archwing模块(archwing模块在哪)2025-04-12 21:45:08
  • yarn 打包命令(yarn build命令)2025-04-12 21:45:08
  • chrony 同步(chrony同步间隔怎么设置)2025-04-12 21:45:08
  • oracle 代码(oracle代码)2025-04-12 21:45:08
  • druid 未授权访问(druid未授权访问攻击)2025-04-12 21:45:08
  • 全屏图片