Инструменты пользователя

Инструменты сайта


examination:asm:question41

Вопрос №41. Команды арифметического сдвига

Команды сдвига предназначены для непосредственного смещения бит в байте, слове или двойном слове. Для этого предназначены следующие команды SHR сдвиг влево SHL сдвиг вправо SAL арифметический сдвиг влево SAR арифметический сдвиг вправо ROL циклический сдвиг влево ROR циклический сдвиг вправо

SHR,SHL Записывается как SHR ax,5 (сдвиг на 5 бит вправо), при выполнении этих команд выдвинутый бит попадает в о флаг CF, а освобожденное место заполняется 0.Можно использовать эти команды для деления беззнаковых чисел на степень двойки.

ROL,ROR Данные команды осуществляют циклический сдвиг битов, то есть бит, выдвинутый слева, попадает на место освободившегося бита справа и наоборот, поэтому они называются циклическими.

Дальше не обязательно- про арифметический сдвиг SAL,SAR Арифметический сдвиг, записывается как SAR ax,5 (сдвиг на 5 бит вправо). При выполнении команды, SAR старший знаковый бит остается точно таким же, что позволяет организовать деление чисел со знаком на степень двойки, выдвинутый бит помещается в CF. Команда SAL работает аналогично команде SHL

и иначе)

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

1. Очередной ≪выдвигаемый≫ бит устанавливает флаг CF.

2. Бит, появляющийся с другого конца операнда, имеет значение 0.

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

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

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

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

sаl операнд,счетчик_сдвигов — арифметический сдвиг влево (Shift Arithmetic Left). Содержимое операнда сдвигается влево на количество битов, определяемое значением счетчик_сдвигов. Справа (в позицию младшего бита) вписываются нули. Команда SAL не сохраняет знака, но устанавливает флаг OF в случае смены знака очередным выдвигаемым битом. В остальном команда SAL полностью ана- логична команде SHL;

sar операнд,счетчик_сдвигов — арифметический сдвиг вправо (Shift Arithmetic Right). Содержимое операнда сдвигается вправо на количество битов, опреде- ляемое значением счетчик_сдвигов. Слева в операнд вписываются нули. Коман- да SAR сохраняет знак, восстанавливая его после сдвига каждого очередного бита.

examination/asm/question41.txt · Последние изменения: 2014/01/15 12:13 (внешнее изменение)