В стремежа си да напиша малък дизасемблер за Linux, специфичен за x86 arch, се сблъсках с малък проблем. Това е по отношение на задължителните префикси и повтарящите се префикси. Разглеждайки документите на 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
Благодаря и поздрави,
Хришикеш Мурали