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

3. Логические команды

ANDприемник, источник; 8086, логическое И.

andd,s;s&d d

Команда выполняет побитовое «логическое И» над приемником и источником (источник и приемник не могут быть переменными одновременно) и помещает результат в приемник. Любой бит результата равен 1, толь­ко если соответствующие биты обоих операндов были равны 1, и равен 0 в остальных случаях.

ORприемник, источник; 8086, логическое ИЛИ.

ord,s;s!d d

Выполняет побитовое «логическое ИЛИ» над приемником и источником (источ­ник и приемник не могут быть переменными одновременно) и помеща­ет результат в приемник. Любой бит результата равен 0, только если со­ответствующие биты обоих операндов были равны 0, и равен 1 в остальных случаях.

XORприемник, источник; 8086, логическое исключающее ИЛИ.

xor d, s; s xor d  d

Выполняет побитовое «логическое исключающее ИЛИ» над прием­ником и источником (источник и приемник не могут быть переменными одновре­менно) и помещает результат в приемник. Любой бит результата равен 1, если соответствующие биты операндов различны, и нулю, если оди­наковы.

NOT приемник; 8086, инверсия

not s; ¬(s)  s

Каждый бит приемника, равный нулю, ус­танавливается в 1, и каждый бит, равный 1, сбрасывается в 0. Флаги не затрагиваются.

TESTприемник, источник; 8086, логическое сравнение.

andd,s;s&d

Вычисляет результат действия побитового «логического И» над при­емником и источником (источник и приемник не могут быть переменными одновре­менно) и устанавливает флаги SF,ZFиPFв соответствии с полученным результатом, не сохраняя результат (флагиOFиCFобнуляются, значе­ниеAFне определено).TEST, так же как и СМР, используется в основ­ном в сочетании с командами условного перехода(Jcc).

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

a)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, выполненным последователь­но. Схема всех сдвиговых операций приведена на рис. 2.1.

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

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

b)RORприемник, счетчик; 8086, циклический сдвиг вправо.

ROLприемник, счетчик; 8086, циклический сдвиг влево.

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

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

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