Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DMITR / USED / INTE8051.DOC
Скачиваний:
16
Добавлен:
16.04.2013
Размер:
224.77 Кб
Скачать

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.

Соседние файлы в папке USED