Assembly 如果我把一个数字从内存移到寄存器,它会按相同的顺序排列吗?

Assembly 如果我把一个数字从内存移到寄存器,它会按相同的顺序排列吗?,assembly,x86,cpu,cpu-registers,Assembly,X86,Cpu,Cpu Registers,假设我的内存中有以下数字:01 00。 如果我将其移动到eax中,它是否会按相同的顺序放置:01 00 因此,ax将包含01 00?如果是这种情况,这是否意味着寄存器将“左边的第一个字节”视为最低有效字节,而将“右边的第一个字节”(al,在eax)的情况下)视为最高有效字节?这有点像小恩迪安!(我知道寄存器没有endianness的概念)。不,当您将数字加载到寄存器中时,它们实际上是反向的。正如您所说,寄存器没有尾数,但是如果您在寄存器中显示数字,它将与内存内容的显示方式相反 将01 00 00

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


因此,
ax
将包含
01 00
?如果是这种情况,这是否意味着寄存器将“左边的第一个字节”视为最低有效字节,而将“右边的第一个字节”(
al
,在
eax
)的情况下)视为最高有效字节?这有点像小恩迪安!(我知道寄存器没有endianness的概念)。

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


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

为了定义某个内存的-endian,需要几个条件:

  • 必须有被细胞分割的记忆
  • 写入内存的数字必须占用几个单元格
  • 存储单元必须有地址
  • 让我们看看寄存器与这些条件之间的关系(我将介绍32位x86体系结构):

  • 是的,寄存器是内存,但它们是可分割的吗?是的,它们是内存,可以分割

  • 该数字可以占用多个单元格-例如12345678h,在EAX中占用:al=78h,ah=56h,EAX的剩余部分包含1234h

  • 这些存储单元可以寻址吗?不,他们不是。没有al、ah、ax和eax未命名部分的地址。我们不能说哪个寄存器的地址大,哪个寄存器的地址小。这就是寄存器没有endianness的原因


  • 您的意思是
    ax
    的内容将是
    0000
    ?如果我将一个数字从寄存器移到内存中,它也会反转,对吗?@mahmoud_t1:No,我的意思是
    ax
    的内容将是
    0001
    ,它是
    eax
    的低16位。是的,向另一个方向移动将以相同的方式反转数据。是的,你是对的。我混淆了名称(我认为
    ax
    eax
    中较高的16位的名称)。请记住:在小尾端格式中,最不重要的字节将保存在内存中的最低地址。当您将数字11 44 05存储在内存中时,低位05将存储在“地址”(例如:0xbfafd421),中间44将存储在“地址+1”(例如0xbfafd422),而11将存储在“地址+2”(例如0xbfafd423)。在big-endian中,01将存储在“地址”中。