2012-02-04 6 views
3

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

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

Однако после прочтения быстрой статьи я стал чем-то путаным.

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

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

ответ

4

Вы совершенно правы. Четыре из универсальных регистров 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

Отличный ответ, спасибо за объяснение «||» оператора, а также для расширения ответа на AMD64. – JAW1025

+1

на самом деле есть SP, BP, SI и DI, которые являются нижней частью ESP, EBP, ESI и EDI, и они в свою очередь объединяются с более высокими 32 битами, чтобы стать RSP, RBP, RSI и RDI в x86_64 –

0

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

+0

так что топор физически находится внутри eax? (например, верхний или нижний 16-бит eax является расширением, а другая половина - током) – JAW1025

+0

@JAW - * Все * является расширением. На заре времени регистр был просто «А» и содержал 8 бит. –

Смежные вопросы