Электронные системы ускорителей

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. Обозначение ассемблера

табл1

Примечание: Эти два идентификатора
не могут быть выключены

Также предопределены следующие идентификаторы конкретного устройства в табл. 2. Если целевое устройство устанавливается элементом управления $DEVICE или в командной строке -target, их значения будут отражать параметры выбранного устройства.

Табл. 2. Идентификаторы выбранного устройства

табл2

Кроме того, каждое поддерживаемое устройство, описанное с помощью опции -devices имеет переменную, определяемую уникальным значением с помощью следующей формы:

??_devicename_

где devicename заменяется на имя устройства. Это позволяет проверить выбранное устройство в настоящее время с помощью ??DEVICE в отношении к другим устройствам. Например:

IF ??DEVICE == ??_AT89LP51_

. . . ;настройка для AT89LP51

. . .

ELSEIF ??DEVICE == ??_AT89LP52_

. . . ;настройка для AT89LP52

. . .

ENDIF

C51ASM использует в качестве операндов имена некоторых регистров 8051. Эти предопределенные имена нужны для доступа к регистрам процессора, как описано ниже в табл. 3.

Табл. 3. Идентификаторы специальных операндов

табл3


Продолжение