Инструкция RCR


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

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

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

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

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

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



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

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

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