Как AX, AH, AL отображаются на EAX?
Мое понимание регистров x86 говорит о том, что к каждому регистру может обращаться весь 32-битный код, и он разбит на несколько доступных регистров.
В этом примере EAX
является 32-битным регистром, если мы вызываем AX
, он должен вернуть первые 16 битов, а если мы вызываем AH
или AL
, он должен возвращать следующие 8 битов после 16 битов и AL
должен вернуть последние 8 бит.
Так что мой вопрос, потому что я не совсем верю, это то, как это работает. Если мы сохраним 32-битное значение, также известное как EAX
:
0000 0100 0000 1000 0110 0000 0000 0111
Так что, если мы получим доступ к AX
, он должен вернуть
0000 0100 0000 1000
если мы прочитаем AH
, он должен вернуть
0000 0100
и когда мы читаем AL
, он должен вернуть
0000 0111
Это правильно? и если это то, какое значение действительно имеет AH
?
Ответы
Ответ 1
Нет, это не совсем правильно.
EAX is the full 32-bit value
AX is the lower 16-bits
AL is the lower 8 bits
AH is the bits 8 through 15 (zero-based)
Изменить:
Для полноты, в дополнение к вышесказанному, основанного на 32-битном процессоре, 64-разрядные процессоры Intel/AMD имеют
RAX, which hold a 64-bit value, and where EAX is mapped to the lower 32 bits.
Ответ 2
AX - это 16 младших битов EAX. AH - это 8 старших бит AX (то есть 8-15 битов EAX), а AL - наименее значимый байт (биты 0-7) EAX, а также AX.
Пример (шестнадцатеричные цифры):
EAX: 12 34 56 78
AX: 56 78
AH: 56
AL: 78
Ответ 3
| 0000 0001 0010 0011 0100 0101 0110 0111 | ------> EAX
| 0100 0101 0110 0111 | ------> AX
| 0110 0111 | ------> AL
| 0100 0101 | ------> AH
Ответ 4
no your ans Неверно
Выбор Al и Ah происходит от AX не от EAX
например
EAX=0000 0000 0000 0000 0000 0000 0000 0111
Итак, если мы вызываем AX, он должен возвращать
0000 0000 0000 0111
если мы назовем AH, он должен вернуть
0000 0000
и когда мы вызываем AL, он должен возвращать
0000 0111
Пример № 2
EAX: 22 33 55 77
AX: 55 77
AH: 55
AL: 77
Пример 3
EAX: 1111 0000 0000 0000 0000 0000 0000 0111
AX= 0000 0000 0000 0111
AH= 0000 0000
AL= 0000 0111
Ответ 5
Нет - AL - это 8 наименее значимых бит AX. AX - это 16 младших значащих бит EAX.
Возможно, с этим легче справиться, если мы начнем с 04030201h в eax. В этом случае AX будет содержать 0201h, AH wil содержит 02h, а AL будет содержать 01h.
Ответ 6
В приведенном ниже фрагменте рассматривается EAX с использованием GDB.
(gdb) info register eax
eax 0xaa55 43605
(gdb) info register ax
ax 0xaa55 -21931
(gdb) info register ah
ah 0xaa -86
(gdb) info register al
al 0x55 85
- EAX - полное 32-битное значение
- AX - младшее 16-битное значение
- AH - Биты от 8 до 15
- AL - младшие 8 бит EAX/AX
Ответ 7
как насчет 64-бит в Visual Studio (ASM)?