【发布时间】:2021-02-27 09:44:34
【问题描述】:
我在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]
为什么会这样,我该如何解决?
【问题讨论】:
-
错误信息告诉你问题出在哪里。代码执行未对齐的加载。这是不允许的。
-
那么我该如何解决呢?对不起,如果 qs 是基本的,我对 ARM 很陌生
-
我该如何解决它? - 你能解释一下这段代码你想做什么吗?您真的需要从零数组的偏移量 0x61 加载 32 位字 吗?增加它并保存回来?如果不知道代码应该做什么,我们就无能为力了。
-
@CrissHills 重写代码,使其不会尝试访问未对齐地址的内存。如果您提供更详细的问题描述,包括您尝试做什么,我可以提供更具体的帮助。
标签: linux debugging assembly arm memory-alignment