arm64 汇编学习之ldr/str类指令学习总结

arm 汇编之ldr/str类指令学习总结

最近跟着笨叔叔的奔跑吧第三季的学习视频重新学习了一下ARM64 ldr/str类指令的相关汇编操作,查阅arm64相关的参考手册,对照讲解把对应的汇编重新操作了一边,通过gdb跟踪查看数据的变化,收获还是挺大的,下面是我在学习ldr/str的相关总结,此总结仅仅是我学习的一些理解。

1,加载/存储指令的格式

(1), ldr Xd, <存储器地址>

ldr Xd, #immediate
ldr Xd, literal
ldr Xd, Rs

(2), strr Xd, <存储器地址>

str Xd, #immediate
str Xd, Xs

2,加载/存储指令的地址偏移模式

ldr xd, [Xs, #offset]
此汇编指令的含义为:讲Xs寄存器的值加上offset之后的值作为内存地址,讲该内存地址的数据取出,放入寄存器Xd中。

3,加载/存储指令的变基模式

变基模式分为前变基模式和后变基模式,两者的区别为:前变基模式先更新偏移地址,再访问内存;而后变基模式则是先去内存中的数据,再去更新偏移地址。
ldr Xd, [Xs, #immediate]! 前变基模式
ldr Xd, [Xs], #immediate 后变基模式

4,加载/存储指令的标签模式

在标签模式下,读取的是PC+offset地址便宜的内存里面的数据。
eg:
#define TEST 0x10
ldr Xd, TEST //该汇编指令是将pc+TEST的内存里面的数据放入Xd寄存器中。
ldr Xd, =TEST //该指令是将TEST标签的值存入Xd寄存器中

5,多字节的加载和储存指令ldp和stp指令

ldp和stp一条指令可以加载和存储16 Byte的数据,效率提高了一倍。

你可能感兴趣的:(linux嵌入式开发,ldr/str类指令学习总结,ARM64汇编)