Любые варианты кодирования команд представляют собой подмножества общего формата команды, показанного на Рисунке 26-1. Команда состоит из опциональных префиксов команды, одного или двух байтов основного кода операции, возможно описателя адреса, состоящего из байта ModR/M и байта SIB (Scale Index Base, или Масштабный коэффициент Индекс База), смещения, если оно необходимо, и непосредственного поля данных, если оно необходимо.
------------------------------------------------------------------ Префикс | Префикс | Префикс |Переопределение команды | размера адреса |размера операнда| сегмента------------------------------------------------------------------ 0 или 1 | 0 или 1 | 0 или 1 | 0 или 1- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Число байтов------------------------------------------------------------------ ------------------------------------------------------------------ Код | MODR/M | SIB | Смещение | Непосредственный операции | | | | операнд------------------------------------------------------------------ 1 или 2 | 0 или 1 | 0 или 1 | 0,1,2 или 4 0,1,2 или 4- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Число байтов------------------------------------------------------------------ Рисунок 26-1. Формат команды процессора i486
Меньшие поля кодировки могут быть определены внутри основного кода операции или кодов операции. Эти поля определяют направление работы команды, размер смещений, кодировку регистров или расширение знаком; эти поля кодировки изменяются в зависимости от класса операции. Большинство команд, которые могут обращаться к операнду в памяти, имеют байт формы адресации, следующий после байта (байтов) основного кода операции. Этот байт, называемый ModR/M , задает используемую форму адреса. Некоторые кодировки байта ModR /M указывают на второй байт адресации, SIB (Масштабный коэффициент Индекс База), который следует за байтом ModR/M и необходим для полного определения формы адресации. Некоторые формы адресации могут включать величину смещения, непосредственно следующую за байтами ModR/M или SIB. При наличии смещения оно может занимать 8, 16 или 32 бита. Если в команде задан непосредственный операнд, то он всегда следует за байтами смещения. Непосредственный операнд, если он задан, всегда является последним полем команды.
Ниже приводятся допустимые коды префиксов команд:
F3H префикс REP (используется только со строковыми командами)
F3H префикс REPE/REPZ (используется только со строковыми командами).
F2H префикс REPNE/REPNZ (используется только со строковыми командами).
F0H префикс LOCK
Ниже приволятся префиксы переопределения сегментов: