Формат команд

Формат команд. Команды МП 80386 состоят из отдельных элементов и могут иметь различные форматы. Из всех описанных ниже элементов только один (код операции, Коп) обязательно присутствует в любой команде.

Остальные элементы могут отсутствовать, что определяется характером операции, а также местоположением и типом операндов. Команды состоят из следующих элементов: необязательных префиксов; одного или двух байтов кодов операции; возможно - описателя адреса, который включает байт Mod R/M и байт масштаба, индекса и базы; смещения - если требуется; поля непосредственных данных - если требуется. Префиксы - один или несколько байтов, предшествующих команде и модифицирующих операцию этой команды.

Имеется 4 типа префиксов. 1. Повторение используется с командами обработки строк; заставляет команду воздействовать на каждый элемент строки. 2. Размер операнда - переключает разрядность операндов, устанавливая их 32-разрядными или 16-разрядными. 3. Размер адреса - переключает разрядность адреса, определяя образование 32-разрядных или 16-разрядных адресов. 4. Замена сегмента - в явной форме указывает, какой сегментный регистр должна использовать команда. Префикс отменяет действующий по умолчанию выбор сегментного регистра, обычно осуществляемый МП 80386 при выполнении этой команды.

Код операции (Коп) - описывает операцию, выполняемую командой. Некоторым командам присущи несколько кодов операций, каждый из которых описывает определенный вариант операции. Описатель регистра - в команде могут быть описаны один или два регистра в качестве операндов. Описатель регистра может присутствовать как в байте кода операции, так и в байте описателя режима адресации. Описатель режима адресации.

Этот элемент, если он присутствует, описывает, является ли операнд содержимым регистра или ячейки памяти. Если операнд находится в памяти, описатель режима указывает, надо ли использовать смещение, индексный регистр, регистр базы и масштабирование. Байты MOD R/M и SIB. Большинство команд, ссылающихся на операнд, находящийся в памяти, содержат после байта основного кода операции еще байт формы адресации. Этот байт описывает используемую форму адреса. Определенные значения кода поля MOD R/M указывают на наличие второго адресного байта SIB. Байты MOD R/M и SIB содержат следующую информацию: - тип индексации или номер регистра, используемого в команде; - используемый регистр или дополнительную информацию о выборе команды; - информацию о базе, индексе и масштабе; Смещение.

Если описатель режима адресации указывает, что при вычислении адреса операнда будет использовано смещение, в состав кода команды включается поле смещения. Смещение представляет собой 8 16- или 32-разрядное целое число со знаком. 8-разрядная форма используется в тех случаях, когда значение смещения невелико. Непосредственный операнд (данное) . Если этот элемент присутствует, он представляет значение операнда команды.

Непосредственные операнды могут быть 8 16- или 32-разрядными. В случаях когда 8-разрядный непосредственный операнд используется в команде вместе с 16- или 32-разрядным операндом, процессор автоматически увеличивает размер 8-разрядного операнда путем расширения его знакового разряда.