В моем стремлении написать небольшой дизассемблер для Linux, специфичный для арки x86, я столкнулся с небольшой проблемой. Это касается обязательных префиксов и повторных префиксов. Глядя на документы Intel [1], говорится, что повторяющиеся префиксы 0xf2 или 0xf3 , а обязательные префиксы 0x66 , 0xf2 или 0xf3 .
Существуют две инструкции, которые имеют следующие базовые коды операций:
crc32 - f2 0f 38 f0 ( Здесь 0xf2 - обязательный префикс )
movbe - 0f 38 f0
Итак, коды операций команды 'movbe', которая должна повторяться до тех пор, пока регистр счетчика не равен нулю, должны быть:
repnz movbe == f2 0f 38 f0
Когда я начинаю разбирать инструкцию, если я вижу байт 0xf2 , как я узнаю, что это обязательный префикс для инструкции crc32 , но не повторный префикс для инструкции movbe или наоборот? С какой инструкцией мне нужно сопоставить шаблон кода операции "f2 0f 38 f0" с?
Что мне не хватает?
[1] http://www.intel.com/design/intarch/manuals/243191.HTM
Спасибо и всего наилучшего,
Хришикеш Мурали