Каждая команда представляет
собой закодированную информацию, содержащую код операции, подлежащей
выполнению, тип операндов для данной операции и указание на расположение этих
операндов. Если операнд расположен в памяти, в команде может содержаться явное
или неявное указание на сегмент, содержащий указанный операнд.
Команды состоят
из отдельных элементов и могут иметь различные форматы. Точный формат команд
приведен в Приложении B, а ниже описываются основные для всех команд элементы.
Из всех описанных ниже элементов только один (код операции, Коп) обязательно
присутствует в любой команде. Остальные элементы могут отсутствовать, что
определяется характером операции, а также местоположением и типом операндов.
Ниже описаны элементы команды в том порядке, как они расположены в команде:
- Префиксы: один
или несколько байтов, предшествующих команде и модифицирующих операцию этой
команды. Следующие префиксы могут быть использованы в прикладных программах:
1. Замена
(подавление) сегмента - в явной форме указывает, какой сегментный регистр
должна использовать программа. Префикс отменяет действующий по умолчанию выбор
сегментного регистра.
2. Размер адреса
- переключает разрядность адреса, определяя образование 32-разрядных или
16-разрядных адресов. Любой из этих размеров может быть выбираемым по
умолчанию: данный префикс выбирает альтернативный размер.
3. Размер
операнда - переключает разрядность операндов, устанавливая их 32-разрядными или
16-разрядными. Любой из этих размеров может быть выбираемым по умолчанию:
данный префикс выбирает альтернативный размер.
4. Повторение -
используется с командами обработки строк; заставляет команду воздействовать на
каждый элемент строки.
- Код операции
(Коп): описывает операцию, выполняемую командой. Некоторым командам присущи
несколько кодов операций, каждый из которых описывает определенный вариант
операции.
- Описатель
регистра: в команде могут быть описаны один или два регистра в качестве
операндов. Описатель регистра может присутствовать как в байте кода операции,
так и в байте описателя режима адресации.
- Описатель
режима адресации: этот элемент, если он присутствует, описывает, является ли
операнд содержимым регистра или ячейки памяти. Если операнд находится в памяти,
описатель режима указывает, надо ли использовать смещение, индексный регистр,
регистр базы и масштабирование.
- SIB
(scale-index-base, масштаб-индакс-база) байт: когда описатель режима адресации
указывает на использование индексного регистра для вычисления адреса операнда,
SIB байт используется для кодирования в команде базового регистра, индексного
регистра и коэффициента масштабирования.
- Смещение: Если
описатель режима адресации указывает, что при вычислении адреса операнда будет
использовано смещение, в состав кода команды включается поле смещения. Смещение
представляет собой 8-, 16- или 32-разрядное целое число со знаком. 8-разрядная
форма используется в тех случаях, когда значение смещения невелико. Процессор
автоматически увеличит 8 -разрядное смещение до 16- или 32-разрядов, путем
распространения его знакового разряда.
-
Непосредственный операнд: Если этот элемент присутствует, он представляет
значение операнда команды. Непосредственные операнды могут быть 8-, 16 или
32-разрядными. В случаях когда 8-разрядный непосредственный операнд
используется в команде вместе с 16- или 32-разрядным операндом, процессор
автоматически увеличивает размер 8-разрядного операнда путем расширения его
знакового разряда. Таким же способом 16-разрядный операнд преобразуется в
32-разрядный.