Команды сдвига

При выполнении команд сдвига флаг CF всегда содержит значение последнего выдвинутого бита. Существуют следующие команды сдвига:

SHR;Логический (беззнаковый) сдвиг вправо

SHL;Логический (беззнаковый) сдвиг влево

SAR;Арифметический сдвиг вправо

SAL;Арифметический сдвиг влево

Следующий фрагмент иллюстрирует выполнение команды SHR:

MOV AX,10110111B; AX=10110111

SHR AX,4; 01011011;Сдвиг вправо на 4

Команда SHR сдвигает содержимое регистра AX вправо на 4 бит. Обратите внимание, что одна команда SHR AX,4 в отладчике выглядит как последовательность из четырех команд SHR AX,1. Это особенность языка Ассемблер в режиме masm. Выдвинутые в результате сдвига биты по очереди попадают в флаг CF, а самый левый бит регистра AX заполняется нулем.

Рассмотрим действие команд арифметического вправо SAR:

MOV AX,10110111B; AX=10110111

SAR AX,4; 11111011;Сдвиг вправо на 4

Команда SAR имеет важное отличие от команды SHR: для заполнения левого бита используется знаковый бит. Таким образом, положительные и отрицательные величины сохраняют свой знак. В приведенном примере знаковый бит содержит единицу.

При сдвигах влево правые биты заполняются нулями. Таким образом, результат команд сдвига SHL и SAL идентичен.

Сдвиг влево часто используется для удваивания чисел, а сдвиг вправо - для деления на 2. Эти операции осуществляются значительно быстрее, чем команды умножения или деления. Деление пополам нечетных чисел дает деление нацело и устанавливает флаг CF в 1. Для проверки бита, занесенного в флаг CF используется команда JC (переход, если есть перенос).


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



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