Подтвердить что ты не робот

Каковы имена новых регистров процессоров X86_64?

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

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

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

4b9b3361

Ответ 1

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


Связанные с:

Ответ 2

документация MSDN содержит информацию о регистрах x64.

x64 расширяет x64 8 универсальных регистры должны быть 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

Ответ 3

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.

Ответ 4

Позвольте прочитать руководство 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?