我需要帮助理解x86处理器的CPU寄存器内部的字节顺序。我写这个小汇编程序:CPU寄存器内的字节序编号
section .data
section .bss
section .text
global _start
_start:
nop
mov eax, 0x78FF5ABC
mov ebx,'WXYZ'
nop ; GDB breakpoint here.
mov eax, 1
mov ebx, 0
int 0x80
我在GDB运行此程序与行号10(在上面的源注释)断点。在此断点处,info registers
显示的值为eax=0x78ff5abc
和ebx=0x5a595857
。由于W,X,Y,Z的ASCII码分别为57,58,59,5A,因此,而intel是小端,0x5a595857似乎是正确的字节顺序(最低有效字节在前)。那么为什么不是eax寄存器0xbc5aff78
(数字0x78ff5abc的最低有效字节)的输出而不是0x78ff5abc
?
谢谢你的回复。显然'WXYZ'确实是以相反的顺序存储在ebx寄存器中的。根据调试器,BL寄存器包含87(十进制值0x57);当然,这里有一个字节顺序的概念?为什么'W'不是存储在ebx的最高8位? – wrxyz 2010-12-22 00:01:43
实际上,寄存器*是*部分字节寻址的。您可以使用AL和AH访问EAX的较低两个字节。 – 2010-12-22 00:46:57