Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КС-ZAO / Лекции ЦЭВМруский вариант11.doc
Скачиваний:
188
Добавлен:
07.02.2016
Размер:
15.82 Mб
Скачать

Расширенные версии инструкций процессора 8086

В наборе инструкций процессора 80186 имеются следующие расширенные версии инструкций процессора 8086:

IMUL ROL SAR

PUSH ROR SHL

RCL SAL SHR

RCR

Занесение в стек промежуточных значений

В то время как процессор 8086 может заносить в стек только регистровые операнды или операнды в памяти, процессор 80186 может заносить в него также и промежуточные значения: push 19

Сдвиги и циклические сдвиги c непосредственными значениями

В то время как процессор 8086 может может только выполнять сдвиг или циклический сдвиг на 1 бит или на число битов, заданное в CL, процессор 80186 может выполнять сдвиг или циклический сдвиг на значение-константу:

ror ax,3

shl dl,7

Умножение на непосредственное значение

Процессор 8086 может умножать только 8- или 16-разрядный регистр или операнд в памяти на AL или AX, размещая результат в AX или DX:AX. В процессоре 80186 предусмотрены две новые формы умножения, которые используются, когда 16-разрядное умножение будет размещаться в 16 битах.

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

imul dx,4

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

Еще одна новая форма умножения перемножает 16-разрядный регистр или операнд в памяти на 16-битовое непосредственное значение, и сохраняет результат в заданном 16-битовом регистре. Например, следующая инструкция умножает DX на 600h и помещает произведение в CX:

imul cx,dx,600h

Аналогично, следующая инструкция умножает 16-разрядное значение в [BX+SI+1] на 3 и помещает произведение в AX.

imul ax,[bx+si+1],3

В данной форме инструкции IMUL первый операнд представляет собой приемник. Этот операнд может быть любым 16-разрядным общим регистром. Второй операнд, который может задаваться любым 16-разрядным общим регистром или ячейкой памяти, является источником одного из сомножителей. Третий операнд, который должен задаваться 16-битовым непосредственным значением, - это другой сомножитель.

Первая из новых форм умножения - это в действительности подмножество второй новой формы. Например, следующая инструкция:

Imul si,10 это просто сокращенная форма инструкции:

imul si,si,10

Для обеих новых форм инструкции IMUL соответствующий шестнадцатиричный код будет одинаковым. Тем не менее, удобно иметь возможность использовать более простую форму инструкции IMUL с двумя операндами, когда один и тот же регистр используется и как источник, и как приемник.

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

Соседние файлы в папке КС-ZAO