了解字节顺序和寄存器分配:Little Endian 与 Big Endian

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

我一直在学习大端和小端架构,发现我的电脑以小端运行。使用一个简单的程序,我将值

0xA000
加载到
ax
寄存器中,并观察到
A0
存储在
AH
中,
00
存储在
AL
中。我的理解是,
AH
代表更高的地址(这就是为什么MSB存储在其中),与寄存器序列(
AL
AH
EAX
RAX
)对齐。有人可以确认我的理解到目前为止是否正确吗?

扩展这一点,我对大端系统中会发生的事情很感兴趣。假设我再次将值

0xA000
加载到
AX
中,现在
A0
存储在
AL
中(因为在大端中,MSB 进入较低的 andrees)。

现在我的问题来了:

如果我将

A
添加到
AX
中,我会在里面看到
A00A

但是,如果我将

A
添加到
AL
,然后再次检查
AX
,我是否会意外地看到
AA
而不是预期值
A00A
?有人可以澄清大端系统中的行为以及它们如何与小端系统不同地处理寄存器分配吗?

assembly endianness cpu-registers
1个回答
0
投票

你错了。您正在讨论的值已被表示为 16 位字。对于

0xA000
A0
部分始终是高字节,
00
部分将是低字节。

区别在于,如果您将值存储到内存中,那么对于小端系统,它将作为

0x00 0xA0
存储在内存中,而在大端系统中,它将作为
0xA0 0x00
存储。

对于人类对数字的消耗,我们通常总是将高位放在左侧,低位放在右侧。

请注意,我们也总是对字节本身执行此操作。在这种情况下,我们甚至在小端上执行此操作,尽管这没有多大意义!

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