assembly - ARM pc寄存器并不总是当前指令的地址加4(Thumb状态)

assembly - ARM pc寄存器并不总是当前指令的地址加4(Thumb状态)

根据ARM IC。

在拇指状态:

对于 B、BL、CBNZ 和 CBZ 指令,PC 的值是当前指令的地址加上 4 个字节。

对于所有其他使用标签的指令,PC 的值是当前指令的地址加上 4 个字节。

在调试程序时,我发现 pc 并不总是当前指令的地址加上 4 个字节,例如下面的指令(2)。

有人可以给出一些解释吗?谢谢。

0x2a003118 ldr r3, [pc, #120] ; (0x2a003194 ) <---(1)

0x2a00311a ldr r3, [r4, r3]

0x2a00311c mov r0, r3

0x2a00311e ldr r3, [pc, #136] ; (0x2a0031a8 ) <---(2)

0x2a003120 add r3, pc <---(3)

0x2a003122 mov r1, r3

0x2a003124 bl 0x2a00338c

0x2a003128 mov r3, r0

0x2a00312a mov r0, r3

0x2a00312c ldr r3, [pc, #108] ; (0x2a00319c ) <---(4)

==================================================== ==========

(1).ldr r3, [pc, #120] ; (0x2a003194 )

p/x $pc+4+120

$1 = 0x2a003194

; $pc+4 ,Correct

(2).ldr r3, [pc, #136] ; (0x2a0031a8 )

p/x $pc+4+136

$2 = 0x2a0031aa

; Wrong! it should be 0x2a0031a8($pc+2) instead of 0x2a0031aa($pc+4).

(3).add r3, pc

p/x $r3+$pc+4

$3 = 0x2a025c04

; $pc+4 ,Correct

(4).ldr r3, [pc, #108] ; (0x2a00319c )

p/x $pc+4+108

$4 = 0x2a00319c

; $pc+4 ,Correct

相关推荐

手机上怎么做公章电子版?如何利用手机制作电子公章?
如何在健身房里快速瘦腿
365bet娱乐网站

如何在健身房里快速瘦腿

📅 07-01 👁️ 3892
鼠标侧键怎么设置、鼠标侧键设置中心
3654687

鼠标侧键怎么设置、鼠标侧键设置中心

📅 07-19 👁️ 7275
家长反馈意见 10
365bet娱乐网站

家长反馈意见 10

📅 08-03 👁️ 3149