Справочник по языку Ассемблера IBM PC

Команды линейного сдвига


К командам этого типа относятся команды, осуществляющие сдвиг по следующему алгоритму:

очередной “выдвигаемый” бит устанавливает флаг cf;

бит, вводимый в операнд с другого конца, имеет значение 0;

при сдвиге очередного бита он переходит во флаг cf, при этом значение предыдущего сдвинутого бита теряется!

Команды линейного сдвига делятся на два подтипа:

команды логического линейного сдвига;

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

·

К командам логического линейного сдвига относятся следующие:

операнд,счетчик_сдвигов (Shift Logical Left) - логический сдвиг влево.


Содержимое операнда сдвигается влево на количество битов, определяемое значением счетчик_сдвигов. Справа (в позицию младшего бита) вписываются нули;

операнд,счетчик_сдвигов (Shift Logical Right) — логический сдвиг вправо.


Содержимое операнда сдвигается вправо на количество битов, определяемое значением счетчик_сдвигов. Слева (в позицию старшего, знакового бита) вписываются нули. На рис. 1 показан принцип работы этих команд.



Рис. 1. Схема работы команд линейного логического сдвига

Ниже показан фрагмент программы, который выполняет преобразование двух неупакованных BCD-чисел в слове памяти bcd_dig в упакованное BCD-число в регистре al.

        ... bcd_dig dw      0905h   ;описание неупакованного BCD-числа 95 ...         mov     ax,bcd_dig      ;пересылка         shl     ah,4    ;сдвиг влево         add     al,ah   ;сложение для получения результата: al=95h

Команды арифметического линейного сдвига отличаются от команд логического сдвига тем, что они особым образом работают со знаковым разрядом операнда.

операнд,счетчик_сдвигов (Shift Arithmetic Left) —

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


Содержимое операнда сдвигается влево на количество битов, определяемое значением счетчик_сдвигов. Справа (в позицию младшего бита) вписываются нули. Команда sal не сохраняет знака, но устанавливает флаг cf в случае смены знака очередным выдвигаемым битом. В остальном команда sal полностью аналогична команде shl;

операнд,счетчик_сдвигов (Shift Arithmetic Right) — арифметический сдвиг вправо.


Содержимое операнда сдвигается вправо на количество битов, определяемое значением счетчик_сдвигов. Слева в операнд вписываются нули. Команда sar сохраняет знак, восстанавливая его после сдвига каждого очередного бита.


На рис. 2 показан принцип работы команд линейного арифметического сдвига.

Рис. 2. Схема работы команд линейного арифметического сдвига 



Содержание раздела