2016-05-15 103 views
0

我很難理解x86程序集中的寄存器,我知道EAX是完整的32位,AX是低16位,然後AH和AL是AX的高位和低位8位,但我正在做題。x86給出AH和AL計算AX?

如果AL = 10和AH = 10 AX的值是多少?我的想法是將10轉換爲二進制(1010),然後將其作爲AX的高位和低位(0000 1010 0000 1010),然後將其轉換爲十進制(2570)正確的答案在這裏,還是離開?

+3

是的,這是正確的。你也可以做'AX = 256 * AH + AL = 2560 + 10 = 2570'。 PS:如果有疑問,您可以在調試器中運行一些代碼。 – Jester

+0

謝謝@Jester那個快捷方式將派上用場:) – Dfarrelly

+3

轉換爲十六進制在精神上更容易。每個字節是2個十六進制數字。它只是0x0a0a,AH首先。 –

回答

3

如由Peter科爾德建議,我會想象中的數據爲十六進制值:

RR RR RR RR EE EE HH LL 
|   |  || || 
|   |  || AL 
|   |  AH | 
|   |  |___| 
|   |  AX | 
|   |_________| 
|   EAX  | 
|_____________________| 
RAX 

...其中RAX是存在於x86-64 64位寄存器。

所以,如果你有AH = 0x12AL = 0x34,像這樣:

00 00 00 00 00 00 12 34 
|   |  || || 
|   |  || AL 
|   |  AH | 
|   |  |___| 
|   |  AX | 
|   |_________| 
|   EAX  | 
|_____________________| 
RAX 

...那麼你有AX = 0x1234EAX = 0x000

需要注意的是,如該圖中,AH是唯一這裏的「怪異」寄存器不與低位對齊。其他(AL,AX,EAX,RAX爲64位)只是不同的大小,但都在右側對齊。 (例如,圖表中標記爲EE EE的兩個字節本身沒有寄存器名稱。)