Материал: Однокристальные микроконтроллеры с RISC-архитектурой. Часть 2. Введение в программирование. Кравченко В.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Директивы Ассемблера MPALC разделяются на четыре класса:

  • Директивы данных – управляют распределением памяти и обеспечивают возможности ссылок на элементы данных с использованием символических имен.

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

  • Директивы управления – оперируют секциями условно собранного кода.

  • Макро-директивы – управляют выполнением и распределением данных в пределах тела макрокоманды.

Ниже приводятся синтаксис и описание директив Ассемблера версии MPALC.

DATA - создание числовых и текстовых данных.

Синтаксис:

[<метка>] data <операнд>, [<операнд>]

data “ТЕКСТОВАЯ СТРОКА”

Описание. Директива data инициализирует одно или более слов в форме констант, меток или выражения. Данные могут также состоять из ASCII-символьных строк, включенных в кавычки (апострофы). Каждый операнд может быть выражение или строкой, вплоть до 70 символов. Ассемблер выделяет одну ячейку памяти для каждого выражения или каждого символа в строке.

Примеры:

DATA Reloc_Label + .10 : Константа

DATA 1,2 : Константы

DATA “Text” : Текстовая строка

DATA Char + ‘O’ : Символьное выражение

(Смотрите также директиву res).

1 6

IF, ELSE, ENDIF - сочетание директив, используемое для образования условной альтернативной сборки. IF – начинает условную сборку.

(См. также директиву res).

1 8

RES - резервирование ячеек памяти

Синтаксис:

[<метка>] RES <Количество слов памяти> [;<Комментарий>]

Описание. Директива перемещает счетчик команд из его текущей позиции на величину, указанную в позициях <Количество слов памяти>. Часто директива RES используется после директивы ORG.

Пример:

Buffer RES 64 ; Резервируется 64 слова памяти

MACRO - обозначение макроопределения

Синтаксис:

<метка> MACRO [<Аргумент-1>, . . . , <Аргумент-k>] [;<Комментарий>]

Описание. Макрокоманда определяет последовательность инструкций, которая может быть включена в исходную Ассемблерную программу, используя единственное обращение к макрокоманде. Макрокоманда должна быть сначала определена с использованием формальных аргументов (имен). В дальнейшем, при вызове макрокоманды, формальные аргументы заменяются фактическими. Макрокоманда может вызывать другую макрокоманду, или может вызываться рекурсивно.

Тело макрокоманды в ее описании должно заканчиваться оператором завершения макроопределения ENDM.

В описании макрокоманды может использоваться оператор безотлагательеного завершения макрокоманды EXITM, который отменяет возможное альтернативное продолжение сборки команд и заканчивает выполнение макрокоманды, как и оператор ENDM.

Примеры:

Read MACRO device, buffer, count

MOVLW device

MOVWF RAM_20

MOVLW buffer

MOVWF RAM_21

MOVLW count

19

CALL SYS_21

ENDM

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Test MACRO Size

IF size = = 0

EXITM

ELSE

x set x+1

y set y+1

ENDIF

ENDM

LOCAL - объявляет локальные макропеременные

Синтаксис:

LOCAL <Метка-1> [,<Метка-2>, ... , <Метка-К>]

<Метка-n> - метка Ассемблера.

Описание. Директива позволяет использовать в макрокоманде данные (метки), которые могут существовать за пределами контекста макроопределения, то есть она объявляет, что определенные элементы данных могут считаться локальным контекстом в макрокоманде. Если макрокоманда рекурсивная, то каждый вызов будет иметь его собственную локальную копию.

Пример:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

<сегмент основной программы>

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Length EQU 10 ;

Size EQU 20 ;

;

Test MACRO Size ;

LOCAL Length, Label ; Локальная длина

Length SET Size ; Модификация локальной длины

Label RES Length ; Резервный буфер

Length SET Length – 20 ;

ENDM ; Конец макрокоманды

2 0

LIST - опции листинга

Синтаксис:

LIST <Опция-1> [, <Опция-2> , ... , <Опция-N> ]

Описание. Опции выбираются в соответствии с их назначением согласно табл. 2.3.

Таблица 2.3

Опция

Описание и значение по умолчанию

C=<columns>

D

E=<level>

F=<type>

N=<lines>

T= (ON I OFF)

P=<part>

R=<radix>

X=<ON I OFF)

Определяет количество столбцов на страницу для листинга распечатки. С=80. Значение “columns” должно быть определено как константное выражение.

Таблица выдачи идентификаторов файла в PICESII формате (для совместимости с PICICE форматом).

Определяет уровень сообщения ошибок/предупреждений, которые нужно выводить. (Е=1). Значения уровней:

0 – сообщается все; 1 – сообщения предупреждающие,

фатальные, критические; 2 – сообщения фатальные и

критические;3 – сообщения критические.

Определяет формат объектного кода: PICICE, INHX16, INHX8S, INHX8M

Определяет количество строк на страницу для листинга распечатки. (N=51). Значение “<lines>” должно быть определено как константное выражение.

Включает или выключает листинг строки при определенной “C”- опции. Значение по умолчанию – ON, если выбран формат PICICE.

Определяет процессор, для которого произведен объектный код. (16С54). <part> может быть: 16С54, 16С55, 16С56, 16С57, 16С71 или 16С84.

Определяет основание для констант в исходном файле. (HEX). <redix> может быть: HEX, DEC, OCT

Определяет, что макрорасширение должно быть включено или выключено.

Subtitl “Диагностическая секция”

2.8. Псевдооперации

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

Перечень псевдоопераций и эквивалентные наборы встроенных инструкций приведены в табл. 2.4.

Таблица 2.4

Псевдооперации Ассемблера MPALC

Наименование операции

Мнемоника

Эквивалент

Статус

Очистка десятичного переноса

Установка десятичного переноса

Очистка флага Z

Установка флага Z

Очистка переноса

Установка переноса

Прыжок (пропуск строки) по переносу

Прыжок (пропуск строки) по отсутствию переноса

CLRC

SETC

CLRDC

SETDC

CLRZ

SETZ

SKPC

SKPNC

BCF 3,0

BSF 3,0

BCF 3,1

BSF 3,1

BCF 3,2

BSF 3,2

BTFSS 3,0

BTFSC 3,0

-

-

-

-

-

-

-

-

23

Продолжение табл. 2.4

Наименование операции

Мнемоника

Эквивалент

Статус

Прыжок (пропуск строки) по десятичному переносу

Прыжок (пропуск строки) по отсутствию десятичного переноса

Прыжок (пропуск строки) по установленному флагу Z

Прыжок (пропуск строки) по неустановленному флагу Z

Тестирование содержимого ячейки

Пересылка содержимого ячейки в W

Инверсия содержимого ячейки

Добавление переноса к содержимому ячейки

Вычитание переноса из содержимого ячейки

Добавление полупереноса к содержимому ячейки

Вычитание полупереноса из содержимого ячейки

Безусловный переход

Условный переход (ветвление - branch) по переносу

Условный переход (ветвление) по отсутствию переноса

Условный переход (ветвление) по полупереносу

Условный переход (ветвление) по отсутствию полупереноса

Условный переход (ветвление) по флагу Z=1 (по нулевому результату)

Условный переход (ветвление) п флагу Z=0 (по ненулевому результату)

Вызов подпрограммы при переходе к другой странице

SKPDC

SKPNDC

SKPZ

SKPNZ

TSTF f

MOVFW f

NEGF f,d

ADDCF f,d

SUBCF f,d

ADDDCF f,d

SUBDCF f,d

B k

BC k

BNC k

BDC k

BNDC k

BZ k

BNZ k

LCALL k

BTFSS 3,1

BTFSC 3,1

BTFSS 3,2

BTFSC 3,2

MOVF f,1

MOVF f,0

COMF f,1

INCF f,d

BTFSC 3,0

INCF f,d

BTFSC 3,0

DECF f,d

BTFSC 3,1

INCF f,d

BTFSC 3,1

DECF f,d

GOTO k

BTFSC 3,0

GOTO k

BTFSS 3,0

GOTO k

BTFSC 3,1

GOTO k

BTFSS 3,1

GOTO k]

BTFSC 3,2

GOTO k

BTFSS 3,2

GOTO k

BCF 3,5 или

BCF 3,6 или

CALL k

-

-

-

-

-

-

-

Z

Z

Z

Z

Z

Z

Z

-

-

-

-

-

-

-

BSF 3,5

BSF 3,6

21

Следует иметь в виду, что объектный кодовый модуль и файл таблицы идентификаторов всегда производятся в шестнадцатеричном формате, независимо от опций LIST, E, F, P и R. Кроме того, опции исходной программы заместят ключи командной строки E, F, P и R.

INCLUDE - включить файл

Синтаксис:

INCLUDE “<Имя файла и путь>”

Описание. Определенный файл передается в исходную программу и подстыковывается к концу исходного файла. Разрешаются вложенные файлы, вплоть до десяти уровней вложенности. Запись <Имя файла и путь> должна быть заключена в кавычки или апострофы.

Пример:

include “C:\sys\sysdefs.inc” ; Включить файл

include “C:\sysregs.def” ;

TITLE - определяет название программы

Синтаксис:

TITLE “<Текст названия>”

Описание. <Текст названия> - строка выводимого ASCII-кода, заключенная в кавычки или апострофы. Длина строки – не более 60 символов. Директива может использоваться так часто, как этого пожелает пользователь. Строка названия обычно состоит из основного файлового имени, текста названия и номера страницы. Если страница содержит директиву SUBTITLE, то директиву TITLE можно не использовать.

Пример:

TITLE “Operational Code, Rev 5.0”

SUBTITL - определяет название программного подзаголовка

Синтаксис:

SUBTITL “<Текст подзаголовка>”

22

Описание. <Текст подзаголовка> - текстовая строка в ASCII-коде, заключенная в кавычки или апострофы, длиной не более 60 символов. Директива используется для формирования подзаголовка в листинге выхода. Нет необходимости использовать директиву TITLE, если далее идет директива SUBTITL, так как первая строка SUBTITL может содержать файловое имя, а вторая – подзаголовок.

Пример:

Источник: https://studfile.net/preview/16566417/