Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Инструкция 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 (ротация влево через перенос).
Подписаться на Дзен-канал
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |
Первые шаги в программирование
Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее... |