Как читать таблицы инструкций x86 с этого сайта - PullRequest
1 голос
/ 07 января 2020

Я читаю https://www.felixcloutier.com/x86/mov (например, mov), и в таблицах есть эти коды операций, такие как 88 /r и REX + 88 /r и даже REX.W + 8C /r. Я не мог найти объяснение на сайте. Что означают r, REX, REX.W и 8C? Как мне получить шестнадцатеричное значение для всей инструкции mov, основанной на этой таблице?

Ответы [ 2 ]

4 голосов
/ 07 января 2020

Intel® 64 и IA-32 Архитектура Руководство разработчика: Том. 2A , раздел 2.2.1 дает ответ на ваш вопрос.

Префиксы REX - это байты префикса инструкции, используемые в 64-битном режиме. Они делают следующее:

  • Укажите GPR и регистры SSE.
  • Укажите размер 64-битного операнда.
  • Укажите расширенные регистры управления.

Особенности приведены в разделе 2.2.1.2:

  • Настройка REX.W может быть используется для определения размера операнда, но не только определяет ширину операнда.
  • REX.R изменяет поле reg ModR / M, когда это поле кодирует регистр GPR, SSE, управления или отладки.
  • Бит REX.X изменяет поле индекса SIB.
  • REX.B либо изменяет базу в поле ModR / M r / m, либо в поле базы SIB; или изменяет поле opcode reg, используемое для доступа к GPR.

Пожалуйста, обратитесь к руководству Intel о том, как именно они кодируются.

Согласно разделу 3.1.1.1 ,

/ r - указывает, что байт ModR / M инструкции содержит операнд регистра и операнд r / m.

Объясняется байт ModR / M в разделе 2.1 Руководства. 88, 89, 8A, 8B, 8C и др. c. это просто байты кода операции, также объясненные в этом разделе Руководства.

0 голосов
/ 07 января 2020

Что-то вроде x86 и x86-64 кодирования инструкций.

REX - это префикс.

  1. REX Префиксы - это байты префикса инструкции, используемые в 64-битном режиме.
  2. r Я думаю, это регистр.
  3. В 64-битном режиме размер операции по умолчанию для инструкции составляет 32 бита. … Использование префикса REX в форме REX.W повышает скорость работы до 64 бит.
  4. 8C - это код операции.
...