gpt4 book ai didi

assembly - 什么是非对齐访问? (ARM/凯尔)

转载 作者:行者123 更新时间:2023-12-04 17:35:30 26 4
gpt4 key购买 nike

我正在使用 Keil 为 ARM 7 编写程序集。

我有以下运行时错误:

Non-aligned Access: ARM Instruction at 000000F8H, Memory Access at 7F7F7F7FH
Data Abort: ARM Instruction at 000000F8H, Memory Access at 7F7F7F7FH

这并没有真正帮助我,因为我不知道什么是“非对齐访问”(除了明显的,但我并不真正理解它的含义)并且我正在尝试访问(存储)以 0x7F7F7F7F ,有什么问题吗?

搜索我只发现了几个类似的问题,都使用 C,并通过某种方式解决了非常特定于他们的代码并且与此问题无关的问题。

我正在做:
LDR R0, =0x7F7F7F7F
LDR R1, LABEL
STR R1, [R0]

然后我用不同的标签和 R0 的偏移量做类似的事情。 ,但它首先在这里失败。

最佳答案

问题是您用于 32 位(4 字节)内存操作的地址必须与 4 字节边界对齐。这意味着地址必须是 4 的倍数,或者如果您愿意,地址的底部两位必须为零。

在这种情况下,最接近的 4 字节对齐地址将是 0x7F7F7F7C0x7F7F7F80 .

同样,LDRH/STRH需要 2 字节对齐,而 LDRB/STRB可以在任何地方操作(1 字节对齐 == 未对齐)。

一般来说,编译器/汇编器负责确保您的变量正确对齐它们的大小 - 如果您自己生成地址(根据问题),您应该只遇到这种情况。

关于assembly - 什么是非对齐访问? (ARM/凯尔),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20926386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com