抛出数据中止异常
Throwing data abort exception
我正在 CPULator
上调试以下代码
.global _start
_start:
MOV R4, #0x61
LDR R0, =freq
ADD R0, R4
LDR R2, [R0]
ADD R2, #1
STR R2, [R0]
_exit:
MOV R7, #1
SWI 0
.data
freq: .rept 128
.word 0x00 @ initialise character counts as 0
.endr
我在 CPULator 控制台上收到错误消息:
0000000c Warning: Memory read of 4 bytes at address 00000089 is misaligned. Throwing data abort exception.
Simulator requested a breakpoint.
第 7 行抛出异常:
LDR R2, [R0]
为什么会这样,我该如何解决?
CPU 正在尝试访问内存的奇数地址。
LDR R2, [R0] --> 用 R0 引用的内存地址的内容加载 R2
R0包含奇数。
所有32位和64位CPU都可以访问内存的偶数地址:
0x00000000 很好
0x00000004 很好
0x00000008 很好
0x00000009 不好
恩里科·米廖雷
P.S.
CPU 只能访问:“对齐内存地址”,它是 4 或 8 的偶数倍地址,具体取决于 CPU 类型。
极少数特殊的 ARM 指令可以访问“未对齐的地址”。
看这里:
我正在 CPULator
上调试以下代码.global _start
_start:
MOV R4, #0x61
LDR R0, =freq
ADD R0, R4
LDR R2, [R0]
ADD R2, #1
STR R2, [R0]
_exit:
MOV R7, #1
SWI 0
.data
freq: .rept 128
.word 0x00 @ initialise character counts as 0
.endr
我在 CPULator 控制台上收到错误消息:
0000000c Warning: Memory read of 4 bytes at address 00000089 is misaligned. Throwing data abort exception.
Simulator requested a breakpoint.
第 7 行抛出异常:
LDR R2, [R0]
为什么会这样,我该如何解决?
CPU 正在尝试访问内存的奇数地址。
LDR R2, [R0] --> 用 R0 引用的内存地址的内容加载 R2
R0包含奇数。
所有32位和64位CPU都可以访问内存的偶数地址:
0x00000000 很好 0x00000004 很好 0x00000008 很好 0x00000009 不好
恩里科·米廖雷
P.S.
CPU 只能访问:“对齐内存地址”,它是 4 或 8 的偶数倍地址,具体取决于 CPU 类型。
极少数特殊的 ARM 指令可以访问“未对齐的地址”。
看这里: