Вопрос

Где я могу найти имена новых регистров для сборки этой архитектуры?

Я имею в виду регистры в X86, такие как EAX, ESP, EBX и т. Д., Но я бы хотел, чтобы они в 64 бит.

Я не думаю, что они такие же, как когда я разбираю свой код C, я получаю R вместо E.

Это было полезно?

Решение

Старые 32-битные регистры были продлены до 64 бит, r регистры (rax, rbx, rsp и так далее).

Кроме того, есть несколько дополнительных регистров общего назначения r8 через r15 который также можно получить как (например) r8d, r8w а также r8b (Нижняя 32-разрядная, 16-битное слово и 8-битный байт соответственно). А b суффикс - это оригинальная номенклатура AMD, но иногда вы видите его написанным как l (нижний регистр L) для "низкого байта".

Я склонен предпочитаю b суффикс сам (хотя нынешние низко-байтовые регистры al, bl, и так далее), поскольку он соответствует d/w = double/word имена и l потенциально может быть принят за long. Анкет Или, что еще хуже, цифра 1, заставив вас сомневаться в том, какой номер регистра, черт возьми 81 является :-)

Высокие байты старых 16-битных регистров по-прежнему доступны при многих обстоятельствах, как ah, bh, и так далее (хотя это, кажется, не так для нового r8 через r15 регистры). Есть несколько новых Инструкции кодировки, конкретно те, кто использует REX Префикс, который не может получить доступ к этим оригинальным высоким байтам, но другие все еще могут их использовать.

Кроме того, есть несколько новых регистров SSE, xmm8 хотя xmm15.

А eip а также eflags Регистры также были продлены на rip а также rflags(Хотя высокие 32 бита rflags на данный момент все еще не используются).

Увидеть Википедия Пейдж а также MSDN Больше подробностей.

Поддерживаются ли они в asm Ключевое слово для конкретного компилятора C, я не мог сказать. Что я делаю в небольшом собрании (и это становится примерно на один день в год) делается на собрании, а не C.


Связанный:

Другие советы

А Документация MSDN Включает информацию о регистрах X64.

x64 расширяет 8-разрядные регистры в общем назначении X64 на 64-битные и добавляет 8 новых 64-разрядных регистров. 64-битные регистры имеют имена, начинающиеся с «R», поэтому, например, 64-битное расширение EAX называется RAX. Новые регистры названы R8 через R15.

Нижние 32 бита, 16 бит и 8 бит каждого регистра являются непосредственно адресом в операнде. Это включает в себя регистры, такие как ESI, чьи более низкие 8 бит ранее не были адресованы. В следующей таблице указаны имена сборочного языка для нижних частей 64-битных регистров.

64-bit register | Lower 32 bits | Lower 16 bits | Lower 8 bits
==============================================================
rax             | eax           | ax            | al
rbx             | ebx           | bx            | bl
rcx             | ecx           | cx            | cl
rdx             | edx           | dx            | dl
rsi             | esi           | si            | sil
rdi             | edi           | di            | dil
rbp             | ebp           | bp            | bpl
rsp             | esp           | sp            | spl
r8              | r8d           | r8w           | r8b
r9              | r9d           | r9w           | r9b
r10             | r10d          | r10w          | r10b
r11             | r11d          | r11w          | r11b
r12             | r12d          | r12w          | r12b
r13             | r13d          | r13w          | r13b
r14             | r14d          | r14w          | r14b
r15             | r15d          | r15w          | r15b

X64 расширяет 32-разрядные регистры общего назначения следующим образом:

EAX -> RAX
EBX -> RBX
ECX -> RCX
EDX -> RDX
ESI -> RSI
EDI -> RDI
ESP -> RSP
EBP -> RBP

X64 также добавляет следующие 64-разрядные регистры общего назначения:

R8, R9, R10, R11, R12, R13, R14, R15

Кроме того, SSE является частью спецификации X64, поэтому также доступны векторные регистры XMM0-XMM15

Вы можете найти некоторую базовую информацию об архитектуре в Википедия/X86-64 Или перейдите на веб -сайт Intel.

Давайте прочитаем руководство Intel

Где я могу найти имена новых регистров для сборки этой архитектуры.

В руководстве по процессору "Intel 64 и IA-32 Architectures Architectures Developer Руководство разработчика 1: Основная архитектура", например, Версия 253665-053US:

  • Поиск "Регистры"
  • Первый матч - это индекс "3.4 Базовый регистр выполнения программы"
  • Два пункта ниже "3.4.1.1 Общие регистры в 64-битном режиме"

В этом разделе:

Если указан 64-битный размер операнда: RAX, RBX, RCX, RDX, RDI, RSI, RBP, RSP, R8-R15 доступны. R8D-R 15D/R8-R15 представляют восемь новых регистров общего назначения.

Напоминание: 64-битный режим-это «нормальный» режим в x86-64. Другим основным режимом является «режим совместимости», который имитирует IA32.

Если вы продолжите искать «регистр» на TOC, вы также найдете разделы «Регистры по раздавливанию номеров» для плавающей запятой и SIMD, разбросанных в руководстве:

  • 8.1.2 - x87 Регистры данных FPU (STX)
  • 9.9.2 - Регистры MMX
  • 10.2.2 - Регистры XMM
  • 14.1.1 - Поддержка регистрации SIMD шириной 256 -билей (YMM)

Есть гораздо больше регистров управления, которые имеют различные побочные эффекты и, как правило, не могут быть записаны, если вы не хотите эти эффекты (и часто требуется кольцо 0) Они суммированы в «Руководстве по системному программированию тома 3 - 2,1.6 Системных регистров», которое больше для разработчиков ОС.

Хороший эмпирический подход - это управлять info all-registers в GDB: Как печатать значения регистрации в GDB?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top