Assembler - язык неограниченных возможностей

Не знаете где отдохнуть? Мы предлагаем отдых в Сочи, расположен тут

Сдвиговые операции - часть 2


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

  • Команда:
  • SHRD приемник, источник, счетчик
  • Назначение:
  • Сдвиг повышенной точности вправо
  • Команда:
  • SHLD приемник, источник, счетчик
  • Назначение:
  • Сдвиг повышенной точности влево
  • Процессор:
  • 80386

    Приемник (регистр или переменная) сдвигается влево (в случае SHLD) или вправо (в случае SHRD) на число бит, указанное в счетчике (число или регистр CL, откуда используются только младшие 5 бит, которые могут принимать значения от 0 до 31). Старший (для SHLD) или младший (в случае SHRD) бит не обнуляется, а считывается из источника (регистр), значение которого не изменяется. Например, если приемник содержал 00101001b, источник 1010b, счетчик равен 3, SHRD даст в результате 01000101b, a SHLD — 01001101b (см. рис. 8).


    Рис. 8. Сдвиги двойной точности


    Рис. 8. Сдвиги двойной точности


    Флаг OF устанавливается при сдвигах на 1 бит, если изменился знак приемника, и сбрасывается, если знак не изменился; при сдвигах на несколько бит флаг OF не определен. Во всех случаях SF, ZF и PF устанавливаются в соответствии с результатом и AF не определен, кроме случая со сдвигом на 0 бит, в котором значения флагов не изменяются. Если счетчик больше, чем разрядность приемника, — результат и все флаги не определены.

  • Команда:
  • ROR приемник, счетчик
  • Назначение:
  • Циклический сдвиг вправо
  • Команда:
  • ROL приемник, счетчик
  • Назначение:
  • Циклический сдвиг влево
  • Команда:
  • RCR приемник, счетчик
  • Назначение:
  • Циклический сдвиг вправо через флаг переноса
  • Команда:
  • RCL приемник, счетчик
  • Назначение:
  • Циклический сдвиг влево через флаг переноса
  • Процессор:
  • 8086

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


    Рис. 9. Циклические сдвиги


    Рис. 9. Циклические сдвиги


    После выполнения команд циклического сдвига флаг CF всегда равен последнему вышедшему за пределы приемника биту, флаг OF определен только для сдвигов на 1 — он устанавливается, если изменилось значение самого старшего бита, и сбрасывается, если старший бит не изменился. Флаги SF, ZF, AF и PF не изменяются.





    Начало  Назад  Вперед