如何以 BIG ENDIAN 格式加载数据?

问题描述 投票:0回答:1

我对以 BIG ENDIAN 格式存储数据时如何加载数据感到困惑。我无法理解的例子之一是: 假设值 0xBABEFACE 在大端配置中存储到地址 0x400,那么

0x400 - BE
0x401 - BA
0x402 - FA
0x403 - CE

对于指令LDR R3,0x402 它加载从地址 402(即 FA)开始的完整字。 首先发送 FA,然后发送 CE,然后发送 00,因为没有其他数据。那么R3中加载的数据就是0xFACE0000(因为是从FA开始向上移动的)还是0x0000FACE??

assembly cpu-architecture endianness
1个回答
0
投票
0x400 - BE
0x401 - BA
0x402 - FA
0x403 - CE

不存在字节顺序,在这种情况下 0xBABEFACE 将表示为 0xBE、0xBA、0xFA、0xCE。

0xBABEFACE 在大端中将表示为 0xBA、0xBE、0xFA、0xCE,在小端中将表示为 0xCE、0xFA、0xBE、0xBA。

对于指令LDR R3,0x402

您还没有告诉我们您的目标是哪种 CPU 架构,因此我们猜测您所说的这个

LDR
指令会使用给定立即地址的内容加载给定寄存器。

它加载完整的单词

同样,由于我们不知道您的目标是哪种CPU架构,所以我们不知道您所说的“单词”是什么意思,更不用说“完整单词”了。

首先发送 FA,然后发送 CE,最后发送 00,因为没有其他数据。

没有现代CPU架构可以一一发送字节。

此外,据我所知,没有 CPU 架构具有 3 字节长的字。

此外,不存在“其他数据”这样的东西。 总是有“其他数据”。 (如果没有,您将收到“无效内存访问”信号。)但是您还没有告诉我们内存位置 0x404 和 0x405 中存储了什么。我们将假设这些内存位置包含零。

然后,在大端机器上,寄存器将包含值 0xFACE0000。

但这不是你所看到的。

这意味着还有另一件事您没有告诉我们:(这是您对 CPU 架构保密的直接结果:)

您正在一台小端机器上操作,并且您正在尝试加载以大端格式表示的单词。

在这种情况下,值 0x0000CEFA 将被加载到寄存器中。

如果您有问题要问,则不清楚问题是什么。无论问题是什么,希望以上内容已经涵盖了它。

© www.soinside.com 2019 - 2024. All rights reserved.