ARM的伪指令

ARM汇编中有伪指令和伪操作,两者的区别就是:

  • 伪指令在汇编器汇编源程序的时候会利用一些指令替代该指令最终被执行,来达到目的。
  • 伪操作只在汇编器汇编程序的时候有作用,只是为了帮助程序的执行,并不会被执行。

常用的伪指令:

ldr:

ldr作为伪指令的时候和实际指令有所不同,格式为ldr r0,=立即数/标号;可以看出伪指令比实际指令多了一个=号,作用是将立即数或者标号的值直接赋值给r0。

在汇编器汇编源程序时,如果立即数比较简单,那么可能会用MOV指令代替伪指令;如果立即数比较复杂,那么该指令会被替换成ldr r0,[PC, #offset]的形式。

ldr伪指令的存在就是弥补了MOV指令的不足,MOV指令后面的立即数是有限制的。而使用ldr伪指令立即数则没有限制,汇编器会根据立即数的不同替换成对应的指令。

adr:

用来将某个地址赋值给通用寄存器。格式为adr r0,label;和ldr不同的是,adr在汇编后会被一条add或sub指令代替,如果不能被一条指令代替,则会出错。

在源程序经过汇编后,adr伪指令可能会被替代成add/sub  r0,PC, #offset,由于立即数有限制,所以可能并不是所有的伪指令都可以用一条指令代替。而且这种跳转范围比较小。

时间: 2024-10-19 10:24:49

ARM的伪指令的相关文章

ARM LDR伪指令用法详解

LDR伪指令 10.45 LDR pseudo-instruction   功能:把一个32位立即数或一个32位的内存地址加载到一个寄存器中. 注意:这里描述的是LDR伪指令,而不是LDR指令   语法:               LDR{cond}{.W} Rt, =expr LDR{cond}{.W} Rt, =label_expr *   cond是一个可选的条件码 *  .W是可选的指令宽度说明符 *   Rt是要加载的寄存器 *   expr是一个数字表达式 *   label_ex

ARM汇编伪指令介绍

在ARM处理器汇编语言程序设计里,有一些特殊的指令助记符.这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊的指令助记符为伪指令,它们所完成的操作称为伪操作. 伪指令在源程序中的作用是为完成汇编程序做各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成了.在ARM处理器的汇编程序中,大体有如下几种伪指令:符号定义伪指令.数据定义伪指令.汇编控制伪指令.宏指令及其他伪指令. 伪操作符可以分为以下几类. 1)数据定义伪操作符 数据定义伪操作符主要包括LT

ARM汇编伪指令

伪指令的意义 伪指令不是指令,伪指令和指令的根本区别是经过编译后会不会生成机器码. 伪指令的意义在于指导编译过程. 伪指令是和具体的编译器相关的,我们使用gnu工具链,因此学习gnu环境下的汇编伪指令. gnu汇编中的一些符号 @ 用来做注释.可以在行首也可以在代码后面同一行直接跟,和C语言中//类似 # 做注释,一般放在行首,表示这一行都是注释而不是代码. :以冒号结尾的是标号 . 点号在gnu汇编中表示当前指令的地址 # 立即数前面要加#或$,表示这是个立即数 常用gnu伪指令 .globa

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

要学习一个东西首先要把概念搞清楚,下面只是自己的一些关于汇编的理解. 可执行文件中的01码是机器码,机器码不等于汇编码,虽然机器码可以很容易翻译成汇编码. 汇编码中包含很多汇编指令.伪指令和宏指令等,这些是不可以直接在机器上运行的. 机器指令是ARM指令集和Thumb指令集这些arm硬件支持的指令集组成的. 汇编码中的伪指令和宏指令这些都是汇编语言这个级别的指令,在汇编文件编译的时候汇编编译器as会去处理这些指令,在编译期间也会对宏进行展开,类似于gcc编译的时候对C代码中的宏展开一样.个人感觉

arm指令系统

arm常用指令主要包括以下六类: 1.数据处理指令:完成寄存器中数据的算术和逻辑运算操作 2.程序状态寄存器处理指令:MRS MSR 3.跳转指令:B和BL 4.load/store指令:用于寄存器和存储器之间数据传送的指令 5.异常中断指令:SWI和BKPT 6.协处理器指令:MRC MCR =------------------------------------------------------------------- 二.汇编指令的格式 arm指令编码格式: 如:ADDEQS R0,

ARM汇编指令

ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令. 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转.Ⅰ.使用专门的跳转指令: Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用

ARM指令教程

ARM指令教程 ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通用寄存器来完成.因此代码中大量看到LDR,STR指令来传送值. l         ARM汇编语句中.当前语句很多时候要隐含的使用上一句的执行结果.而且上一句的执行结果,是放在CPSR寄存器里,(比如说进位,为0,为负…) CMP R0,R1 BNE NoMatch 比如上一句,BN

ARM汇编指令集

ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令. 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转.Ⅰ.使用专门的跳转指令: Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用

常用ARM汇编指令

一面学习,一面总结,一面记录. 下面是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令. 一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转. Ⅰ.使用专门的跳转指令: Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用M