ldr - ShenYj/ShenYj.github.io GitHub Wiki

ldr指令

从内存中装载(读取)数据

ldr(load register)指令,将数据从内存中读出来,存到寄存器中

格式: LDR{条件} 目的寄存器 <存储器地址>

第一操作数是目标寄存器,第二操作数是内存地址

  • 内存的表示方式有:立即数寄存器,或寄存器加偏移
    • 寄存器,加个[],如[r1], 偏移的话[r1,r2], 或者 [r1,#4] , [r1,LSL #4]等,都差不多,就是把寄存器里的数当成地址。

找到存储器的地址,将值读取后传入目的寄存器;取值范围由目的寄存器决定
如:x通常是64bit(8个字节),w是32bit(4个字节)

这里会涉及到 ARM汇编的寻址方式 处理器的寻址方式

  • 基址变址寻址

    • [] 一般表示是取值的意思,[R2] 表示取出R2所存的内存地址比如是 0x10000 所对应的值比如是66。
    • LDR R0 [R1,#0x4] : 寄存器 R1 的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器 R0 中。
    • LDR R0,[R1,#0x4]!: 将寄存器 R1 的内容加上 4 形成操作数的有效地址,从而取得操作数存入寄 存器 R0 中,然后,R1 的内容自增 4 个字节,即会改变R0寄存器的值,也会改变R1的值。
    • LDR R0,[R1] ,#0x4 : 以寄存器 R1 的内容作为操作数的有效地址,从而取得操作数存入寄存器 R0 中,然后,R1 的内容自增 4 个字节。
    • LDR R0,[R1,R2] : 将寄存器 R1 的内容加上寄存器 R2 的内容形成操作数的有效地址,从而取得 操作数存入寄存器 R0 中。

ldur指令

在 Xcode 中查看汇编代码可以发现,当右边立即数是负数时,对应的是 ldur指令,如果立即数是正数,对应的是 ldr指令

⚠️ **GitHub.com Fallback** ⚠️