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

Замечания по программированию

При записи на языке ассемблера либо используется мнемоника SCASBилиSCASW, явно определяющая размер операндов, либо используется обобщённая мнемоникаSCASс указанием местоположения операнда в памяти. Следует, однако, помнить, что адресация операнда в памяти всегда осуществляется с помощью регистровой парыES:DI, поэтому указанный в данной инструкции адрес используется только для определения размера операнда и, возможно, для применения префикса замены сегмента. За правильность установки начальных значений регистров отвечает программист.

      1. Shl – логический сдвиг влево

D0 /4

SHL r/m8, 1

логический сдвиг r/m8 влево на 1 разряд

D2 /4

SHL r/m8, CL

логический сдвиг r/m8 влево на CL разрядов

D1 /4

SHL r/m16, 1

логический сдвиг r/m16 влево на 1 разряд

D3 /4

SHL r/m16, CL

логический сдвиг r/m16 влево на CL разрядов

Описание.Эта инструкция производитлогический(он же арифметический – см. инструкциюSAL) сдвиг содержимого своего операнда влево на указанное вторым операндом число разрядов.

Сдвиг выполняется по следующей схеме:

┌──┐ ┌─────────┐   

│CF│◄──┤ операнд │◄─ 0

└──┘ └─────────┘    

Имеются две разновидности сдвига: одноразрядный и многоразрядный. В последнем случае количество разрядов, на которое производится сдвиг, должно быть предварительно занесено в регистр CL.

ФлажокCFсодержит значение последнего выдвинутого из операнда разряда.

Значение флажка OFв операции многоразрядного сдвига не определено. В операции одноразрядного сдвига он представляет собой результат операции “исключающее ИЛИ” между значением старшего разряда результата и содержимым флажкаCFпосле выполнения сдвига. Таким образом, единичное значение флажкаOFсвидетельствует о том, что содержимое старшего разряда результата отличается от его исходного значения, а нулевое значение – что старший разряд операнда не изменился.

Флажки SF,ZFиPFустанавливаются в соответствии с полученным результатом.

Значение флажка AFне определено.

Замечания по программированию

Микропроцессоры 8086 и 8088 не маскируют значение счётчика сдвига. Таким образом, сдвиг может быть выполнен на произвольное число разрядов от 0 до 255. В процессорах, начиная с 80286, в качестве счётчика сдвига используются только младшие 5 разрядов регистра CL, что ограничивает максимальное количество сдвигов (не более 31).

      1. Shr– логический сдвиг вправо

D0 /5

SHR r/m8, 1

логический сдвиг r/m8 вправо на 1 разряд

D2 /5

SHR r/m8, CL

логический сдвиг r/m8 вправо на CL разрядов

D1 /5

SHR r/m16, 1

логический сдвиг r/m16 вправо на 1 разряд

D3 /5

SHR r/m16, CL

логический сдвиг r/m16 вправо на CL разрядов

Описание.Эта инструкция производит логический сдвиг содержимого своего операнда вправо на указанное вторым операндом число разрядов.

Сдвиг выполняется по следующей схеме:

     ┌─────────┐ ┌──┐