Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Организация ЭВМ.doc
Скачиваний:
132
Добавлен:
01.05.2014
Размер:
505.34 Кб
Скачать

4. Сдвиговые команды.

SARприемник, счетчик;

8086,арифметический сдвиг вправо.

SALприемник, счетчик;

8086, арифметический сдвиг влево.

SHRприемник, счетчик;

8086, логический сдвиг вправо.

SHLприемник, счетчик;

8086, логический сдвиг влево.

Эти четыре команды выполняют двоичный сдвиг приемника вправо или влево на значение счетчика (число или регистр CL,из которого учитываются только младшие пять бит, которые могут принимать значения от 0 до 31). Операция сдвига на 1 эквивалентна ум­ножению (сдвиг влево) или делению (сдвиг вправо) на 2. Так, число 0010b (2)после сдвига на 1 влево превращается в 0100b (4). КомандыSALи SHLвыполняют одну и ту же операцию (на самом деле это одна и та же команда) - на каждый шаг сдвига старший бит заносится в CF,

всебиты сдвигаются влево на одну позицию, и младший бит обнуляет­ся. Команда SHRвыполняет прямо противоположную операцию: млад­ший бит заносится в CF, все биты сдвигаются на 1 вправо, старший бит обнуляется. Эта команда эквивалентна беззнаковому целочисленному делению на 2. Команда SARдействует по аналогии с SHR, только стар­ший бит не обнуляется, а сохраняет предыдущее значение, так что, на-

пример, число 11111100b (-4)перейдет в 11111110b (-2). SAR,таким образом, эквивалентна знаковому делению на 2, но, в отличие от IDIV, округление происходит не в сторону нуля, а в сторону отрицательной бесконечности. Так, если разделить -9 на 4 с помощью IDIV, результат будет -2 (и остаток -1), а если выполнить арифметический сдвиг впра­во числа -9 на 2, результат будет -3. Сдвиги больше чем на 1 эквива­лентны соответствующим сдвигам на 1, выполненным последователь­но. Схема всех сдвиговых операций приведена на рис. 7.

Сдвиги на 1 изменяют значение флага OF: SAL/SHLустанавливают его в 1, если после сдвига старший бит изменился (то есть старшие два бита исходного числа не были одинаковыми), и в 0, если старший бит остался тем же. SAR устанавливает OFв 0, и SHR устанавливает OF в значение старшего бита исходного числа. Для сдвигов на несколько бит значение OFне определено. Флаги SF, ZF, PFустанавливаются все­ми сдвигами в соответствии с результатом, значение AFне определено (кроме случая, если счетчик сдвига равен нулю, в котором ничего не происходит и флаги не изменяются).

В процессорах 8086 непосредственно можно задавать в каче­стве второго операнда только число 1 и при использовании CLучиты­вать все биты, а не только младшие 5.

RORприемник, счетчик;

8086, циклический сдвиг вправо.

ROLприемник, счетчик;

8086, циклический сдвиг влево

RCRприемник, счетчик;

8086, циклический сдвиг вправо через флаг переноса.

RCLприемник, счетчик;

8086, циклический сдвиг влево через флаг переноса.

Эти команды осуществляют циклический сдвиг приемника на число бит, указанное в счетчике (число или регистр CL,из которого учитываются только младшие пять бит, принимающие значения от 0 до 31). При выполнении циклического сдвига на 1 коман­ды ROR (ROL)сдвигают каждый бит приемника вправо (влево) на одну позицию, за исключением самого младшего (старшего), который записывается в позицию самого старшего (младшего) бита. КомандыRCR, RCLвыполняют аналогичное действие, но включают флагCFв цикл, как если бы он был дополнительным битом в приемнике.