Обучение : Программирование на Ассемблере для PIC


Флаги как индикаторы событий

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

 

В регистре STATUS с адресом H03 мы рассмотрим два флага:
 

– флаг Z (второй бит) – флаг нулевого результата

если Z=1, то был нулевой результат выполнения команды

если Z=0, то ненулевой результат выполнения команды

– флаг C (нулевой бит) – флаг переноса-займа

если C=1, то было переполнение регистра (происходил перенос)

если C=0, то не было переполнения регистра (либо был заём)

 

Как работать с флагами?

Если в ходе программы предполагается переполнение регистра (или ожидается заём) и нам необходимо отслеживать эти события, то выполняем следующую последовательность:

 

STATUS  EQU       H0003  ; определяем регистр

C       EQU       H0000  ; определяем номер бита для флага C

Z       EQU       H0002  ; определяем номер бита для флага Z

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

 

 

; ПРОВЕРКА НА ФАКТ ПЕРЕНОСА

...

        BCF       STATUS,C ; опускаем флаг C в ноль

;... операции увеличения каких либо регистров

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

; если бит C=0, то выполняется следующая инструкция

; если бит C=1, то следующая инструкция пропускается

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

Установка флага из нуля в единицу подтверждает факт переноса.

 

; ПРОВЕРКА НА ФАКТ ЗАЙМА

...

        BSF       STATUS,C ; поднимаем флаг C в единицу

;... операции уменьшения каких либо регистров

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

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

; если бит C=0, то следующая инструкция пропускается

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

Установка флага из единицы в ноль подтверждает факт займа.

 

 

Ранее было обещано рассмотрение команды "MOVF KLOP,F" , в которой результат копирования помещается назад в регистр KLOP.

Если регистр KLOP равен нулю, то после команды "MOVF KLOP,F" флаг Z из нуля поднимется в единицу; иначе из единицы опустится в ноль.

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

 

; ПРОВЕРКА НА РАВЕНСТВО НУЛЮ

 

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

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

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

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

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

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

 

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

 

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

 


<<< назад далее >>>

Просмотров: 47555

 








 
 
 

В русском Интернете бестолку защищать свои права. Хотите использовать материалы - используйте,
но с письменного согласия авторов. В противном случае будут высланы соответствующие письма
в поисковые системы об ограничении индексации ваших сайтов. Не доводите до греха.