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