Рис. 5.3. Формат команд и макрокоманд
и такие, по которым можно идти справа налево. По сути, синтаксические диаграм-
мы отражают логику работы транслятора при разборе входных предложений про-
граммы. Далее перечислены термины, представленные на рисунках.
* Имя метки — символьный идентификатор. Значением данного идентификато-
ра является адрес первого байта предложения программы, которому он пред-
шествует.
Префикс — символическое обозначение элемента машинной команды, предна-
значенного для изменения стандартного действия следующей за ним команды
ассемблера (см. главу 3).
il Имя — идентификатор, отличающий данную директиву от других одноимен-
ных директив. В зависимости от конкретной директивы в результате обработ-
ки ассемблером этому имени могут быть присвоены определенные характери-
стики.
Код операции (КОП) и директива — это мнемонические обозначения соответ-
ствующей машинной команды, макрокоманды или директивы транслятора.
Операнды — части команды, макрокоманды или директивы ассемблера, обозна-
чающие объекты, над которыми производятся действия. Операнды ассемблера
описываются выражениями с числовыми и текстовыми константами, метками
и идентификаторами переменных с использованием знаков операций и неко-
торых зарезервированных слов.
88 Глава 5. Синтаксис ассемблера
Другой способ описания синтаксиса языка — нормальные (расширенные) фор-
мы Бэкуса-Наура. С помощью форм
целевой язык представляется
в виде объектов трех типов.
и Основные символы языка, в теории компиляции называемые
—
это имена операторов, регистров и т. п., то есть это те символьные объекты, из
которых строится, в частности, исходный текст ассемблерной программы.
Имена конструкций языка, в теории называемые нетерминальными символа-
ми, обычно заключаются в угловые скобки <> или пишутся строчными бук-
вами.
в Правила (формы) описывают порядок формирования конструкций, в том чис-
ле предложений, целевого языка.
Каждая форма состоит из трех частей — левой, правой и связки:
9 левая
— всегда нетерминальный символ, который обозначает одну из кон-
струкций языка;
связка — символ стрелки
который можно трактовать как словосочетание
«определяется как»;
и правая часть описывает один или несколько вариантов построения конструк-
ции, определяемой левой частью.
Несколько форм Бэкуса-Наура могут быть связаны между собой по нетерми-
нальным символам, то есть одна форма определяется через другую. Для построе-
ния конструкции целевого языка необходимо взять одну или несколько форм Бэ-
куса-Наура, в каждой из которых выбрать нужный вариант для подстановки.
конечном итоге должна получиться конструкция (предложение) целевого язы-
ка, состоящая только из терминальных символов.
Для примера рассмотрим описание и использование форм Бэкуса-Наура для
построения десятичных чисел со
Вначале опишем эти формы (правила):
|
Здесь:
— нетерминальные
символы (в исходной программе на ассемблере таких объектов нет);
+|-|0|1|2|3|4|5|б|7|8|9 — терминальные символы (их можно найти в исходном
тексте
из терминальные символов по приведенным ранее трем пра-
вилам строится любое десятичное число;
* символ вертикальной черты (|) означает альтернативу при выборе варианта
некоторого правила.
Для примера выведем число -501, используя формы Бэкуса-Наура:
<число_без_знака>
<число_без_знака>01
<дес_цифра>01
501
Предложения ассемблера (см. рис.
формируются из лексем, представ-
ляющих собой синтаксически неразделимые последовательности допустимых сим-
волов языка, имеющие смысл для транслятора.
Синтаксис ассемблера 89
Вначале определим алфавит
то есть допустимые для написания
текста программ символы:
ii
— все латинские буквы А - Z, а - z, причем прописные
и строчные буквы считаются эквивалентными;
— цифры от 0 до 9;
специальные знаки _, ?, @, $, &;
Do'stlaringiz bilan baham: |