КАТЕГОРИИ: Архитектура-(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) |
Код операции
Код операции задаёт выполняемую процессором операцию, а также может полностью или частично определять операнды, используемые в данной операции. Многие арифметико-логические инструкции способны обрабатывать данные размером байт или слово (два байта). Коды операций для этих команд отличаются значением младшего бита: нулевое значение соответствует обработке байтов, единичное – слов. В некоторых инструкциях часть кода операции входит в состав байта ModRegR/M, занимая в нём три разряда, соответствующие полю Reg. Некоторые команды, предназначенные для обработки содержимого заданного регистра общего назначения, имеют однобайтовый код операции, старшие пять разрядов которого определяют операцию, а младшие три задают номер используемого регистра. Например, инструкция DEC AX имеет код операции 48, инструкция DEC CX – код операции 49 и т.п. Полная сводка кодов операций микропроцессора 8086 приведена в приложении. Байт ModRegR/M Основное назначение байта ModRegR/M – определять операнды, явно задаваемые в данной команде. Он состоит из трёх полей и имеет следующую структуру: ┌───┬───┬───┬───┬───┬───┬───┬───┐ │ M o d │ R e g │ R / M │ └───┴───┴───┴───┴───┴───┴───┴───┘ 7 6 5 4 3 2 1 0 Поле Mod определяет местоположение одного из операндов инструкции – в регистре или в памяти; в последнем случае совместно с полем R/M оно определяет способ вычисления эффективного адреса операнда (см. параграф “Операнды в памяти” подраздела 0 “Адресация операндов”). Поле Reg либо указывает регистр, являющийся операндом инструкции, либо является расширением кода операции. Как номер регистра-операнда поле Reg используется только в инструкциях вида “регистр–регистр” или “регистр–память”; в инструкциях вида “регистр–непосредственный операнд”, а также в инструкциях, имеющих только один явно заданный операнд, это поле является частью кода операции.
Поле R/M содержит либо номер регистра–операнда инструкции, либо совместно с полем Mod определяет способ вычисления эффективного адреса операнда, находящегося в памяти. Интерпретация поля R/M зависит от содержимого поля Mod. Кодировка регистров общего назначения в полях Reg и R/M осуществляется следующим образом: – AX или AL – 000; – CX или CL – 001; – DX или DL – 010; – BX или BL – 011; – SP или AH – 100; – BP или CH – 101; – SI или DH – 110; – DI или BH – 111. Разрядность используемого регистра (8- или 16-разрядный) определяется кодом операции. Местоположение операнда определяется полями Mod и R/M следующим образом.
Если поле Mod содержит значение 11, поле R/M определяет регистр общего назначения, являющийся операндом инструкции. Разрядность регистра зависит от разрядности выполняемой инструкции и определяется кодом операции. Значения поля Mod, равные 00, 01 и 10, определяют операнд в памяти. Значение 00 указывает, что при вычислении эффективного адреса операнда отклонение не используется; значение 01 указывает, что используется 8-разрядное отклонение, находящееся в байте, следующем за байтом ModRegR/M; значение 10 указывает, что используется 16-разрядное отклонение, записанное в двух байтах, следующих за байтом ModRegR/M, в обычном порядке (“младший–старший”).
Поле R/M для случая операнда в памяти определяет, содержимое каких регистров общего назначения будет использоваться при вычислении эффективного адреса операнда. Комбинация Mod=00 и R/M=110 является исключением из общего правила: эффективный адрес операнда равен 16-разрядному отклонению, следующему в коде команды непосредственно за байтом ModRegR/M; содержимое регистров общего назначения в формировании эффективного адреса для этого случая не используется. Когда в состав эффективного адреса входит содержимое регистра BP, для формирования физического адреса операнда используется селектор сегмента стека, находящийся в регистре SS. Если же при вычислении эффективного адреса регистр BP не используется, физический адрес формируется с помощью селектора сегмента данных их регистра DS. И в том, и в другом случае используемый по умолчанию сегментный регистр может быть изменён с помощью префикса замены сегмента, входящего в состав кода команды.
Дата добавления: 2014-01-07; Просмотров: 579; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |