порядок кодирования байтов префикса инструкции x86 - PullRequest
9 голосов
/ 26 августа 2011

Я знаю, что инструкции x86 могут иметь максимум 4 байта префиксов, например, Lock, rep, переопределения сегментов и т. Д.

Существует ли какой-то конкретный порядок, в котором они должны появляться, если используются несколько префиксов

Ответы [ 3 ]

5 голосов
/ 26 августа 2011

Порядок можно найти в томе 2А Руководства разработчика программного обеспечения Intel.

В двух словах:

  • префиксы F2 и F3 отменяют друг друга,Тот, который приходит позже, имеет приоритет.
  • префикс 66 игнорируется, если используются F2 или F3 (как обязательные префиксы в длинной инструкции).Это, конечно, не относится к rep movsw, где оба этих префикса являются просто префиксами, а не частью кода операции.
  • после REX-перехода не может следовать никаких других префиксов.
  • Выходу из VEX не может предшествовать REX, 66, F2 или F3

, в остальном порядок не должен иметь значения.

1 голос
/ 26 августа 2011

Архитектурный том руководств для разработчиков Intel подробно описывает макет, однако из того, что я помню в прошлый раз, когда я его читал, порядок для большинства не имел значения, , за исключением REX /REX.W префикс, который должен занимать слот, ближайший к началу фактических байтов инструкции (он также занимает слот больше всего справа)

1 голос
/ 26 августа 2011

Цитата из Руководства разработчика программного обеспечения Intel® 64 и IA-32, том 2A: Справочник по набору инструкций, AM

Префиксы команд разделены на четыре группы, каждая из которых содержит набор допустимых кодов префиксов.Для каждой инструкции полезно включать до одного префиксного кода из каждой из четырех групп (Группы 1, 2, 3, 4).Группы с 1 по 4 могут быть расположены в любом порядке относительно друг друга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...