Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / Lab_moto / 3.doc
Скачиваний:
16
Добавлен:
16.04.2013
Размер:
196.1 Кб
Скачать

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

Команды 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.

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

4. Команды работы с битами.

Команды BCLR n (Bit n CLeaR) и BSET n (Bit n SET) сбрасывают и устанавливают, соответственно, n-ый бит в содержимом ячейки памяти. Доступ ограничен областью, адресуемой одним байтом, то есть первыми 256 ячейками памяти с шестнадцатиричными адресами $00-$FF. Так как в самом начале адресного пространства у микропроцессора MC68HC05 находятся различные управляющие регистры, эти команды позволяют быстро и удобно устанавливать, либо сбрасывать требуемый бит.

В качестве простейшего примера можно привести программу, которая записывает число $D (1101B)в младшую тетраду ячейки c адресом $50.

0100 10 50 BSET 0,$50 Установить бит 0 в ячейке с адресом $50.

0102 13 50 BCLR 1,$50 Очистить бит 1 в ячейке с адресом $50.

0104 14 50 BSET 2,$50 Установить бит 2 в ячейке с адресом $50.

0106 16 50 BSET 3,$50 Установить бит 3 в ячейке с адресом $50.

Пример. КомандыBCLRиBSETне позволяют указывать номер бита как аргумент. Но этот недостаток можно устранить, например, следующим способом. Приведенный ниже пример непосредственно по номеру бита и адресу байта генерирует код соответствующей этому биту командыBSET n, после чего команда вызывается как подпрограмма. Адрес байта должен храниться в ячейке $50, номер бита-в ячейке $51. Из-за того, что во время выполнения программы отладочный модуль эмулирует память с адресами $0100-$017F как ПЗУ, и запись туда невозможна, командуBSET n, нужно разместить в области $0050-$00FF. Формат командыBSET nнепосредственно в машинных кодах таков:

Бит 7

6

5

4

3

2

1

Бит 0

0

0

0

1

n2

n1

n0

0

Биты 3-1 представляют двоичную запись номера бита n. Вторым байтом команды является адрес ячейки памяти, в которой находится изменяемый бит. Для возврата из подпрограммы нам еще потребуется команда возвратаRTS имеющая шестнадцатиричный код $81.

0100 B6 51 LDA $51 Загрузить номер бита.

0102 A4 07 AND #$07 Оставить только 3 младших бита для генерации корректной команды.

0104 48 LSLA Сдвинуть текущее содержимое на 1 бит влево, так номерnрасполагается в битах 3-1.

0105 AA 10 ORA #$10 Вычислить код нужной команды.

0107 B7 60 STA $60 Записать его по адресу начала подпрограммы.

0109 B6 50 LDA $50 Загрузить адрес байта.

010B B7 61 STA $61 Записать его как второй байт команды.

010D A6 81 LDA #$81 Загрузить в аккумулятор код командыRTS для обеспечения возврата из подпрограммы.

010F B7 62 STA $62 И сохранить его в подпрограмме.

0111 BD 60 JSR $60 Вызвать сгенерированную подпрограмму.

Для проверки работы можно поместить по адресу $50 число $52-адрес ячейки памяти, в которой будут устанавливаться требуемые биты. Тогда для разных значений номера бита, находящихся в ячейке памяти $51 соответственно будет меняться содержимое ячейки $52:

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

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

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

Начальное значение в ячейке $52

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

$52

$03

$00

$08

$52

$07

$82

$82

$52

$00

$00

$01

$52

$04

$0F

$1F

Соседние файлы в папке Lab_moto