2. Элементы языка
2.1. Алфавит языка
Все конструкции языка записываются символами алфавитно-цифровых наборов 0, 2 или 3, определяемых по гост 19767-74.
В языке ассемблера символы делятся на основные и дополнительные.
Основные символы имеются во всех указанных наборах и служат для однозначной записи элементов языка. Существуют следующие категории основных символов: управляющие, интервала и графические (или литеры).
Управляющие символы определяют конец предложения исходного модуля. К ним относятся символы "возврат каретки" (вк) и "перевод строки" (пс).
Символы интервала определяют один или несколько пропусков (пробелов) в предложении исходного модуля. К ним относятся символы "пробел" и "горизонтальная табуляция" (гт).
В языке имеются следующие классы графических символов: латинские прописные буквы, цифры и знаки.
Перечень латинских прописных букв:
A, B, C, D, E, F, G, H,I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z.
Перечень цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Перечень знаков:
Наименование Обозначение
Номер #
Знак денежной единицы $
Апостроф '
Круглая скобка левая (
Круглая скобка правая )
Звездочка *
Плюс +
Запятая ,
Минус -
Точка .
Дробная черта /
Двоеточие :
Точка с запятой ;
Меньше <
Равно =
Больше >
Вопросительный знак ?
Коммерческое эт @
Нижнее подчеркивание _
Знаки, комбинации знаков (<>, >=, <=), а также символы интервала и управляющие являются разделителями элементов или конструкций языка. До и (или) после разделителя в любой конструкции языка могут быть вставлены или удалены символы интервала.
Символ "горизонтальная табуляция" обеспечивает выравнивание текста исходного модуля по столбцам с интервалом, обычно кратным восьми символам при его распечатке.
Графические символы из выбранного алфавитно-цифрового набора, которые не входят в перечень основных символов алфавита языка, считаются дополнительными. Эти символы могут использоваться для лучшего документирования исходного модуля и определения литерных данных.
2.2. Идентификаторы
Идентификатор - символическое обозначение обьекта программы. Форма записи идентификатора:
<б>[<бц>[ ... ]],
где:
<б> - прописная латинская буква A-Z, или вопросительный знак (?), или знак "нижнее подчеркивание" (_);
<бц> - прописная латинская буква, или вопросительный знак, или знак "нижнее подчеркивание", или цифра 0-9.
Количество символов в идентификаторе ограничено размером предложения языка. Максимальное количество значащих символов - 31.
С каждым идентификатором связан набор атрибутов обьекта программы: "тип", "сегмент" (сег), "фиксатор" (фикс) и "величина" (вел).
Атрибут "тип" указывает на принадлежность обьекта к конкретному, существующему в программе, типу. Возможные типы обьектов программы:регистр (рег), число и адрес.
Атрибут "сегмент" представляет тип идентифицируемого сегмента или тип сегмента, в котором идентификатор определяется. Возможные значения данного атрибута: "неопределенен" (неопред),
CODE, XDATA, DATA, IDATA и BIT.
Атрибут "фиксатор" определяет способ обработки величины обьекта программы на этапе перемещения и сборки обьектных модулей. Возможные значения данного атрибута: абсолютный (абс), переместимый (перем).
Атрибут "величина" представляет числовое значение обьекта программы. Возможные значения данного атрибута определяются в зависимости от значения атрибута "сегмент":
Атрибут "сегмент" Диапазон атрибута "величина"
Неопред 0 - 65535
CODE 0 - 65535
XDATA 0 - 65535
DATA 0 - 127
IDATA 0 - 127 (255)
BIT 0 - 127
Примеры идентификаторов:
ADD5, FFFFH, ?, ALFA_1.
В языке ассемблера имеются три категории идентификаторов: ключевые слова, встроенные имена и определяемые имена.
2.3. Ключевые слова
Ключевое слово является определяющей частью оператора языка ассемблера. Значения ключевых слов языка ассемблера асм51 устанавливаются настоящим документом. Эти значения не могут быть изменены или переопределены в программном модуле каким-либо образом. Ключевому слову не может быть назначено имя-синоним.
В языке ассемблера имеются следующие категории ключевых слов:
Имена инструкций;
Имена программно-доступных элементов ОМЭВМ-51;
Имена директив;
Вспомогательные имена;
Имена операторов выражения.
Имена инструкций по форме записи совпадают с обозначениями машинных команд ОМЭВМ и совместно с именами программно-доступных элементов определяют коды операций машинных команд.
Перечень имен инструкций:
ACALL, ADD, ADDC, AJMP, ANL, CALL, CJNE, CLR, CPL, DA, DEC, DIV, DJNZ, INC, JB, JBC, JC, JMP, JNB, JNC, JNZ, JZ, LCALL, LJMP, MOV, MOVC, MOVX, MUL, NOP, ORL, POP, PUSH, RET, RETI, RL, RLC, RR, RRC, SETB, SJMP, SUBB, SWAP, XCH, XCHD, XRL.
Перечень имен программно-доступных элементов:
Имя Именуемое устройство
А Аккумулятор
R0-R7 8-разрядный рабочий регистр текущего банка
рабочих регистров
DPTR 16-разрядный регистр-указатель данных
PC 16-разрядный счетчик команд
C Триггер признака переноса
AB Регистровая пара, состоящая из аккумулятора A
(старшая часть) и регистра B (младшая часть)
Имена директив совместно со вспомогательными именами определяют действия в программе,которые должны быть выполнены ассемблером в процессе преобразования исходного модуля в обьектный.
Перечень имен директив:
BIT, BSEG, CODE, CSEG, DATA, DB, DBIT, DS, DSEG, DW, END, EQU, EXTRN, IDATA, ISEG, NAME, ORG, PUBLIC, RSEG, SEGMENT, SET, USING, XDATA, XSEG.
Перечень вспомогательных слов:
AT, BIT, BITADDRESSABLE, CODE, DATA, IDATA, INBLOCK, INPAGE, NUMBER, PAGE, UNIT, XDATA.
Имена операторов в выражении определяют операцию, выполняемую ассемблером в процессе вычисления выражения на этапе трансляции исходного модуля.
Перечень имен операторов в выражении:
AND, EQ, GE, GT, HIGH, LE, LOW, LT, MOD, NE, NOT, OR, SHL, SHR, XOR.
2.4. Встроенные имена
Встроенные имена присвоены адресам регистров специальных функций, адресам триггеров специальных функций, адресам рабочих регистров R0-R7 в пространстве текущего банка рабочих регистров, а также зарезервированным адресам пространства памяти программ.
Используемый в языке ассемблера набор встроенных имен регистров и триггеров специальных функций зависит от типа ОМЭВМ серии КР1816. Названия регистров и триггеров специальных функций ОМЭВМ-51, их обозначения и адреса приводятся в соответствии со справочными приложениями 2.1 и 2.2.
Алгоритм установки атрибутов, связанных со встроенным именем регистра специальной функции (спец_рег):
нач
тип(спец_рег) := адрес
сег(спец_рег) := DATA
фикс(спец_рег) := абс
вел(спец_рег) := определен в соответствии с приложением 2.1
кон
Алгоритм установки атрибутов, связанных со встроенным именем триггера специальной функции (спец_триг):
нач
тип(спец_триг) := адрес
сег(спец_триг) := BIT
фикс(спец_триг):= абс
вел(спец_триг) :=определен в соответствии с приложением 2.2
кон
Используемый в языке ассемблера набор встроенных имен зарезервированных адресов памяти программ зависит от типа ОМЭВМ серии КР1816. Зарезервированные адреса, их встроенные имена и назначения для ОМЭВМ-51 приводятся в соответствии со справочным приложением 2.3.
Алгоритм установки атрибутов, связанных со встроенным именем зарезервированного адреса памяти программ (пам_прог):
нач
тип(пам_прог) := адрес
сег(пам_прог) := CODE
фикс(пам_прог) := абс
вел(пам_прог) :=определен в соответствии с приложением 2.3
кон
Адресам рабочих регистров R0-R7 в языке ассемблера присвоены встроенные имена AR0-AR7 соответственно. Значения этих имен определяются директивой USING в соответствии с табл. П.2.1.
Таблица П.2.1
----------------------------------------------------------------
форма записи ! текущий банк ! рабочие регистры
директивы ! рабочих +--------------------------------
USING ! регистров ! имена ! адреса !имена адресов
----------------+--------------+-------+--------+---------------
! ! ! !
USING 0 ! 0 !R0 - R7! 0 - 7 ! AR0 - AR7
! ! ! !
USING 1 ! 1 !R0 - R7! 8 - 15 ! AR0 - AR7
! ! ! !
USING 2 ! 2 !R0 - R7! 16 - 23! AR0 - AR7
! ! ! !
USING 3 ! 3 !R0 - R7! 24 - 31! AR0 - AR7
----------------------------------------------------------------
Алгоритм установки атрибутов, связанных со встроенным именем адреса рабочего регистра (раб_рег):
нач
тип(раб_рег) := адрес
сег(раб_рег) := DATA
фикс(раб_рег) := абс
вел(раб_рег) := определен в соответствии с табл. П.2.1
кон
Встроенные имена используются в качестве термов выражения (см. Раздел 3).
2.5. Определяемые имена
Определяемые имена вводятся в программу пользователем. В языке ассемблера имеются следующие категории определяемых имен: имена меток, имена внутренних и внешних обьектов типа "адрес", имена внутренних и внешних обьектов типа "число", имена сегментов, названия модулей, имена-синонимы.
2.6. Числа
В языке используются целые числа в двоичной, восьмеричной, десятичной и шестнадцатеричной формах представления. Форма записи чисел:
Двоичного <дв_ц>[ ... ]B
Восьмеричного <вос_ц>[ ... ]Q|O
Десятичного <дес_ц>[ ... ][D]
Шестнадцатеричного <дес_ц>[<шес_ц>][ ... ]]H,
где
<дв_ц> - двоичная цифра 0 или 1;
<вос_ц> - восьмеричная цифра 0 - 7;
<дес_ц> - десятичная цифра 0 - 9;
<шес_ц> - шестнадцатеричная цифра 0 - 9, A - F.
Количество символов в числе ограничено максимальным размером предложения, однако значение числа определяется по модулю 2**16 (т.е. диапазон значения числа находится в пределах от 0 до 65535).
Числа используются в качестве термов выражения (см. раздел 3). Алгоритм установки атрибутов числа (чис):
нач
тип(чис) := число
сег(чис) := неопред
фикс(чис) := абс
вел(чис) := чис мод 65535
кон
Примеры чисел:
Число Представление числа
101010B 002AH
1777Q 003FH
100 0064H
1000D 03E8H
0FFFFH FFFFH
2.7. Дополнительные возможности при записи идентификаторов и
чисел
В идентификаторах и числах вместо прописных латинских букв могут использоваться соответствующие им строчные латинские буквы алфавитно-цифрового набора 0 и 3 или прописные русские буквы алфавитно-цифрового набора 2. При обработке исходного модуля строчные латинские буквы или прописные русские буквы преобразуются в соответствующие им прописные латинские буквы. Соответствие букв устанавливается младшими шестью разрядами кодов этих букв.
2.8. Литерные строки
Литерная строка - это последовательность символов алфавита языка (за исключением "возврат каретки" и "перевод строки"), которая начинается и заканчивается знаком "апостроф". Если знак "апостроф" должен входить в состав строки, то он представляется двумя рядом стоящими знаками "апостроф" ( '' ).
Коды символов наборов 0 и 2 должны соответствовать гост 13052-74, символов набора 3 - гост 19768-74.
Литерная строка может не содержать значащих символов. Такая литерная строка называется пустой, а ее значение равно "пусто".
Литерные строки (стр) могут использоваться в директиве DB (см. П.5.7) или в качестве термов выражения (см. Раздел 3). Алгоритм установки атрибутов терма:
нач
тип(стр) := число
сег(стр) := неопред
фикс(стр) := абс
если длина(стр) > 2 то ошибка все
если длина(стр) = 2
То вел(стр) := код(симв1)*256 + код(симв2) все
если длина(стр) = 1 то вел(стр) := код(симв) все
если длина(стр) = 0 то вел(стр) := 0 все
кон
В приведеном алгоритме функция "длина" определяет количество символов в литерной строке, функция "код" - код символа.
Количество символов в литерной строке ограничивается максимальным размером предложения.
Примеры литерных строк:
'A', 'AбCдEф', 'A + B', '''ASM51'''.
2.9. Комментарии
Комментарий - это описание или пояснение к программе, которое не оказывает влияния на ее выполнение.
Форма записи комментария:
;[<C>[ ... ]] ,
где
<C> - произвольный символ алфавита языка, за исключением
управляющих символов "возврат каретки" и "перевод строки".
Примеры комментариев к программе:
;
; язык ассемблера ASM51
; X + Y * Z
2.10. Указатель счетчика адреса
Текущий счетчик адреса ассемблера доступен в программе, записанной на языке ассемблера посредством указателя счетчика адреса, обозначаемого знаком денежной единицы $.
Указатель счетчика адреса может использоваться в качестве терма выражения (см. Раздел 3). Алгоритм установки атрибутов терма приведен в п. 5.6.