Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LH05-3N.DOC
Скачиваний:
24
Добавлен:
11.03.2015
Размер:
100.86 Кб
Скачать

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

Команды ROL (ROtate Left) иROR (ROtate Right) аналогичны по своему действию командамLSLиLSR,соответственно, с той лишь разницей, что они не обнуляют соответствующие крайние биты, а копируют в них содержимое флагаCрегистраCCдо операции. Таким образом, операнд и флагC регистраCCкак бы замыкаются в кольцо.

Пример для команд циклического сдвига.Этот вряд ли имеющий практическое применение пример предназначен исключительно для демонстрации работы команд циклического сдвига. Число, записанное по адресу $50 четыре раза сдвигается циклически влево, потом еще четыре раза вправо. Полученный результат сохраняется в ячейке $51, и можно заметить, что он всегда будет равен исходному. Наибольшую пользу принесет выполнение этого примера в пошаговом режиме с исследованием содержимого аккумулятора и регистраCCпосле каждой команды циклического сдвига.

0100 B6 50 LDA $50 Загрузить исходное значение из

ячейки $50.

0102 49 ROLA Выполнить циклический

0103 49 ROLA сдвиг вправо

0104 49 ROLA четыре

0105 49 ROLA раза.

0106 46 RORA Выполнить циклический

0107 46 RORA сдвиг влево

0108 46 RORA четыре

0109 46 RORA раза.

010A B7 51 STA $51 Сохранить результат в ячейке $51.

Ввиду тривиальности получаемых результатов список тестов не приводится.

2.4. Примеры использования команд сравнения и тестирования. Команды сравнения.

Команда CMP (CoMPare) сравнивает содержимое аккумулятора с непосредственным значением, либо с содержимым ячейки памяти. Фактически происходит вычитание операнда из аккумулятора с той лишь разницей, что результат никуда не заносится (содержимое аккумулятора не изменяется). Однако, операция влияет на состояние соответствующих флагов. КомандаCPX (ComPare X) является полным аналогом командыCMP, где вместо аккумулятора в сравнении участвует регистрX.

Пример 1. Этот пример будет вычислять модуль числа, находящегося в ячейке $50 и записывать результат в ячейку $51.

0100 B6 50 LDA $50 Загрузить значение из ячейки $50.

0102 A1 80 CMP #$80 Сравнить с $80.

0104 25 01 BCS $0107 Если число меньше $80 (т.е. положительное), то перейти на команду сохранения его без изменения.

0106 40 NEGA Иначе изменить знак у числа.

0107 B7 $51 STA $51 Сохранить результат.

Примечание: как нетрудно видеть, программу можно несколько упростить, не выполняя сравнения и осуществляя переход, по флагу знака числаNв регистреCC. Желающим предлагается самостоятельно составить такой вариант программы. Приведенная программа предназначена лишь для иллюстрации команды сравнения.

Список тестов:

Значение в ячейке $50

Результат в ячейке $51

$01

$01

$FF

$01

$72

$72

$D2

$2F

Пример 2. Приведенная ниже программа просматривает содержимое памяти с адресами $50-$6F, используя индексную адресацию со смещением, и для ячеек памяти с индексами, меньшими $10 выполняется логическое отрицание, для остальных-арифметическое отрицание. Просмотр идет в порядке уменьшения адресов с целью упрощения проверки на окончание цикла.

0100 AE 20 LDX #$1F Загрузить максимальное значение смещения

0102 A3 10 CPX #$10 Сравнить текущее значение с $10.

0104 25 04 BCS $010A Если меньше, то перейти на выполнение команд арифметического отрицания.

0106 63 50 COM $50, X Иначе выполнить команду логического отрицания.

0108 20 02 BRA $010C И перейти, чтобы пропустить команду арифметического отрицания.

010A 60 50 NEG $50, X Выполнить команду арифметического отрицания.

010C 5A DECX Уменьшить значение счетчика.

010D 26 F3 BHS $0102 Повторять цикл до тех пор, пока значение счетчика не станет меньше нуля.

Если заполнить изменяемую область памяти двумя одинаковыми последовательностями символов $00-$0F, то можно наглядно увидеть различие между командами арифметического и логического отрицания.

Содержимое памяти до выполнения программы:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]