- •Обучение : Программирование на Ассемблере для pic
- •Команды сложения и вычитания регистров
- •Команды определения бита
- •Команды взаимодействия c аккумулятором w
- •Команды сложения и вычитания констант
- •Команды очистки регистров f и w (обнуления)
- •Пустышки и метки
- •Команды переходов
- •Команды счётчики
- •Вопросы для самопроверки
- •Переход по событиям в счётчиках
- •Переход по результатам бит-проверки
- •Флаги как индикаторы событий
- •Команды сравнения
- •Команды сдвига битов в регистре
- •Сдвиг вправо битов в регистре rrf f, d сдвиг влево битов в регистре rlf f, d
Команды сравнения
Всё познается в сравнении, в том числе и содержимое регистров.
Далее две операции сравнения.
; ============================================================
; ПРОВЕРКА НА РАВЕНСТВО
ОДНОГО РЕГИСТРА ДРУГОМУ РЕГИСТРУ
в общем виде команда XORWF F,D
MOVF CLOP,W ; копировать из KLOP в W
BCF STATUS,Z ; опустим флаг Z в ноль
XORWF CLON,F ; проводим сравнение
BTFSC STATUS,Z ; делаем бит-проверку Z-флага по условию
; если Z=1, то выполняется следующая инструкция, иначе пропускается
; ============================================================
Флаг Z после выполнения команды XORWF поднимется из нуля в единицу в том случае, если число в аккумуляторе совпадет с числом, которое находится в проверяемом регистре. Проще говоря, сравнивается содержимое аккумулятора с другим регистром.
; ============================================================
; ПРОВЕРКА НА РАВЕНСТВО
КОНСТАНТЫ КАКОМУ-ЛИБО РЕГИСТРУ
в общем виде команда XORLW K
MOVF CLOP,W ; копировать из KLOP в W
BCF STATUS,Z ; опустим флаг Z в ноль
XORLW .123 ; проводим сравнение с числом 123
BTFSC STATUS,Z ; делаем бит-проверку Z-флага
; если Z=1, то выполняется следующая инструкция, иначе – пропускается
; ============================================================
В данном случае сравнивается содержимое аккумулятора с обычным числом (константой).
Команды сдвига битов в регистре
В этих командах используется знакомая вам конструкция XXXXX F,D . Рассмотрим теорию работы команд сдвига. Различают две команды – "сдвиг вправо" и, соответственно, "сдвиг влево". Под сдвигом понимается смещение на один бит (на один разряд) содержимого регистра. Закономерен вопрос: а что появляется на освободившемся месте в регистре и куда девается вытесненный бит из регистра? Логично предположить, что место освободившегося бита занимает смещенный бит. Но это не так.
Для этого используется знакомый нам бит C (нулевой бит) в регистре STATUS. Именно через этот бит осуществляется сдвиг содержимого сдвигаемого регистра. На рисунках ниже схематично рассмотрен сдвиг.
Исходное состояние:
бит C (STATUS) = |
1 |
||||||
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
Произведен сдвиг вправо:
бит C (STATUS) = |
0 |
||||||
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
А теперь сделано два сдвига влево:
бит C (STATUS) = |
1 |
||||||
0 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
Несложно представить ситуацию, когда регистр пуст (все биты равны нулю), а бит C в регистре STATUS равен единице, то с помощью команды сдвига элементарно просто организовать бегущую единицу, что может найти применение в конструкции бегущего огня.
