帮助 LDR、LDRD 和 STR 指令

逆向工程 部件 手臂
2021-06-18 18:29:54

皮质™-M3设备普通用户指南解释该指令LDRD R8, R9, [R3, #0x20]为“从一个字中的8个字节中R3上述地址加载R8,和从单词9个字节中R3上面的地址加载R9”。我想问一下为什么0x20等于8个字节而不是32个字节?

该指南将指令解释LDRNE R2, [R5, #960]!为“从 R5 中地址上方 960 字节的字中(有条件地)加载 R2,并将 R5 增加 960”。R2 的值或地址是否更新?R5 的值或地址是否递增?

该指南将指令解释STRH R3, [R4], #4为“将 R3 作为半字数据存储到 R4 中的地址中,然后将 R4 增加 4”。R4 的值或地址是否递增?

1个回答

LDRD R8, R9, [R3, #0x20]- 我猜他们打算写 8 个字(其中一个字长 4 个字节)。9 个字(而不是字节)也是如此

LDRNE R2, [R5, #960]! - 将 960 添加到 R5 中包含的地址,然后将结果地址中包含的值(4 个字节)加载到 R2 中。

加载后,先前访问的地址将存储回 R5。

例如:让 R5=0x10000000, *(unsigned int)(R5+960)=0x12345678 那么指令执行后 R5=0x100003C0 (0x10000000+960), R2=0x12345678

STRH R3, [R4], #4 - R4 的值增加。

例如:让 R3=0x1234, R4=0x10000000

然后在指令执行后

*(unsigned short)0x10000000=0x1234(即0x10000000处的半字值为0x1234)且R4=0x10000004