В команде используется регистр 30Н, поэтому в поле содержится значение B'0110000’ Рис. 6.4,б. Команда ADDWF H’30’,w означает «сложить содержимое рабочего регистра с регистром Н'З0' и поместить результат обратно в рабочий регистр». Адресатом операции является рабочий регистр W и бит d равен 0.
ADDWF H’30’,f
Команда означает «сложить содержимое рабочего регистра с регистром данных H’30’ и поместить результат обратно в регистр H’30’. Адресатом является регистр данных и бит d равен 1.
В символической записи команды символы «W» соответствуют сброшенному биту адресата d, а символы «F» соответствуют установленному биту d.
Непосредственный.
Операнд размером 8 бит входит в состав команды Рис.6.5.а. В младших восьми битах находится собственно значение константы, а в старших шести битах по-прежнему содержится код операции. Результат выполнения таких команд всегда помешается в рабочий регистр, поэтому не требуется ни бит адресата, ни значение адреса в памяти данных.
Рис. 6.5. Формат слова команд операций с константами
Пример
ADDLW 04
Команда сложения константы 04 с регистром W. В коде команды присутствует константа В‘00000100’.
Код операции команды (ADDLW .04) равен B’111110’, а константа равна B'00000100'. Значение константы должно лежать в диапазоне B'00000000'...B’11111111’ (H'00’…H’FF’ или, в десятичной системе, 0...255), что вполне логично, поскольку рабочий регистр, как и все внутренние регистры исполнительного блока, является восьмибитным.
Регистровый косвенный.
В любом процессоре имеется одна из разновидностей косвенной адресации, при которой один или более внутренних регистров используются для хранения адреса операнда в памяти данных. Такие адресные или индексные регистры используются в качестве указателя на данные. Основное отличие от прямой адресации заключается в том, что содержимое регистра-указателя может изменяться в процессе выполнения программы. То есть искомый адрес уже не зафиксирован в виде двоичного кода в памяти программ (обычно ПЗУ), а является переменной величиной.
В микроконтроллерах РIС реализован достаточно простой вариант такого типа адресации — в полном соответствии с их философией. В младшем и среднем семействах имеется отдельный элемент ИЛИ-НЕ, который детектирует обращение по прямому 7-битному адресу H'0000000' и, как показано на Рис.6.6, просто выставляет на шину адреса памяти данных содержимое регистра H’04’ называемого индексным регистром (FSR). Это происходит, если в качестве адресата команды используется нулевой адрес, по которому располагается регистр косвенной адресации INDF (INDerect File).
Этот регистр является виртуальным, т.е. физически не существует. Он используется исключительно для выставлениясодержимого регистра FSR в качестве адреса операнда.
Рис.6.6. Механика косвенной адресации
Пример
Содержимое регистра FSR равно H'86’. Тогда команда CLRF 0 (или CLRF INDF) очистит регистр, расположенный по адресу H'86’ а не по адресу H'00'. Разумеется, содержимое регистра FSR можно изменить в любой момент времени, например, его можно инкрементировать в каждом проходе цикла.