Почти треть всех команд в любой компьютерной программе, независимо от оборудования, на котором она выполняется, используются для простой пересылки данных между памятью и внутренними регистрами. С учетом этого в Табл. 5.1 приведены наиболее часто используемые команды PIC.
Все три команды пересылки используются либо для простого копирования
однобайтного значения между рабочим регистром и указанным регистром данных, либо для загрузки константы в рабочий регистр. При этом исходные данные не изменяются, они просто копируются в регистр-адресат. Команда swap тоже копирует содержимое регистра данных в W, однако при этом меняет местами младший и старший полубайты.∙ movlw
Эта команда заносит указанную 8-битную константу в рабочий регистр W. Например, команда movlw h’80’ инициализирует W значением b’10000000’.
Заметьте, адресатом в этой команде всегда является рабочий регистр, поэтому для инициализации регистра данных какой-либо константой требуется дополнительная операция — см. ниже.
∙ movwf
Эта команда предназначена для копирования (сохранения
) содержимого рабочего регистра в регистре данных. Например, команда movwf h’23’ скопирует байт из W в регистр h’23’.Таким образом, для инициализации регистра h’23’, скажем, числом Ь’10000000’, необходимо выполнить следующие операции:
movlw h’80’
; Заносим в W число Ь’10000000’movwf h’23’
; и копируем его в регистр h’23’∙ movf
Эта команда предназначена для копирования (загрузки
) содержимого любого регистра данных в рабочий регистр W. Например, команда movf h’22’, w загрузит в W содержимое регистра h’22’.Вообще говоря, в качестве адресата данной команды можно указать сам регистр данных, в результате чего мы выполним, как может показаться, бессмысленную операцию. В нашем случае это будет команда movf h’22’,f
, которая скопирует содержимое регистра h’22’ в него же! Однако команда movf воздействует на флаг нуля Z (это единственная команда из Табл. 5.1, воздействующая хоть на какой-то флаг регистра состояния), который установится, если содержимое регистра равно нулю. Команда movf [File],f не изменяет содержимое указанного регистра, поэтому ее можно использовать дляПринимая во внимание тот факт, что большинство команд, оперирующих регистрами в памяти данных, позволяют задавать в качестве адресата либо тот же регистр, либо рабочий регистр W, операцию пересылки можно рассматривать как неявного члена этой группы команд. Например, в зависимости от ситуации операция инкрементирования регистра данных с последующим копированием нового значения в рабочий регистр W может быть записана следующим образом:
incf h’22’,f
; Инкрементируем содержимое регистра h’22’movf h’22’,w
; и копируем его в Wлибо так:
incf h’22’,w
; Копируем инкрементированное содержимое регистра h’22’ в WРазумеется, в последнем случае содержимое регистра данных не изменяется.
∙ swapf
Команда swapf
переставляет местами старший и младший полубайты содержимого регистра данных и помешает результат либо в тот же регистр данных, либо в рабочий регистр. Например, команда swapf h’22’,w выполнит операцию:Команда swapf
полезна в тех случаях, когда полубайты регистра используются для хранения BCD-чисел, однако может использоваться и для копирования содержимого регистра данных в W. В отличие от более понятной команды movf [File],w состояние флага Z при этом не изменяется. Недостатком, конечно же, будет перестановка полубайтов местами при копировании.В Программе 7.2 на стр. 226 команда swapf
используется именно с этой целью.Процессоры микроконтроллеров PIC младшего и среднего уровня помимо сложения и вычитания могут выполнять и другие арифметические операции. В качестве примера можно отметить операции сброса, инкрементирования и декрементирования. В Табл. 5.2 также перечислены команды, устанавливающие или сбрасывающие заданный бит в указанном регистре данных.
Сложение и вычитание
В микроконтроллерах PIC имеется две команды сложения.
∙ addlw
Эта команда позволяет прибавить
8-битную константу к рабочему регистру W. Например, команда addlw b’10101010’:∙ addwf