Команды сдвигов и циклических сдвигов

Эти команды также обеспечивают манипуляции над отдельными битами, перемещая биты операнда влево или вправо на определенное число битов, в зависимости от кода операции. Количество битов, на которое выполняется сдвиг, определяется счетчиком сдвигов CNT. Значение счетчика может задаваться статически (непосредственно во втором операнде) или динамически (в регистре CL перед выполнением команды сдвига). Счетчик сдвигов может содержать значение в диапазоне от 0 до 31; современные процессоры могут выполнять 64- разрядные сдвиги.

В командах сдвига влево с правой стороны операнда «вдвигаются» нули, а старшие биты «выдвигаются» с левой стороны и теряются, но последний из них сохраняется во флаге CF. Команды сдвига вправо аналогичным образом сдвигают биты вправо. Но арифметический сдвиг вправо не помещает слева нули, а дублирует в старшие биты знак операнда. Команды циклического сдвига отличаются от команд сдвига тем, что операнд считается «кольцом», в котором выдвигаемые с одной стороны вдвигаются с другой стороны. Их описание представлено в таблице 4.9.

Таблица 4.9 - Формат команд сдвигов и циклических сдвигов

Название команды Мнемоника и формат команды Описание действия
Сдвинуть логически влево SHL OPR,CNT   Команды сдвигов и циклических сдвигов - student2.ru
Сдвинуть арифметически влево SAL OPR,CNT Не сохраняет знака, но устанавливает флаг OF в случае смены знака очередным выдвигаемым битом. В остальном полностью аналогична команде SHL.
Сдвинуть логически вправо SHR OPR,CNT   Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru
Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru Команды сдвигов и циклических сдвигов - student2.ru

Сдвинуть арифметически вправо SAR OPR,CNT   Сохраняет знак, восстанавливая его после сдвига каждого очередного бита. В остальном – аналогична команде SHR.
Сдвинуть циклически влево ROL OPR,CNT Команды сдвигов и циклических сдвигов - student2.ru
Сдвинуть циклически вправо ROR OPR,CNT Команды сдвигов и циклических сдвигов - student2.ru
Сдвинуть циклически влево через перенос RCL OPR,CNT Команды сдвигов и циклических сдвигов - student2.ru
Сдвинуть циклически вправо через перенос RCR OPR,CNT Команды сдвигов и циклических сдвигов - student2.ru

Команды арифметического сдвига позволяют выполнить «быстрое» умножение и деление операнда на степени двойки. Например, сдвиг числа влево на один разряд аналогичен его умножению на 2 (или на 10 в десятичной системе счисления). В командах циклического сдвига сдвигаемые биты поочередно становятся значением флага переноса CF.

Флажки SF, ZF, PF модифицируются командами сдвига, но команды циклических сдвигов на них не воздействуют. Флажок OF имеет смысл, если только счетчик равен 1. Команды сдвигов влияют на состояние флажка АF, но оно определенного смысла не имеет.

Что касается режимов адресации, то OPR может иметь любой режим адресации, кроме непосредственного.

Наши рекомендации