执行期间的 LDRD 硬故障
LDRD hard faulting during execution
我正在创建一个多态代码,但我对 LDRD 指令有一个问题,这让我很抓狂,我看不到它。执行时明显出现 NMI 硬故障。
我在 STM32L4A6AG 上。
问题可能出在汇编代码中,但也可能出在操作码生成上(被反汇编程序忽略?)。
数据是在 ldrd 执行之前获取的:
我的代码:
2004ffc0: 0xbff36f8f isb sy
2004ffc4: 0xbff34f8f dsb sy
2004ffc8: 0x000020b5 push {r5, lr}
2004ffca: 0xdff80c50 ldr.w r5, [pc, #12] ; 0x2004ffd8
2004ffce: 0xdfe90301 ldrd r0, r1, [pc, #12] ; 0x2004ffdc
2004ffd2: 0x0000a847 blx r5
2004ffd4: 0x000000bf nop
2004ffd6: 0x000020bd pop {r5, pc}
注册:
r0 0x0 (Hex)
r1 0x1 (Hex)
r2 0x2004ffc0 (Hex)
r3 0x2004ffbf (Hex)
r4 0xaabbccdd (Hex)
r5 0x80107e1 (Hex)
r6 0x0 (Hex)
r7 0x2004ff98 (Hex)
r8 0
r9 0
r10 0
r11 0
r12 0
sp 0x2004ff90
lr 0x80104ed (Hex)
pc 0x2004ffce
内存:
x/9wx 0x2004ffc0
0x2004ffc0: 0x8f6ff3bf 0x8f4ff3bf 0xf8dfb520 0xe9df500c
0x2004ffd0: 0x47a80103 0xbd20bf00 0x080107e1 0xeeffaabb
0x2004ffe0: 0xaabbccdd
x/18hx 0x2004ffc0
0x2004ffc0: 0xf3bf 0x8f6f 0xf3bf 0x8f4f 0xb520 0xf8df 0x500c 0xe9df
0x2004ffd0: 0x0103 0x47a8 0xbf00 0xbd20 0x07e1 0x0801 0xaabb 0xeeff
0x2004ffe0: 0xccdd 0xaabb
谢谢大家!
根据 ARM manual,具有 pc
相对寻址模式的 ldrd
指令必须在 ARMv7-M 部件上进行字对齐。如果汇编程序不处理这个问题,可能需要手动对齐:
.align
ldrd r0, r1, [pc, #12]
我正在创建一个多态代码,但我对 LDRD 指令有一个问题,这让我很抓狂,我看不到它。执行时明显出现 NMI 硬故障。 我在 STM32L4A6AG 上。 问题可能出在汇编代码中,但也可能出在操作码生成上(被反汇编程序忽略?)。
数据是在 ldrd 执行之前获取的:
我的代码:
2004ffc0: 0xbff36f8f isb sy
2004ffc4: 0xbff34f8f dsb sy
2004ffc8: 0x000020b5 push {r5, lr}
2004ffca: 0xdff80c50 ldr.w r5, [pc, #12] ; 0x2004ffd8
2004ffce: 0xdfe90301 ldrd r0, r1, [pc, #12] ; 0x2004ffdc
2004ffd2: 0x0000a847 blx r5
2004ffd4: 0x000000bf nop
2004ffd6: 0x000020bd pop {r5, pc}
注册:
r0 0x0 (Hex)
r1 0x1 (Hex)
r2 0x2004ffc0 (Hex)
r3 0x2004ffbf (Hex)
r4 0xaabbccdd (Hex)
r5 0x80107e1 (Hex)
r6 0x0 (Hex)
r7 0x2004ff98 (Hex)
r8 0
r9 0
r10 0
r11 0
r12 0
sp 0x2004ff90
lr 0x80104ed (Hex)
pc 0x2004ffce
内存:
x/9wx 0x2004ffc0
0x2004ffc0: 0x8f6ff3bf 0x8f4ff3bf 0xf8dfb520 0xe9df500c
0x2004ffd0: 0x47a80103 0xbd20bf00 0x080107e1 0xeeffaabb
0x2004ffe0: 0xaabbccdd
x/18hx 0x2004ffc0
0x2004ffc0: 0xf3bf 0x8f6f 0xf3bf 0x8f4f 0xb520 0xf8df 0x500c 0xe9df
0x2004ffd0: 0x0103 0x47a8 0xbf00 0xbd20 0x07e1 0x0801 0xaabb 0xeeff
0x2004ffe0: 0xccdd 0xaabb
谢谢大家!
根据 ARM manual,具有 pc
相对寻址模式的 ldrd
指令必须在 ARMv7-M 部件上进行字对齐。如果汇编程序不处理这个问题,可能需要手动对齐:
.align
ldrd r0, r1, [pc, #12]