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

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

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

      1. Sahf– загрузкаAHв регистр флагов

9E

SAHF

загрузка содержимого регистра AH в младший байт регистра FLAGS

Описание.Значащие разряды младшего байта регистраFLAGSустанавливаются в соответствии с соответствующими разрядами регистраAH. Содержимое зарезервированных разрядов (битов 1, 3 и 5) не изменяется.

Флажкиустанавливаются в соответствии с содержимымAH.

      1. Sal – арифметический сдвиг влево

D0 /4

SAL r/m8, 1

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

D2 /4

SAL r/m8, CL

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

D1 /4

SAL r/m16, 1

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

D3 /4

SAL r/m16, CL

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

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

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

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

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

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

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

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

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

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

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

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

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

      1. Sar– арифметический сдвиг вправо

D0 /7

SAR r/m8, 1

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

D2 /7

SAR r/m8, CL

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

D1 /7

SAR r/m16, 1

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

D3 /7

SAR r/m16, CL

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

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

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

┌───┐                

│ ┌┴────────┐ ┌──┐

└─►│ операнд ├──►│CF│

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

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

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

Флажок OFсбрасывается, поскольку при арифметическом сдвиге вправо состояние старшего (знакового) разряда операнда никогда не изменяется.

Флажки SF,ZF,AFиPFне изменяются.