x86 Вычисление AX с учетом AH и AL?
У меня проблемы с пониманием регистров в сборке x86, я знаю, что EAX - это полные 32 бита, AX - это младшие 16 бит, а затем AH и AL - старшие и младшие 8 бит AX, но я задаю вопрос.
Если AL=10 и AH=10, каково значение в AX?
Я думаю об этом, чтобы преобразовать 10 в двоичную (1010), а затем принять это как старшие и младшие биты AX (0000 1010 0000 1010), а затем преобразовать это в десятичную (2570). Я где-то близко к правильному ответу здесь, или далеко?
1 ответ
Как предположил Питер Кордес, я хотел бы представить данные в виде шестнадцатеричных значений:
RR RR RR RR EE EE HH LL
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
...где RAX
это 64-битный регистр, который существует в x86-64
,
Так что если у вас было AH = 0x12
а также AL = 0x34
, как это:
00 00 00 00 00 00 12 34
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
... тогда у тебя было AX = 0x1234
а также EAX = 0x00001234
и т.п.
Обратите внимание, что, как показано на этом графике, AH
это единственный "странный" регистр, который не выровнен с младшими битами. Другие (AL
, AX
, EAX
, RAX
для 64-битных) просто разных размеров, но все выровнены справа. (Например, два байта отмечены EE EE
в таблице нет названия регистра самостоятельно.)