-
-
[原创]【ARM】LDR STR指令的N种寻址姿势(上)
-
发表于:
2017-10-3 10:54
7820
-
[原创]【ARM】LDR STR指令的N种寻址姿势(上)
指令集版本:arm v5te 32bit
常见的LDR&STR指令分为两大类:
(1)操作32bit字数据 或 8bit无符号字节数据的。
(2)操作16bit半字数据 或 8bit有符号字节数据的。
这里先只讲第一类,LDR LDRB这种。(LDR R0,[R1,#4]或LDRB R0,[R1,#4])
---------------------------------------------------------------------------------------------------------------------------
1 指令格式:
LDR {cond} {B} {T} <Rd>,{address_mode}
LDR {条件码} {字/无符号字节} {是否有 ! } <目标寄存器>,{内存地址}
2 指令的
address_mode由两部分组成
基址 土 偏移
(1)基址就是寄存器Rn
(2)这个偏移则有多种形式,下面就单独拿出来说。
(直接是立即数、或者存在一个寄存器里、或者寄存器再配合一个移位操作计算出来的)
3 地址偏移量分为三种形式
(1)立即数
LDR R0, [R1, #4]
(2)寄存器
LDR R0, [R1, R2]
(3)寄存器及移位常数
LDR R0, [R1, R2, LSL #2]
BTW:地址偏移量形式相同的指令,其机器码数据结构也相同。
4 最后,还要考虑个地址计算方法的事,分三种方法
(1)偏移量方法
LDR R0, [R1, #4]
(2)事先更新方法(事先:先计算偏移,访问内存,最后更新基址寄存器)
LDR R0, [R1, # 4] !
(3)事后更新方法(事后:先访问内存,然后计算新基址寄存器)
LDR R0, [R1], # 4
---------------------------------------------------------------------------------------------------------------------------
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)