Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
I8086.DOC
Скачиваний:
64
Добавлен:
02.05.2014
Размер:
1.36 Mб
Скачать

Префиксы

Префиксы модифицируют выполнение основной команды. Код каждого префикса занимает один байт.

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

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

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

Префиксы блокировки шины и повторения в программе на языке ассемблера располагаются непосредственно перед мнемоникой основной команды, совместно с которой они используются, например: LOCK OR [BX], AL.

К третьей группе относятся четыре префикса замены сегмента, имеющих следующие коды: 26 – сегмент ES, 2E– сегментCS, 36 – сегментSS, 3E– сегментDS. В отличие от префиксов двух других групп, префиксы замены сегмента на языке ассемблера указываются уже после мнемоники основной команды и входят в состав операнда в памяти, сегмент которого они явно указывают, например:MOV ES:[BX], CX.

Некоторые сложности при программировании на языке ассемблера могут возникнуть при необходимости использовать префикс замены сегмента совместно со строковой операцией. Операнды строковых команд располагаются в сегментах DSиES, причём заменить на другой можно только сегментDS. Проблема заключается в том, что строковые инструкции не имеют явно задаваемых операндов, поэтому некуда включить префикс замены сегмента. Некоторые трансляторы с языка ассемблера, напримерMASMфирмыMicrosoftиTASMфирмыBorlandпозволяют совместно с мнемоникой строковой операции указать формальные операнды, проверяемые синтаксически, но не играющие никакой роли при формировании кода операции. В этих операндах может быть указан и префикс замены сегмента. В некоторых случаях, однако, приходится вносить в программу непосредственно код префикса замены сегмента, предшествующий соответствующей строковой инструкции. Например, следующие две строки на языке ассемблера задают выполнение операции пересылки строкMOVSBс использованием префикса повторенияREPи префикса замены сегментаCS:

DB 2Eh

REP MOVSB

Код операции

Код операции задаёт выполняемую процессором операцию, а также может полностью или частично определять операнды, используемые в данной операции.

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

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

Полная сводка кодов операций микропроцессора 8086 приведена в приложении.