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). Я где-нибудь ближе к правильному ответу здесь, или выход?
- Как работает подкачка x86?
- Как написать самомодифицирующийся код в сборке x86
- Ошибка Weird MSC 8.0: «Значение ESP не было должным образом сохранено в вызове функции ...»
- Как написать привет мир в ассемблере под Windows?
- Почему SSE скалярный sqrt (x) медленнее, чем rsqrt (x) * x?
- Почему целочисленное переполнение на x86 с GCC вызывает бесконечный цикл?
- Изменение режима округления с плавающей запятой
- В чем смысл «не временных» обращений к памяти в x86
- Сборка - JG / JNLE / JL / JNGE после CMP
- Печать шестнадцатеричных цифр со сборкой
- Рисование символа в VGA-памяти с встроенной сборкой GNU C
- Что будет использоваться для обмена данными между streamами, выполняются на одном ядре с HT?
- LEA или ADD?
Как предложил Питер Кордес, я бы представил данные как шестнадцатеричные значения:
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
в диаграмме, сами не имеют имени регистра.)