|
Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Инструкция RCR
Команда RCR в Ассемблере выполняет циклический сдвиг вправо через перенос. Синтаксис:
RCR ЧИСЛО, СДВИГ
Циклический сдвиг битов выполняется по следующим правилам:
- Самый правый бит (бит 0) записывается во флаг CF
- Все биты сдвигаются вправо
- Значение флага CF записывается в самый левый бит
Количество сдвигов (ротаций) - количество битов, на которое выполняется сдвиг, указывается во втором операнде (СДВИГ).
СДВИГ может быть один из следующих:
- Регистр CL
- Непосредственное значение (например, число) (IMM)
ЧИСЛО может быть один из следующих:
- Область памяти (MEM)
- Регистр общего назначения (REG)
С учётом ограничений, которые были описаны выше, комбинации ЧИСЛО-СДВИГ могут быть следующими:
MEM, IMM MEM, CL REG, IMM REG, CL
Если СДВИГ больше единицы, то ассемблер генерирует несколько команд RCR xx, 1, потому что 8086 имеет машинный код только для этой команды (тот же принцип работы используют все команды сдвига/ротации).
Значение флага CF зависит от результата. Флаг OF равен 0, если первый операнд сохраняет первоначальный знак (+ или -). Остальные флаги не изменяются.
Ротация вправо
Теперь попробую объяснить, как выполняется ротация вправо через перенос, что называется, “на пальцах” (см. рис.).
Здесь мы сдвигаем циклически вправо все биты некоего регистра один раз (на один разряд). Бит 0 регистра, в котором также находится ноль, перемещается во флаг CF, остальные биты просто смещаются вправо на один разряд. Значение флага CF, которое было ДО выполнения сдвига, записывается в самый старший разряд.
То есть до выполнения команды RCR в регистре у нас было двоичное число 00011000, а флаг CF был установлен (равен 1). После выполнения команды в регистре число 10001100, и флаг CF сброшен.
Таким образом, флаг CF используется как будто бы регистр имеет дополнительный разряд справа.
Пример на ассемблере:
.model tiny
.code
ORG 100h
start:
STC ;Теперь CF = 1
MOV AL, 00011000b ;АL = 00011000
RCR AL, 1 ;АL = 10001100, CF = 0
RET ;Выйти из программы
END start
Напоследок, как всегда, о происхождении аббревиатуры RCR.
RCR - это Rotate Carry Right (ротация вправо через перенос).
|
Подписаться на Дзен-канал
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |