Машинная команда представляет собой закодированное по определенным правилам указание микропроцессору на выполнение некоторой операции или действия. Каждая команда содержит элементы, определяющие: 1) что делать? 2) объекты, над которыми нужно что-то делать (эти элементы называются операндами); 3) как делать? Максимальная длина машинной команды – 15 байт. 1) Префиксы. Необязательные элементы машинной команды, каждый из которых состоит из 1 байта или может отсутствовать. В памяти префиксы предшествуют команде. Назначение префиксов – модифицировать операцию, выполняемую командой. Прикладная программа может использовать следующие типы префиксов: 1) префикс замены сегмента; 2) префикс разрядности адреса уточняет разрядность адреса (32– или 16-разрядный); 3) префикс разрядности операнда аналогичен префиксу разрядности адреса, но указывает на разрядность операндов (32– или 16-разрядные), с которыми работает команда; 4) префикс повторения используется с цепочечными командами. 2) Код операции. Обязательный элемент, описывающий операцию, выполняемую командой. 3) Байт режима адресации modr/m. Значения этого байта определяет используемую форму адреса операндов. Операнды могут находиться в памяти в одном или двух регистрах. Если операнд находится в памяти, то байт modr/m определяет компоненты (смещение, базовый и индексный регистры), используемые для вычисления его эффективного адреса. Байт modr/m состоит из трех полей: 1) поле mod определяет количество байт, занимаемых в команде адресом операнда; 2) поле reg/коп определяет либо регистр, находящийся в команде на месте первого операнда, либо возможное расширение кода операции; 3) поле r/m используется совместно с полем mod и определяет либо регистр, находящийся в команде на месте первого операнда (если mod = 1 1), либо используемые для вычисления эффективного адреса (совместно с полем смещение в команде) базовые и индексные регистры. 4) Байт масштаб – индекс – база (байт sib). Используется для расширения возможностей адресации операндов. Байт sib состоит из трех полей: 1) поля масштаба ss. В этом поле размещается масштабный множитель для индексного компонента index, занимающего следующие 3 бита байта sib; 2) поля index. Используется для хранения номера индексного регистра, который применяется для вычисления эффективного адреса операнда; 3) поля base. Используется для хранения номера базового регистра, который также применяется для вычисления эффективного адреса операнда. 5) Поле смещения в команде. 8-, 16– или 32-разрядное целое число со знаком, представляющее собой, полностью или частично (с учетом вышеприведенных рассуждений), значение эффективного адреса операнда. 6) Поле непосредственного операнда. Необязательное поле, представляющее собой 8-, 16– или 32-разрядный непосредственный операнд. Наличие этого поля, конечно, отражается на значении байта modr/m.