ldr - ShenYj/ShenYj.github.io GitHub Wiki
从内存中装载(读取)数据
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 中。
- 有
在 Xcode 中查看汇编代码可以发现,当右边立即数是负数时,对应的是 ldur指令,如果立即数是正数,对应的是 ldr指令