mowlw 0x80 ; загрузит число 80h в регистр W
subwf Temp1, F ; выполнить вычитание, результат – в регистре Temp1
Задание 1. Запишите пример в базовую программу. Выполните ее компиляцию. Выполните программу в пошаговом режиме, наблюдая за изменением содержимого регистров W, Temp1 и STATUS. Проверьте правильность выполнения команд «вручную», используя представление данных в двоичных кодах. Определите значения флагов C, Z, DC при выполнении команд.
Команды вычитания могут быть использованы для выполнения сравнения значений двух операндов.
Допустим, надо сравнить содержимое регистров Temp1 и Temp2. Это можно сделать программой:
movf Temp1,W ; пересылка содержимого регистра Temp1 в регистр W
subwf Temp2,W ; вычитание содержимого регистра W (фактически Temp1)
; из содержимого регистра Temp2
Результат сравнения можно определить по флагам из регистра STATUS:
если Z = 1, то (Temp2) = (Temp1);
если C = 1, то (Temp2) > (Temp1);
если C = 0 и Z = 0, то (Temp2) < (Temp1).
Задание 2. Запишите коды команд примера в базовую программу и выполните ее компиляцию. Исследуйте работу программы при значениях содержимого регистров Temp1 и Temp2 из табл.1. В нее также запишите значения флагов из регистра STATUS. Сделайте выводы о результатах сравнения.
Таблица 1
Temp1 |
Temp2 |
Флаги C, Z |
Результат |
25h |
25h |
||
25h |
10h |
||
25h |
35h |
Для занесения значений в регистры Temp1 и Temp2 откройте окно памяти данных (регистров МК) с помощью пункта меню View > FileRegisters . Для «ручного» изменения содержимого регистра надо подвести курсор на нужный адрес и щелкнуть левой кнопкой мыши. Выделенный адрес изменит цвет на синий. Затем надо щелкнуть по нему еще два раза левой кнопкой и ввести с клавиатуры новое значение содержимого регистра (букву h – признак системы счисления вводить, конечно, не надо).
3.8. Команды инкремента и декремента
В МК PIC16F84A имеются команды инкремента регистра incf f, d и декремента регистра decf f, d. Команда incf увеличивает содержимое заданного регистра на 1, а decf – уменьшает на 1. Результат может быть помещен обратно в заданный регистр (при d=1), либо в рабочий регистр W (при d=0). Если результат операции будет нулевой, то установится бит признака Z=1.
Пример использования команд декремента:
movlw 0xFF ; загрузить в регистр W число FFh
movwf Temp1 ; переслать содержимое регистра W в регистр Temp1
movwf Temp2 ; переслать содержимое регистра W в регистр Temp2
decf Temp1,F ; декремент содержимого регистра, результат – в Temp1
decf Temp1,F ; декремент содержимого регистра, результат – в Temp1
decf Temp1,F ; декремент содержимого регистра, результат – в Temp1
decf Temp2,W ; декремент содержимого регистра, результат – в рег. W
decf Temp2,W ; декремент содержимого регистра, результат – в рег. W
decf Temp2,W ; декремент содержимого регистра, результат – в рег. W
Задание 1. Запишите пример в базовую программу и выполните ее компиляцию. Проверьте работу программы в пошаговом режиме, наблюдая за изменением содержимого регистров Temp1, Temp2 и W. Сделайте выводы о свойствах команды decf f,d.
Следующий пример демонстрирует работу команд инкремента:
clrf Temp1 ; очистить регистр Temp1
clrf Temp2 ; очистить регистр Temp2
incf Temp1,F ; инкремент регистра, результат – в регистре Temp1
incf Temp1,F ; инкремент регистра, результат – в регистре Temp1
incf Temp1,F ; инкремент регистра, результат – в регистре Temp1
incf Temp2,W ; инкремент регистра, результат – в регистре W
incf Temp2,W ; инкремент регистра, результат – в регистре W
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.