ОСНОВЫ ЯЗЫКА АССЕМБЛЕРА С51ASM
1. Операторы
2. Комментарии
3. Идентификаторы
3.1 Метки
3.2. Предопределенные идентификаторы
4. Константы
5. Выражения
6. Типы сегментов
7. Набор инструкций 8051
8. Директивы ассемблера
9. Управление ассемблером
10. Условное ассемблирование
МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНОЙ РАБОТЕ
1. Задание и порядок выполнения работы
2. Задачи
3. Оформление отчета
ПРИЛОЖЕНИЕ
Сообщение об ошибках ассемблера C51ASM
3. Идентификаторы
Идентификаторы являются определяемые пользователем имена для адресов, чисел или макросов. Идентификаторы состоят из букв (A–Z, a–z), цифр (0–9) и специальных символов подчеркивания (_) и вопросительного знака (?). Имя идентификатора можно начать с любого из этих символов, за исключением цифр 0–9. Верхний и нижний регистры букв, считаются эквивалентными. Ключевые слова языка ассемблера не могут быть переопределены как идентификаторы пользователя! Список зарезервированных ключевых слов см. в разделе “Appendix D - Reserved Keywords” Руководства пользователя. C51ASM определяет некоторые внутренние идентификаторы, которые начинаются с двойного знака вопроса (?). Идентификаторы пользователя, начинающиеся с «??» применять не рекомендуется. Ниже приведены примеры правильных идентификаторов:
BUFFER
LOC_1024
Is_this_a_valid_SYMBOL_?
?_?_1
Идентификаторы могут иметь неограниченную длину. Однако для совместимости языков ассемблера максимальной значимой длиной является 31 символ. Поэтому идентификатор должен быть уникальным в пределах первых 31 символов.
Идентификаторы часто используются в ассемблерных программах. Символическое имя гораздо легче понять и запомнить, чем адрес или числовую константу, и идентификатор, который определен только один раз, а используется много раз, уменьшает количество ошибок. Идентификаторы могут быть определены по-разному. Директивы EQU и SET определяют идентификаторы представленными выражениями:
TEN EQU 10
COUNTER SET R7
Метки представляют собой специальные идентификаторы, которые неявно определяют адрес физического местоположения:
LOOP: DJNZ R7, LOOP
Идентификаторы также могут явно определить адрес:
ACC DATA 0E0H
3.1 Метки
Метка — специальный идентификатор, который определяет «физическое» место (т.е. адрес) в пространстве памяти программы или данных. Метки должны соответствовать всем правилам, которые применяются к именам идентификаторов. Если определена метка, она должна быть первым текстовым полем в строке. Ей могут предшествовать табуляции или пробелы, но сразу же должен следовать символ двоеточие (:), чтобы идентифицировать ее в качестве метки. Только одна метка может быть определена на строке.
Метки могут использоваться только перед операторами, имеющими связанные с ними физические адреса. К ним относятся мнемокоды инструкций, директивы для хранения данных (DB и DW) и резервирования данных (DS и DBIT). Метки могут также использоваться для пустых строк. Например, ниже приведены допустимые метки:
POLL: JNB TI, POLL
TABLE: DB 0,1,2,3,4,5
STACK: DS 16
START:
Если метка определена, она получает текущее значение счетчика местоположения в выбранном сегменте и принимает тип этого сегмента. Метки никогда не могут быть бестиповыми.
После определения метки могут использоваться так же, как любой другой идентификатор. Метки, заданные в пространстве программы обычно используются для передачи выполнения программы в другое место, указанное инструкцией перехода. Метки данных обычно используются для доступа к переменным в памяти в указанном месте.
3.2. Предопределенные идентификаторы
C51ASM имеет ряд предопределенных (встроенных) идентификаторов DATA, BIT и CODE, для доступа к регистрам специальных функций стандартного микроконтроллера 8051 и адресов прерываний. Эти предопределенные идентификаторы можно выключить с помощью элемента управления $NOMOD51. Чтобы исключить появление предопределенных идентификаторов в таблице идентификаторов используйте элемент управления $NOBUILTIN. Для подробной информации о предопределенных идентификаторов и адресов обратитесь к разделу “Appendix C - Predefined Symbols” Руководства пользователя.
Для идентификации ассемблера и номера его версии следующие предопределенные идентификаторы типа NUMBER даны в табл. 1:
Табл. 1. Обозначение ассемблера
Примечание: Эти два идентификатора не могут быть выключены
Также предопределены следующие идентификаторы конкретного устройства в табл. 2. Если целевое устройство устанавливается элементом управления $DEVICE или в командной строке -target, их значения будут отражать параметры выбранного устройства.
Табл. 2. Идентификаторы выбранного устройства
Кроме того, каждое поддерживаемое устройство, описанное с помощью опции -devices имеет переменную, определяемую уникальным значением с помощью следующей формы:
??_devicename_
где devicename заменяется на имя устройства. Это позволяет проверить выбранное устройство в настоящее время с помощью ??DEVICE в отношении к другим устройствам. Например:
IF ??DEVICE == ??_AT89LP51_
. . . ;настройка для AT89LP51
. . .
ELSEIF ??DEVICE == ??_AT89LP52_
. . . ;настройка для AT89LP52
. . .
ENDIF
C51ASM использует в качестве операндов имена некоторых регистров 8051. Эти предопределенные имена нужны для доступа к регистрам процессора, как описано ниже в табл. 3.
Табл. 3. Идентификаторы специальных операндов