путаница в 32-битном регистре Intel x86 - PullRequest
3 голосов
/ 04 февраля 2012

Я пытался изучить 32-битную сборку синтаксиса Intel x86 nasm на моей ОС Linux, и у меня возник вопрос о четырех 32-битных регистрах общего назначения.

Из того, что ямы думали , eax был 32-битным регистром, который должен был использоваться с 16-битным регистровым топором, который был разделен на ах (старшие 8 бит), иal (младшие 8 бит).И то же самое с ebx, ecx и edx.

Однако, прочитав небольшую статью, я немного запутался.

32-битный регистр состоит из 16-битногорегистр (который, в свою очередь, состоит из двух 8-битных регистров) с добавленными дополнительными 16-битными?

Так далеко от того, что я читал в Google, все результаты говорят, что онииспользуется для, а не их фактический состав.

Ответы [ 2 ]

4 голосов
/ 04 февраля 2012

Вы совершенно правы.Четыре из регистров общего назначения EAX, EBX, ECX и EDX составлены следующим образом (я использовал аккумулятор в примере):

  1. Во-первых, мы имееммладший байт и верхний байт 16-битного слова.Итак, AX = AH || AL
  2. Тогда у нас есть 16-битное расширение AX, которое образует меч.Итак, EAX = EAX(31:16) || AX.
  3. (в AMD64) Регистр dword затем расширяется до регистра qword.Следовательно, у нас есть RAX = RAX(63:32) || EAX.

Оператор || является оператором конкатенации.Обратите внимание, что это правило не распространяется на остальные четыре регистра общего назначения: ESP, EBP, ESI и EDI.

.
0 голосов
/ 04 февраля 2012

Как вы полагаете, 32-битный регистр, такой как eax, доступен в своей наиболее значимой части, так как ax и ax сами разбиты на ah и al ... то же самое для ebx и так далее ...

...