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 на диаграмме, сами не имеют имени регистра.)