В моем стремлении написать небольшой дизассемблер для 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
С уважением и уважением,
Хришикеш Мурали