КАТЕГОРИИ: Архитектура-(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.
Рис. 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).
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. Коды регистров.
Значение 00 указывает, что при вычислении исполнительного адреса операнда отклонение не используется. Значение 01 указывает, что используется 8-разрядное отклонение, находящееся в байте, следующем за байтом ModRegR/M. Значение 10 указывает, что используется 16-разрядное отклонение, записанное в двух байтах, следующих за байтом ModRegR/M.
Табл. 3. Коды поля ModRegR/M.
Поле 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 используется для хранения номера базового регистра, который также применяется для вычисления исполнительного адреса операнда. В качестве базового и индексного регистров могут использоваться регистры общего назначения.
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; Просмотров: 1201; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |