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 в таблице нет названия регистра самостоятельно.)

Другие вопросы по тегам