我需要幫助理解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