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,需要几个条件:
您的意思是
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将存储在“地址”中。