如何解决抛出数据中止异常
.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
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 不好
恩里科·米格里奥
附言
CPU 只能访问:“对齐的内存地址”,根据 CPU 类型,这些地址甚至是 4 或 8 的倍数。
极少数特殊的 ARM 指令可以访问“未对齐的地址”。
看看这里:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。