Возможны три формата команд сопроцессора, аналогичные форматам команд центральных процессоров 8086/80286/80386. Это команды с обращением к оперативной памяти, команды с обращением к одному из численных регистров и команды без операндов, заданных явным образом.
Команды с обращением к памяти могут занимать от двух до четырех байтов, в зависимости от способа адресации операнда, находящегося в памяти:
¦1 байт ¦1 байт ¦1 байт ¦1 байт ¦ +-----T----+---T----T---+-----------+-----------+ ¦11011¦КОП1¦MOD¦КОП2¦R/M¦ Смещение1 ¦ Смещение2 ¦ L-----+----+---+----+---+-----------+------------
Первые пять битов соответствуют команде центрального процессора ESC. Поля КОП1 и КОП2 определяют выполняемую команду, т.е. содержат код операции. Поля MOD и R/M вместе с полями "Смещение1" и "Смещение2" задают адрес операнда в памяти аналогично тому, как это происходит в процессорах 8086/80286/80386. Однако есть и отличия, связанные с возможностью адресации численных регистров сопроцессора.
Приведем таблицу, показывающую зависимость способа адресации от содержимого полей MOD и R/M:
-----T----------------------------------------------¬ ¦Поле¦ Поле MOD ¦ ¦R/M +---------T---------------T----------------T---+ ¦ ¦ 00 ¦ 01 ¦ 10 ¦11 ¦ +----+---------+---------------+----------------+---+ ¦000 ¦(bx)+(si)¦(bx)+(si)+disp8¦(bx)+(si)+disp16¦ST0¦ ¦001 ¦(bx)+(di)¦(bx)+(di)+disp8¦(bx)+(di)+disp16¦ST1¦ ¦010 ¦(bp)+(si)¦(bp)+(si)+disp8¦(bp)+(si)+disp16¦ST2¦ ¦011 ¦(bp)+(di)¦(bp)+(di)+disp8¦(bp)+(di)+disp16¦ST3¦ ¦100 ¦ (si) ¦ (si)+disp8 ¦ (si)+disp16 ¦ST4¦ ¦101 ¦ (di) ¦ (di)+disp8 ¦ (di)+disp16 ¦ST5¦ ¦110 ¦ disp16 ¦ (bp)+disp8 ¦ (bp)+disp16 ¦ST6¦ ¦111 ¦ (bx) ¦ (bx)+disp8 ¦ (bx)+disp16 ¦ST7¦ L----+---------+---------------+----------------+----
Если в таблице указаны значения смещения disp8 или disp16, это означает, что в команде присуствует один или два байта смещения, соответственно.
Если поле MOD содержит значение 11, возможна адресация численных регистров ST0...ST1. При этом команда не содержит байтов смещения.