Как 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)?