2013-05-28 6 views
4

В Руководстве разработчика программного обеспечения для архитектуры Intel 64 и IA-32 таблица Row F A-4 Приложение A.3 Том 2C (номер заказа 326018-045US, январь 2013 года) уникален тем, что имеет префиксную подстроку для комбинации из двух префиксов: 0x66 и 0xF2.Почему код карты операций ia32/x64 0x66 и 0xF2 является двойным обязательным префиксом для кода операции 0x0F38F1 (CRC32)?

Единственный код операции, для которого это применимо, - 0x0F38F1 (CRC32). Только для префикса 0xF2 исходный операнд - это Ey (регистр памяти или общего назначения, 32 бит или 64 бит), а для префиксов 0x66 и 0xF2 вместе исходный операнд - Ew (регистр памяти или общего назначения, всегда 16 бит)

Но эти исходные операнды идентичны тем, какими они были бы, если бы 0x66 были просто необязательным префиксом переопределения размера операнда вместо первой комбинации из двух обязательных префиксов. На самом деле, 0x66 в качестве дополнительного префикса - это то, как документация CRC32 документирована (неявно: идентичные последовательности байтов для 16-разрядных и 32-разрядных операндов источника) в главе 3.2 тома 2A. Кажется, что таблица могла опустить строки 0x66 и 0xF2 и задокументировать исходный операнд как Ev (память или регистр общего назначения, 16 бит или 32 бит или 64 бит) в строке 0xF2.

Есть ли причина, по которой карта опкода документирует исходный операнд для кода операции 0x0F38F1 этим уникальным способом?

EDIT: Добавлена ​​версия ручного

ответ

4

Этот опкод используется совместно с MOVBE инструкцией атома. Я думаю вот как это выглядит для всех комбинаций:

0F 38 F1  movbe My, Gy 
66 0F 38 F1  movbe Mw, Gw 
66 F2 0F 38 F1 crc32 Gd, Ew 
F2 0F 38 F1  crc32 Gd, Ey 
F2 66 0F 38 F1 crc32 Gd, Ew 

EDIT: для большинства опкодов в 0F38 и 0F3A группах, приставка 66 является обязательными префиксом, который определяет, какая именно команду, а не обычный размера операнда префикс:

Три байта опкодов, которые 4 байта в длине начинается с обязательным префикса (66H, F2H или F3H) и два эвакуационных байтами (0F38H или 0F3AH). Верхние и нижние четыре бита четвертого байта используются для индексации определенной строки и столбца в таблице А-4 или таблице А-5.

Именно поэтому случай дополнительного, дополнительного 66 префикса, используемого в его традиционной роли переопределения операнда, должен быть указан отдельно.

+0

Да, версия таблицы, в которой я также перечисляю MOVBE как инструкцию для кода операции 0F 38 F1 без префикса F2. Мне просто интересно, почему записи таблицы для 66 F2 0F 38 F1 crc32 Gd, Ew и F2 0F 38 F1 crc32 Fd, Ey не объединены в одну запись: F2 0F 38 F1 crc32 Gd, Ev – TheBeardyMan

+0

@ TheBeardyMan: см. мое редактирование –