Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ЭВМ и ПУ.doc
Скачиваний:
64
Добавлен:
16.03.2015
Размер:
1.16 Mб
Скачать

2.5.3.2.Команды сдвигов.

Команды сдвигов являются эффективным средством увеличения или уменьшения числа в 2 раза (меньше памяти и быстрее, чем в командах умножения и деления). Для умножения числа на 2, надо сдвинуть все биты на 1 разряд влево, а в освобождённый правый бит поместить 0. Если выдвинутый слева бит передать во флаг CF, то можно зафиксировать выход за диапазон, проверив условие CF = 1. Аналогично уменьшение беззнакового числа вдвое осуществляется сдвигом всех бит на один разряд вправо, а в освобождающийся бит помещается 0. Вдвигаемый справа бит передаётся во флаг CF, если CF = 1, то число нечётное. С беззнаковыми числами работает команда SHL и SHR, а команды SAL и SAR предназначены для знаковых чисел. SAR сохраняет знаковый бит неизменным, команда SHR помещает в знаковый бит 0 (но заносит 1 во флаг OF, если знак имеется). Отметим, что сдвиг вправо нечётного числа всегда даёт результат, который меньше половины числа, например:

-5 (1111 1011) SAR -3 (1111 1101)

-3 < -2.5

При делении -5 на 2 командой DIV результат будет = -2. Различий между удвоением знакового и беззнакового чисел нет.

Рисунок 2.3.

Графическое представление работы команд сдвигов

2.5.3.3.Команды циклических сдвигов.

Команды циклических сдвигов позволяют переставить биты в числе. ROL - циклический сдвиг влево и ROR - циклический сдвиг вправо, обеспечивают циклический сдвиг. При этом выдвигающийся бит подаётся в освобождающийся бит. В командах RCL и RCR в кольцо сдвига включается флаг CF: выдвигающийся бит подаётся во флаг CF, а состояние флага CF передаётся в освобождающийся бит. Операнд команд сдвигов и циклических переносов может находиться в памяти или в регистре, длина операнда равна 8 или 16 бит. Сдвиг осуществляется на предопределённое число бит (фиксированный сдвиг). В первом случае число сдвигов определяется в команде, а во втором - содержимым регистра CL (счётчика). В микропроцессоре 8086 фиксированный сдвиг осуществляется только на 1 бит.

Примеры команд приведены в таблице 2.11.

Таблица 2.11. Примеры команд циклических сдвигов.

Операнд

Слово

Байт

Фиксированный сдвиг

Регистр

КОП BX, 13

КОП DL, 1

Память

КОП MEMW, 15

КОП MEMB, 7

Переменный сдвиг

Регистр

КОП AX, CL

КОП BL, CL

Память

КОП MEMW, CL

КОП MEMB, CL

КОП: SHR, SHL, SAL, SAR, ROR, ROL, RCR, RCL.

Графическое представление работы команд циклических сдвигов приведено на рисунке 2.4.

Рисунок 2.4. Графическое представление работы команд циклических сдвигов

2.5.3.4.Команды двойного сдвига

Команды SHLD, SHRD введены в систему команд микропроцессора 80386. Предназначены для сдвигов двух 16-битных или двух 32-битных операндов. Форматы команд:

SHLD, SHRD reg/ mem 16, reg, imn

SHLD, SHRD reg/ mem 32, reg, imn, где

imn - непосредственное значение, которое определяет число сдвигов.

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

2.5.3.5.Команды работы с двоичными цепочками

Команды работы с двоичными цепочками введены в систему команд микропроцессора 80386 включают две группы :

1) Команда поиска бита ВТ выбирает бит в двоичной цепочке и передает его значение в CF. BTC- поиск и инвертирование бита в цепочке, BTS- поиск и установка бита, BTR- поиск и сброс бита. Форматы команд этой группы одинаковые, поэтому приведены только для команды BT:

BT приемник (двоичная цепочка), источник (номер бита в цепочке)

BT

2) Команды сканирования битов

BSF- вперед

BSR- назад

предназначены для поиска в слове или двойном слове позиции первого единичного бита

Формат команд :

BSF,BSR приемник, источник

BSF,BSR

Приемник- номер первого единичного разряда.

Источник- битовая цепочка.

Результат исполнения команды фиксирует флаг ZF: ZF=0, если есть 1, и ZF=1, если источник равен 0 ( в этом случае приемник не определен).