美文网首页
004.ARM指令之LDR

004.ARM指令之LDR

作者: 嵌入式大玩家 | 来源:发表于2017-11-25 11:35 被阅读0次

LDR指令的格式:

LDR{条件} 目的寄存器 <存储器地址>
作用:将 存储器地址 所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。
LDR指令的寻址方式比较灵活,实例如下:
LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,然后R1=R1+8。
LDR R0,[R1],#8 ;将存储器地址为R1的字数据读入寄存器R0,并将R1+8的值存入R1。
LDR R0,[R1,R2]! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将R1+R2的值存入R1。
LDR R0,[R1,LSL #3] ;将存储器地址为R18的字数据读入寄存器R0。
LDR R0,[R1,R2,LSL #2] ;将存储器地址为R1+R2
4的字数据读入寄存器R0。
LDR R0,[R1,,R2,LSL #2]! ;将存储器地址为R1+R24的字数据读入寄存器R0,并将R1+R24的值存入R1。
LDR R0,[R1],R2,LSL #2 ;将存储器地址为R1的字数据读入寄存器R0,并将R1+R2*4的值存入R1。
LDR R0,Label ;Label为程序标号,Label必须是当前指令的-4~4KB范围内。

要注意的是
LDR Rd,[Rn],#0x04 ;这里Rd不允许是R15。

另外LDRB 的指令格式与LDR相似,只不过它是将存储器地址中的8位(1个字节)读到目的寄存器中。
LDRH的指令格式也与LDR相似,它是将内存中的16位(半字)读到目的寄存器中。

LDR R0,=0xff
这里的LDR不是arm指令,而是伪指令。这个时候与MOVE很相似,只不过MOV指令后的立即数是有限制的。这个立即数必须是0X00-0XFF范围内的数经过偶数次右移得到的数,所以MOV用起来比较麻烦,因为有些数不那么容易看出来是否合法。

LDR R,label 和 LDR R,=label的区别

LDR 是ARM中的指令,也是伪指令。
当用 LDR r, =imd // r 为寄存器, imd为立即数
LDR 是一条伪指令。编译器会根据 立即数的大小,决定用 ldr 指令或者是mov或mvn指令。
当imd能用mov或者mvn操作时,就将它翻译成一条mov或mvn指令。当imd大于mov或mvn能够操作的数时,编译器会将imd存在一个内存单元中,然后再用一条ldr指令加载这个内存单元的的值到寄存器中。
LDR r, label 和 LDR r, =label的区别:
LDR r, =label 会把label表示的值加载到寄存器中,而LDR r, label会把label当做地址,把label指向的地址中的值加载到寄存器中。
譬如 label的值是 0x8000, LDR r, =label会将 0x8000加载到寄存器中,而LDR r, label则会将内存0x8000处的值加载到寄存器中。

相关文章

  • 004.ARM指令之LDR

    LDR指令的格式: LDR{条件} 目的寄存器 <存储器地址>作用:将 存储器地址 所指地址处连续的4...

  • 3-伪指令_FIQ_IRQ_乘法

    伪指令:编译器识别的指令。 ldr伪指令 ldr r0,=0x12345678 ldr指令 ldr r0,[r0...

  • ARM汇编之栈

    创建进程的时候,会分配内存作为栈。实际栈指令(push,pop)是其他指令的别名,实际指令是STR、LDR或者其延...

  • ARM汇编之加载地址到寄存器

    有这几种方式可以加载地址到寄存器: 使用ADR汇编指令 使用ADRL伪指令 使用MOV32伪指令 使用LDR Rd...

  • 嵌入式知识Q&A

    1.请写出汇编指令要ldr的三种功能。 1)把立即数放入rd寄存器 。注意立即数没限制, ldr不能用于寄存器给寄...

  • 驱动知识总结Q&A:

    1.请写出汇编指令要ldr的三种功能。 1)把立即数放入rd寄存器 。注意立即数没限制, ldr不能用于寄存器给寄...

  • iOS逆向4基础篇--汇编指令

    注意:ARM64开始,取消32位的 LDM,STM,PUSH,POP指令! 取而代之的是ldr\ldp str\...

  • 伪指令LDR和ADR的分析

    Q:为什么要进行分析? A:伪指令在arm汇编中占有非常重要的地位,通常可以帮助我们在进行汇编编程的时候简化编程难...

  • 16 ARM汇编指令4 ldm/stm与栈的处理

    为什么需要多寄存器访问指令 ldr/str周期只能访问4字节内容,如果需要批量读取、写入内存时太慢,解决方案是st...

  • Android 逆向中会用到的ARM

    PC 是指令指针 R15LR是用于保存函数调用的返回地址 R14SP是堆栈指针 R13 LDR 将内存中的数载入到...

网友评论

      本文标题:004.ARM指令之LDR

      本文链接:https://www.haomeiwen.com/subject/lptcbxtx.html