Инструкция RCL


Лучшие книги по Ассемблеру Лучшие книги по Ассемблеру

Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее...

Команда RCL в Ассемблере выполняет циклический сдвиг влево через перенос. Синтаксис:

RCL ЧИСЛО, СДВИГ

Циклический сдвиг битов выполняется по следующим правилам:

  1. Самый левый бит (старший разряд) записывается во флаг CF
  2. Все биты сдвигаются влево
  3. Значение флага 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 (ротация влево через перенос).



Первые шаги в программирование Первые шаги в программирование

Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su