Существуют ли инструкции в сборке x86, которые существуют только в 64-битном режиме? - PullRequest
3 голосов
/ 05 октября 2009

Некоторые старые инструкции x86 не определены в 64-битном режиме. Например, LDS, LES и LSS или короткие коды операций команд INC r16 (40 + <em>rw</em>) и INC r32 (40 + <em>rd</em>).

Существуют ли инструкции, которые определены только в 64-битном режиме, а не в 32-битном защищенном режиме?

Редактировать: Контекст - разработка процессора x86. Я хочу убедиться, что я совместим со спецификацией.

Ответы [ 6 ]

5 голосов
/ 05 октября 2009

Существует режим адресации, который не имеет аналога в 32 битах: указатель инструкций относительно адресации. В 32-битном режиме это доступно только с ветвями (смещение ветвей), а в 64-битном режиме вы можете сформировать эффективные адреса для любого операнда памяти относительно (r) ip.

Итак, инструкция

mov rbx,$100[rip]

существует в x86-64, а

mov ebx,$100[eip]

не в x86.

4 голосов
/ 17 сентября 2012

Из Руководства разработчика программного обеспечения Intel для архитектуры, Том 2C, Приложение A (Карта кода операции):

Таблица А-1. Верхние индексы, используемые в таблицах кодов операций

...

o64 Инструкция доступна только в 64-битном режиме

...

При поиске в таблицах с этим верхним индексом появляются следующие инструкции:

  1. REX-префиксы (не совсем инструкция, но все же)
  2. MOVSXD
  3. SYSCALL, SYSRET
  4. SWAPGS

Несколько дополнительных инструкций, являющихся вариантами существующих, перечислены в разделе 5.16 (ИНСТРУКЦИИ ПО 64-БИТОВОМУ РЕЖИМУ):

  1. CDQE Конвертировать двойное слово в четырехсловное
  2. CMPSQ Сравнить строковые операнды
  3. CMPXCHG16B Сравнить RDX: RAX с m128
  4. LODSQ Загрузить слово по адресу (R) SI в RAX
  5. MOVSQ Переместить слово из адреса (R) SI в (R) DI
  6. MOVZX (64 бита) Переместить двойное слово в четырехзначное, нулевое расширение
  7. STOSQ Store RAX по адресу RDI
3 голосов
/ 09 октября 2009

За исключением старых инструкций, которые теперь работают с 64-битными регистрами (это действительно новые инструкции, так как они используют отдельное двоичное представление), я могу вспомнить как минимум две инструкции, которые являются только 64-битными: syscall и sysret инструкции.

0 голосов
/ 16 сентября 2012

PUSHA существует только в 32-битном режиме. Не существует в 64-битном режиме

0 голосов
/ 17 октября 2009

наоборот гораздо проще придумать;) как cmpxchg8b .... вы бы никогда не использовали его в 64-битном режиме.

0 голосов
/ 05 октября 2009

Вы всегда можете найти различные инструкции в http://www.intel.com/products/processor/index.htm?iid=dev_center+tech_hw_design+prods+processors, чтобы найти такие инструкции. Будет много тяжелой работы;)

...