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

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

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

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

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

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

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

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

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

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

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

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

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

На рис. 1 показан принцип работы этих команд:

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

...

bcd_dig dw 0905h;описание неупакованного BCD-числа 95

...

mov ax,bcd_dig;пересылка

shl ah,4;сдвиг влево

add al,ah;сложение для получения результата: al=95h

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

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

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: