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)正確的答案在這裏,還是離開?
我很難理解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)正確的答案在這裏,還是離開?
如由Peter科爾德建議,我會想象中的數據爲十六進制值:
RR RR RR RR EE EE HH LL
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
...其中RAX
是存在於x86-64
64位寄存器。
所以,如果你有AH = 0x12
和AL = 0x34
,像這樣:
00 00 00 00 00 00 12 34
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
...那麼你有AX = 0x1234
和EAX = 0x000
等
需要注意的是,如該圖中,AH
是唯一這裏的「怪異」寄存器不與低位對齊。其他(AL
,AX
,EAX
,RAX
爲64位)只是不同的大小,但都在右側對齊。 (例如,圖表中標記爲EE EE
的兩個字節本身沒有寄存器名稱。)
是的,這是正確的。你也可以做'AX = 256 * AH + AL = 2560 + 10 = 2570'。 PS:如果有疑問,您可以在調試器中運行一些代碼。 – Jester
謝謝@Jester那個快捷方式將派上用場:) – Dfarrelly
轉換爲十六進制在精神上更容易。每個字節是2個十六進制數字。它只是0x0a0a,AH首先。 –