Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Ассемблере для PIC.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.52 Mб
Скачать

; Проверка на равенство нулю

 

CLRF CLOP ; обнулим регистр KLOP

BCF STATUS,Z ; опустим флаг Z в ноль

MOVF  KLOP,F ; копировать из KLOP в KLOP

BTFSC STATUS,Z ; делаем бит-проверку Z-флага

; если Z=1, то выполняется следующая инструкция, иначе – пропускается

; ============================================================

 

Умышленная очистка регистра KLOP командой CLRF была сделана ради примера. В результате операции "MOVF KLOP,F" флаг Z из нуля поднимется в единицу, после которого мы делаем проверку и идём по одному из вариантов.

 

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

Команды сравнения

Всё познается в сравнении, в том числе и содержимое регистров.

Далее две операции сравнения.

 

; ============================================================

; Проверка на равенство одного регистра другому регистру

в общем виде команда 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 равен единице, то с помощью команды сдвига элементарно просто организовать бегущую единицу, что может найти применение в конструкции бегущего огня.