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

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

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

Необходимо строго следить, чтобы длина возврата соответствовала длине вызова процедуры. Например, если для вызова использовалась инструкция длинного перехода, то и возврат должен быть длинным. Нарушение этого правила приведёт к неверному выполнению операции возврата и к разрушению информации в стеке, последствия чего будут непредсказуемыми.

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

D0 /0

ROL r/m8, 1

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

D2 /0

ROL r/m8, CL

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

D1 /0

ROL r/m16, 1

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

D3 /0

ROL r/m16, CL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

D0 /1

ROR r/m8, 1

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

D2 /1

ROR r/m8, CL

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

D1 /1

ROR r/m16, 1

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

D3 /1

ROR r/m16, CL

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

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

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

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

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

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

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

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

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

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

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