Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программируемые контроллеры для систем управления ч2. Г.И.Загарий, В.С. Коновалов В.С., Н.О. Ковзель, В.И. Поддубняк, А.И. / Программируемые контроллеры для систем управления ч2. Г.И.Загарий, В.С. Коновалов В.С., Н.О. Ковзель, В.И. Поддубняк, А.И. .doc
Скачиваний:
317
Добавлен:
08.08.2013
Размер:
15.9 Mб
Скачать

Операнд

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

Команды могут быть без-, одно-, или двухоперандными. Операнд может быть задан непосредственно или в виде его адреса (прямого или косвенного). Непосредственный операнд представляется числом (например, MOVLWh'FF' гдеhобозначает шестнадцатиричное число или MOVLW В'01010011', где В – обозначает двоичное число) или символическим именем (MOVWFDATAPORT).

Используемые в качестве операндов символические имена и метки должны быть определены, а числа представлены с указанием системы счисления, для чего используется префикс (буква, стоящая перед числом):

В – для двоичной, Q– для восьмеричной,D– для десятичной, Н – для шестнадцатиричной. Число без префикса по умолчанию считается десятичным.

Директивы Ассемблера

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

Директива ORGзадает Ассемблеру адрес ячейки памяти (например, директиваORGh'100' задает шестнадцатиричный адрес 100), в которой должна быть расположена следующая за ней команда прикладной программы.

Директивой EQUможно любому символическому имени, используемому в программе, поставить в соответствие определенный операнд. Например, запись

TMR0EQUh'01'

приводит к тому, что в процессе ассемблирования всюду, где встретится символическое имя TMR0, оно будет заменено числом 1.

Директивой ENDпрограммист дает ассемблеру указание об окончании трансляции.

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

Ниже приведен фрагмент исходного текста программы, содержащий операнды с различным способом задания, директиву ORGи директиву END:

ORGН'100'

MOVLW В'01010101' ; Загрузить двоичную константу

; 01010101 в регистр W

MOVLWDATAPORT;Записать содержимое регистра W

;в регистр DATAPORT

; (определенный ранее как порт В)

GOTO$ ; Бесконечный цикл, Выход

; только по прерыванию.

END;Конец трансляции и окончание программы

Перечень директив Ассемблера приведен в табл. 7.3.1.

Таблица 7.3.1

Список директив ассемблера MPASM

Директива

Описание

Синтаксис

_ _BADRAM

определяет расположение отсутствующей (ошибочной) оперативной памяти

_ _badram <expr>[-<expr>]

BANKISEL

генерирует код номера банка RAM для косвенной адресации

Bankisel <label>

BANKSEL

генерирует код номера банка RAM для прямой адресации

Banksel <label>

CBLOCK

определяет блок констант

Cblock [<expr>]

CODE

начинает секцию рабочей программы

[<name>] code [<address>]

_ _CONFIG

специфицирует биты конфигурации

_ _config <expr>

OR _ _config <addr>, <expr>

CONSTANT

объявляет константу

Constant <label> [=<expr>,...,<label> [=<expr>] ]

DA

определяет строковую величину в программной памяти

[<label>] da <expr> [, <expr2>, ..., <exprn>]

DATA

определяет числовые и текстовые данные

[<label>] data <expr>, [,<expr>,...,<expr>] [<label>] data "<text_string>" [,"<text_string>",...]

DB

определяет однобайтные данные

[<label>] db <expr> [,<expr>,...,<expr>] [<label>] db "<text_string>" [,"<text_string>",...]

DE

определяет данные СППЗУ

[<label>] de <expr> [,<expr>,...,<expr>] [<label>] de "<text_string>" [,"<text_string>",...]

#DEFINE

определяет идентификатор замены

Label Define <name> [<value>] define <name> [<arg>,...,<arg>] <value>

DT

определяет таблицу

[<label>] dt <expr>

[,<expr>,...,<expr>]

[<label>] dt "<text_string>"

[,"<text_string>",...]

Таблица 7.1.3 (продолжение)

DW

объявляет однословные данные

[<label>] dw <expr>

[,<expr>,...,<expr>]

[<label>] dw "<text_string>"

[,"<text_string>",...]

ELSE

начать альтернативный блок ELSE директивы условия IF...ELSE

Else

END

конец программы

End

ENDC

конец блока констант

Endc

ENDIF

конец блока условия

Endif

ENDM

конец макроопределения

Endm

ENDW

конец цикла While

Endw

EQU

определяет константу

<label> equ <expr>

ERROR

определяет сообщение об ошибках

error "<text_string>"

ERRORLEVEL

задает уровень ошибок

Errorlevel 0|1|2|

<+|-><message number>

EXITM

выход из макрокоманды

Exitm

EXPAND

"разворачивает" следующие за ней макрокоманды

Expand

EXTERN

объявляет внешнюю метку

Extern <label>[ ,<label>]

FILL

определяет загрузку памяти

[<label>] fill <expr>, <count>

GLOBAL

экспортирует определен-ную внешне метку

Global <label>[ ,<label>]

IDATA

начинает инициализи-рованный раздел данных

[<name>] idata [<address>]

_ _IDLOCS

определяет расположение идентификатора

_ _idlocs <expr>

IF

Начало блока условия

"if ... then ... else"

if <expr>

IFDEF

выполняется, если идент-ификатор ранее определен

ifdef <label>

IFNDEF

выполняется, если идент-ификатор не определен

ifndef <label

#INCLUDE

включает дополнительный исходный файл

Include <<include_file>> |"<include_file>"

Таблица 7.3.1 (продолжение)

LIST

включает создание листинга

list [<list_option>,...,

<list_option>]

LOCAL

объявляет локальную переменную макроса

local <label>[,<label>]

MACRO

объявляет макроопределение

<label> macro [<arg>,...,<arg>]

_ _MAXRAM

определяет максимальный адрес ОЗУ

_ _maxram <expr>

MESSG

создает определяемое пользователем сообщение

messg "<message_text>"

NOEXPAND

выключает макрорасширение

Noexpand

NOLIST

выключает вывод листинга

Nolist

ORG

устанавливает начальный адрес программы

<label> org <expr>

PAGE

устанавливает вывод номеров страниц листинга

Page

PAGESEL

выбирает страницу программной памяти

Pagesel <label>

PROCESSOR

выбирает тип процессора

Processor <processsor_type>

RADIX

определяет заданное по умолчанию основание системы счисления

radix <default_radix>

RES

определяет резервную память

[<label>] res <mem_units>

SET

определяет переменную ассемблера

<label> set <expr>

SPACE

вставляет пустые строки в листинг

space <expr>

SUBTITLE

определяет подзаголовок программы

Subtitle "<sub_text>"

TITLE

определяет заголовок программы

title "<title_text>"

UDATA

начинает неинициализированный раздел данных

[<name>] udata [<address>]

UDATA_ACS

начинает доступ к неинициализированному разделу данных

[<name>] udata_acs [<address>]

UDATA_OVR

начало перекрывающего неинициализированного раздела данных

[<name>] udata_ovr [<address>]

Таблица 7.3.1 (продолжение)

UDATA_SHR

начало совместно используемого неинициализированного раздела данных

[<name>] udata_shr [<address>]

#UNDEFINE

удаляет определение идентификатора замены

#undefine <label>

VARIABLE

объявляет переменную

Variable <label>

[=<expr>,...,<label>

[=<expr>] ]

WHILE

исполняет цикл "ПОКА УСЛОВИЕ ИСТИННО"

while <expr>