如果我将一个数字从内存移到寄存器中,它会按相同的顺序放置吗?

If I move a number from memory to a register, will it be placed in the same order?

假设我的内存中有以下数字:01 00 00 00。 如果我把它移到 eax 中,它会按相同的顺序放置:01 00 00 00?

所以 ax 将包含 01 00?如果是这种情况,是否意味着寄存器将 "the first byte on the left" 视为最低有效字节,而将 "the first byte on the right"(aleax 的情况下)视为最高有效字节字节?所以这有点像小字节序! (而且我知道寄存器没有字节顺序的概念)。

不,当您将数字加载到寄存器中时,它们实际上是相反的。正如您所说,寄存器没有字节顺序,但是如果您在寄存器中显示数字,它将与内存内容的显示方式相反。

01 00 00 00 加载到 eax 将为您提供号码 00000001ax的内容为0001ah的内容为00al的内容为01

为了定义什么是内存字节序,需要几个条件:

  1. 一定有记忆,按细胞划分
  2. 写入内存的数字必须占用几个单元格。
  3. 存储单元必须有地址。

让我们看看寄存器如何与这些条件相关(我将写关于 32 位 x86 架构):

  1. 是的,寄存器是内存,但它们是可分割的吗?是的,它们是内存,它们是可分割的。

  2. 这个数可以占用几个单元格——比如12345678h,在EAX中占用:al=78h,ah=56h,EAX中剩余的包含1234h

  3. 这些存储单元是否可寻址?不,他们不是。没有 al、ah、ax 的地址和 eax 的未命名部分。我们不能说哪个寄存器有更大的地址,哪个更小。这就是寄存器没有字节顺序的原因。