抛出数据中止异常

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 指令可以访问“未对齐的地址”。

看这里:

https://community.arm.com/developer/tools-software/oss-platforms/f/dev-platforms-forum/8806/loads-and-stores-for-unaligned-memory-addresses