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的数据,效率提高了一倍。