Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Формат машинной команды




Машинная команда представляет закодированное по определенным правилам указание на выполнение некоторой операции или действия. Структура большинства команд микропроцессора 8086 показана на рис. 13.

 

Prefixes Op Code ModeRegR/M SIB Displacement Immediate

 

Рис. 13. Формат машинной команды.

 

В общем случае код команды включает:

- префиксы (Prefixes) – 0–3 байта;

- кода операции (Op Code) – 1 байт;

- байт ModRegR/M – 1 байт;

- байт масштаб-индекс-база SIB (Scale-Index-Base) – 1 байт;

- отклонение (Displacement) – 0–2 байта;

- непосредственный операнд (Immediate) – 0–2 байта.

В любой инструкции всегда присутствует код операции. Остальные поля используются по мере необходимости. Реальная команда может содержать не все поля и в пределе только один код операции. Опишем назначения полей машинной команды.

Префиксы модифицируют выполнение команды. Код каждого префикса занимает один байт. Микропроцессор 8086 имеет 7 префиксов, разделенных на три группы. В коде одной команды могут присутствовать до трёх префиксов, обязательно относящихся к разным группам.

В первую группу входит единственный префикс блокировки шины LOCK (см. раздел 11). Когда он присутствует в команде, на всё время выполнения инструкции системная шина захватывается данным микропроцессором, блокируя запросы к ней со стороны других процессоров многопроцессорной системы.

Во вторую группу входят префиксы повторения операции REP/REPE/REPZ и REPNE/REPNZ. Они используются совместно со строковыми операциями с целью обработки нескольких байтов или слов одной командой (см. раздел 7). Префиксы блокировки шины и повторения в программе на языке ассемблера располагаются непосредственно перед мнемоникой основной команды, совместно с которой они используются.

К третьей группе относятся префиксы замены сегмента. Префикс указывает на используемый для адресации в данной команде сегментный регистр (см. раздел 4). Префикс отменяет выбор сегментного регистра по умолчанию. Всего существует четыре префикса замены сегмента CS/DS/SS/ES. В отличие от префиксов других групп, префиксы замены сегмента указываются после мнемоники основной команды.

Код операции задаёт выполняемую процессором операцию, а также может полностью или частично определять операнды, используемые в данной операции. Многие арифметико-логические инструкции способны обрабатывать данные размером байт или слово. Коды операций для этих команд отличаются значением младшего бита: нулевое значение соответствует обработке байтов, единичное – слов. В некоторых инструкциях часть кода операции входит в состав байта ModRegR/M, занимая в нём три разряда, соответствующие полю Reg.

Некоторые команды предназначены для обработки содержимого регистра общего назначения и имеют однобайтовый код операции: старшие пять разрядов задают операцию, а младшие три – номер используемого регистра. Например, инструкция DEC AX имеет код операции 48, инструкция DEC CX – код операции 49.

Байт ModRegR/M служит для определения расположения операндов и состоит из трёх полей (рис. 14).

 

 

Mod Reg R/M

7 6 5 3 2 0

 

Рис. 14. Назначение разрядов байта ModRegR/M.

 

 

Поле Mod определяет местоположение одного из операндов инструкции – в регистре или в памяти. В последнем случае совместно с полем R/M поле определяет способ вычисления исполнительного адреса операнда.

Поле Reg указывает на регистр, являющийся операндом инструкции, либо является расширением кода операции. Как номер регистра-операнда поле Reg используется только в инструкциях вида «регистр-регистр» или «регистр-память». В инструкциях вида «регистр-непосредственный операнд», а также в инструкциях, имеющих только один явно заданный операнд, поле является частью кода операции.

Поле R/M содержит номер регистра-операнда инструкции, либо совместно с полем Mod определяет способ вычисления исполнительного адреса операнда, находящегося в памяти. Интерпретация поля R/M зависит от содержимого поля Mod.

Кодировка регистров общего назначения в полях Reg и R/M показана в табл. 2. Разрядность регистра (8- или 16-разрядный) зависит от разрядности выполняемой инструкции и определяется кодом операции.

 

Табл. 2. Коды регистров.

Регистр Код
AX или AL  
CX или CL  
DX или DL  
BX или BL  
SP или AH  
BP или CH  
SI или DH  
DI или BH  

 

Значение 00 указывает, что при вычислении исполнительного адреса операнда отклонение не используется. Значение 01 указывает, что используется 8-разрядное отклонение, находящееся в байте, следующем за байтом ModRegR/M. Значение 10 указывает, что используется 16-разрядное отклонение, записанное в двух байтах, следующих за байтом ModRegR/M.

 

 

Табл. 3. Коды поля ModRegR/M.

R/M Mod
       
  [BX+SI] [BX+SI]+disp8 [BX+SI]+disp16 AX/AL
  [BX+DI] [BX+DI]+disp8 [BX+DI]+disp16 CX/CL
  [BP+SI] [BP+SI]+disp8 [BP+SI]+disp16 DX/DL
  [BP+DI] [BP+DI]+disp8 [BP+DI]+disp16 BX/BL
  [SI] [SI]+disp8 [SI]+disp16 SP/AH
  [DI] [DI]+disp8 [DI]+disp16 BP/CH
  disp16 [BP]+disp8 [BP]+disp16 SI/DH
  [BX] [BX]+disp8 [BX]+disp16 DI/BH

 

 

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

Когда в состав исполнительного адреса входит содержимое регистра BP, для формирования адреса операнда используется сегмент стека, находящийся в регистре SS. Если при вычислении адреса регистр BP не используется, физический адрес формируется с помощью сегмента данных из регистра DS. В любом случае используемый по умолчанию сегментный регистр может быть изменён с помощью префикса замены сегмента, входящего в состав кода команды.

Байт масштаб-индекс-база SIB используется для расширения возможностей адресации операндов. На наличие байта SIB в машинной команде указывает сочетание одного из значений 01 или 10 поля Mod и значения поля R/M = 100. Байт SIB состоит из трех полей (рис. 15):

- В поле масштаба SS размещается масштабный множитель для индексного компонента Index, занимающего следующие три бита байта. В поле может находиться числа, кратные степени двойки. При вычислении исполнительного адреса на это значение умножается содержимое индексного регистра.

- Поле Index используется для хранения номера индексного регистра, который используется для вычисления исполнительного адреса операнда.

- Поле Base используется для хранения номера базового регистра, который также применяется для вычисления исполнительного адреса операнда. В качестве базового и индексного регистров могут использоваться регистры общего назначения.

 

SS Index Base

7 6 5 3 2 0

Рис. 15. Назначение разрядов байта SIB.

 

 

Отклонение является 8- или 16-разрядной величиной, используемой при вычислении исполнительного адреса операнда. Один или два байта отклонения располагаются в коде команды сразу за байтом ModRegR/M. Для 16-разрядного отклонения сначала идёт младший, затем – старший байты. Наличие отклонения определяется содержимым байта ModRegR/M:

- 16-разрядное отклонение присутствует в двух случаях: когда поле Mod байта ModRegR/M содержит значение 10, либо когда поле Mod содержит значение 00, а поле R/M – значение 110;

- 8-разрядное отклонение присутствует, когда поле Mod содержит значение 01.

Непосредственный операнд может быть 8- или 16-разрядной величиной и присутствует в командах вида «регистр-непосредственный операнд» и «память–непосредственный операнд». Его наличие определяется кодом операции, который состоит из байта кода операции и поля Reg байта ModRegR/M. Поля Mod и R/M этого байта определяют местоположение второго операнда – в регистре общего назначения или в памяти. Непосредственный операнд располагается в коде команды за отклонением, а если оно отсутствует – за байтом ModRegR/M.




Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 1199; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.