- •Основные понятия архитектуры и организации эвм.
- •1. Регистровая адресация
- •2. Непосредственная адресация
- •3. Прямая адресация
- •4. Косвенная адресация
- •5. Адресация по базе
- •6. Косвенная адресация с масштабированием
- •7. Адресация по базе с индексированием и масштабированием
- •4. Сдвиговые команды.
- •5. Команды передачи управления.
- •1. Директивы задания данных
- •2. Директивы сегментации программы
- •3. Директивы группирования.
- •4. Порядок размещения сегментов.
- •5. Директивы ограничения используемых команд.
- •3DNow! от amd
- •Первый способ
- •Второй способ
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в цикл, как если бы он был дополнительным битом в приемнике.