Как называются новые регистры процессоров X86_64? - PullRequest
54 голосов
/ 18 ноября 2009

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

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

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

Ответы [ 4 ]

95 голосов
/ 18 ноября 2009

Документация 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
71 голосов
/ 18 ноября 2009

Старые 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.


Связанный:

9 голосов
/ 18 ноября 2009

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

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

6 голосов

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

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

В руководстве по процессору "Руководство разработчика программного обеспечения для архитектуры Intel 64 и IA-32, том 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.

Если вы продолжаете искать «регистр» в оглавлении, вы также найдете разделы о регистрах «дробления чисел» для чисел с плавающей запятой и 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?

...