版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/
ARM64汇编寻址
1. 立即数寻址(Immediate Addressing)
这种方式直接将立即数作为操作数,适合小数据或常量。ARM64的立即数在指令中直接编码。
MOV X0, #10 ; 将常数10加载到寄存器X0中
2. 寄存器间接寻址(Register Indirect Addressing)
使用寄存器中的地址作为内存地址。适合基于寄存器值进行偏移的简单访问方式。
LDR X1, [X0] ; 将地址X0指向的内存内容加载到X1中
3. 偏移寻址(Offset Addressing)
在基地址寄存器的基础上添加一个偏移量来确定目标地址,偏移量可以是立即数或寄存器值。
LDR X1, [X0, #8] ; 从地址X0 + 8的位置加载数据到X1中
4. 预索引寻址(Pre-indexed Addressing)
使用基地址加上偏移量来访问内存,访问完成后,将偏移量更新到基地址寄存器中。
LDR X1, [X0, #8]! ; 从地址X0 + 8加载数据到X1中,同时更新X0为X0 + 8
5. 后索引寻址(Post-indexed Addressing)
先使用基地址来访问内存,再将偏移量加到基地址寄存器中。这样偏移的效果在读取数据后才生效。
LDR X1, [X0], #8 ; 先从X0指向的地址加载数据到X1中,随后X0增加8