<<
>>

Синтаксис ассемблера

Программа на ассемблере представляет собой совокупность блоков памяти, назы- ваемых сегментами. Программа может состоять из одного или нескольких таких блоков-сегментов. Сегменты программы имеют определенное назначение, соответ- ствующее типу сегментов: кода, данных и стека.
Названия типов сегментов отра- жают их назначение. Деление программы на сегменты отражает сегментную орга- низацию памяти процессоров Intel (архитектура IA-32). Каждый сегмент состоит из совокупности отдельных строк, в терминах теории компиляции называемых предложениями языка. Для языка ассемблера предложения, составляющие про- грамму, могут представлять собой синтаксические конструкции четырех типов. * Команды (инструкции) представляют собой символические аналоги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соот- ветствующие команды системы команд процессора. s Макрокоманды — это оформляемые определенным образом предложения тек- ста программы, замещаемые во время трансляции другими предложениями. ⅛ Директивы являются указанием транслятору ассемблера на выполнение неко- торых действий. У директив нет аналогов в машинном представлении. I! Комментарии содержат любые символы, в том числе и буквы русского алфави- та. Комментарии игнорируются транслятором. Для распознавания транслятором ассемблера этих предложений их нужно фор- мировать по определенным синтаксическим правилам. Для формального описа- ния синтаксиса языков программирования используются различныеметасинтак- сические языки, которые представляют собой совокупность условных знаков, образующих нотацию метасинтаксического языка, и правил формирования из этих знаков однозначных описаний синтаксических конструкций целевого языка. В учебных целях удобно использовать два метасинтаксических языка — син- таксические диаграммы wнормалъныеформы Бэкуса-Наура. Оба этих языка, в ко- нечном итоге, предоставляют одинаковый объем информации.
Поэтому выбор кон- кретного языка может определяться исходя из того, что синтаксические диаграммы более наглядны, а расширенные формы Бэкуса-Наура более компактны. В учеб- нике будут использоваться оба способа. На рис. 5.1,5.2 и 5.3 показан порядок написания предложений ассемблера с по- мощью синтаксических диаграмм. Как использовать синтаксические диаграммы? Очень просто: для этого нужно всего лишь найти и затем пройти путь от входа диаграммы (слева) к ее выходу (направо). Если такой путь существует, то предложение или конструкция являют- ся синтаксически правильными. Если такого пути нет, значит, эту конструкцию компилятор не примет. Иногда на линиях в синтаксических диаграммах присут- ствуют стрелки. Они говорят о том, что необходимо обратить внимание на на- правление обхода, указываемое этими стрелками, так как среди путей могут быть
Рис. 5.3. Формат команд и макрокоманд

и такие, по которым можно идти справа налево. По сути, синтаксические диаграм- мы отражают логику работы транслятора при разборе входных предложений про- граммы. Далее перечислены термины, представленные на рисунках. * Имя метки — символьный идентификатор. Значением данного идентификато- ра является адрес первого байта предложения программы, которому он пред- шествует. * Префикс — символическое обозначение элемента машинной команды, предна- значенного для изменения стандартного действия следующей за ним команды ассемблера (см. главу 3). il Имя — идентификатор, отличающий данную директиву от других одноимен- ных директив. В зависимости от конкретной директивы в результате обработ- ки ассемблером этому имени могут быть присвоены определенные характери- стики. Код операции (КОП) и директива — это мнемонические обозначения соответ- ствующей машинной команды, макрокоманды или директивы транслятора. Операнды — части команды, макрокоманды или директивы ассемблера, обозна- чающие объекты, над которыми производятся действия.

Операнды ассемблера описываются выражениями с числовыми и текстовыми константами, метками и идентификаторами переменных с использованием знаков операций и неко- торых зарезервированных слов. Другой способ описания синтаксиса языка — нормальные (расширенные) фор- мы Бэкуса-Наура. С помощью форм Бэкуса-Наура целевой язык представляется в виде объектов трех типов. и Основные символы языка, в теории компиляции называемые терминальными, — это имена операторов, регистров и т. п., то есть это те символьные объекты, из которых строится, в частности, исходный текст ассемблерной программы. * Имена конструкций языка, в теории называемые нетерминальными символа- ми, обычно заключаются в угловые скобки или пишутся строчными бук- вами. в Правила (формы) описывают порядок формирования конструкций, в том чис- ле предложений, целевого языка. Каждая форма состоит из трех частей — левой, правой и связки: 9 левая часть — всегда нетерминальный символ, который обозначает одну из кон- струкций языка; связка — символ стрелки =>, который можно трактовать как словосочетание «определяется как»; и правая часть описывает один или несколько вариантов построения конструк- ции, определяемой левой частью. Несколько форм Бэкуса-Наура могут быть связаны между собой по нетерми- нальным символам, то есть одна форма определяется через другую. Для построе- ния конструкции целевого языка необходимо взять одну или несколько форм Бэ- куса-Наура, в каждой из которых выбрать нужный вариант для подстановки. В конечном итоге должна получиться конструкция (предложение) целевого язы- ка, состоящая только из терминальных символов. Для примера рассмотрим описание и использование форм Бэкуса-Наура для построения десятичных чисел со знаком. Вначале опишем эти формы (правила): =>|+| => | ~ =>θ Ц | 2 | 3 |41 S | 6 | 7 | 81 9 ~ Здесь: Ш , , => => l => l => 01 => 01 => 501 Предложения ассемблера (см. рис. 5.1-5.3) формируются из лексем, представ- ляющих собой синтаксически неразделимые последовательности допустимых сим- волов языка, имеющие смысл для транслятора.
Синтаксис ассемблера 89 Вначале определим алфавит ассемблера, то есть допустимые для написания текста программ символы: ii АSСII_символ_буква — все латинские буквы А - Z, а - z, причем прописные и строчные буквы считаются эквивалентными; в dесdigit — цифры от 0 до 9; ⅝ специальные знаки ⅝s разделители: Лексемами языка ассемблера являются ключевые слова, идентификаторы, це- почки символов и целые числа. Ключевые слова — это служебные символы языка ассемблера. По умолчанию регистр символов ключевых слов не имеет значения. К ключевым словам от- носятся: « названия регистров(АL, АН, ВЦ ВН, CL, СН, DL,DН, АХ, ЕАХ, ВХ, ЕВХ, СХ, ЕСХ, DХ, ЕDХ, BP, EBP, SР, ESP, DI, EDI, SI, ESI, СS, DS, ES, FS, GS, SS, СRО, СR2, СRЗ, DRО, DRl, DR2, DRЗ, DRб,DR7); * операторы (ВYТЕ,SВYТЕ, WORD, SWORD, DWORD, SDWОRD, FWОRD, QWORD, TBYTE, RЕАL4, RЕАL8, RЕАL1О, NЕАR16, NЕАRЗ2, FАR16, FАRЗ2, AND, NOT, HIGH, LOW, HIGHWORD, LOWWORD, OFFSET, SEG, LROFFSET, TYPE, THIS, PTR, WIDTH, MASK, SIZE, SIZEOF, LENGTH, LENGTHOF, ST, SHORT, TYPE, OPATTR, MOD, NEAR, FAR, OR, XOR, EQ, NE, LT, LE, GT, GE, SHR, SHL и др.); • названия команд (КОП) ассемблера, префиксов. Идентификаторы — последовательности допустимых символов, использующие- ся для обозначения имен переменных и меток. Правило записи идентификаторов можно описать следующими формами Бэкуса-Наура: Приведенные формы говорят о том, что идентификатор может состоять из од- ного или нескольких символов. В качестве символов можно использовать буквы латинского алфавита, цифры и некоторые специальные знаки — _, ?, $, @. Иденти- фикатор не может начинаться символом цифры. Длина идентификатора может составлять до 255 символов (247 в MASM), хотя транслятор воспринимает лишь первые 32, а остальные игнорирует. Регулировать длину возможных идентифика- торов (в TASM) можно с использованием ключа командной строки /mv. Кроме того, существует возможность указать транслятору на необходимость различать прописные и строчные буквы либо игнорировать их различие (что и делается по умолчанию). Для этого (в TASM) применяются ключи командной строки/mu,/ml, / mx (см. приложение В на сайте http: //www.piter. com/ download). Цепочки символов — это последовательности символов, заключенные в одинар- ные или двойные кавычки. Правила формирования: 90 Глава 5. Синтаксис ассемблера Целые числа могут указываться в двоичной, десятичной или шестнадцатерич- ной системах счисления. Отождествление чисел при записи их в программах на- ассемблере производится по определенным правилам. Десятичные числа не тре- буют для своего отождествления указания каких-либо дополнительных символов. Для отождествления в исходном тексте программы двоичных и шестнадцатерич- ных чисел используются следующие правила: Важно отметить наличие символов после (h) и перед (0) записью шестнадцате- ричного числа. Это сделано для того, чтобы транслятор мог отличить в программе одинаковые по форме записи десятичные и шестнадцатеричные числа. К примеру, числа 1578 и 1578h выглядят одинаково, но имеют разные значения. С другой сто- роны, какое значение в тексте исходной программы может иметь лексема fеО2З? Это может быть и некоторый идентификатор, и, судя по набору символов, шест- надцатеричное число. Для того чтобы однозначно описать в тексте программы на ассемблере шестнадцатеричное число, начинающееся с буквы, его дополняют ве- дущим нулем «О» и в конце ставят символ «h». Для данного примера правильная запись шестнадцатеричного числа — Ofe023h: Для двоичных чисел все просто — после записи нулей и единиц, входящих в их состав, необходимо поставить латинскую букву «b». Пример: іθэшеib Рассуждениями, приведенными ранее, был показан порядок формирования предложений программы ассемблера и составляющих их элементов (лексем). Так- же были рассмотрены правила формирования меток, названий команд (префик- сов). Осталось обсудить комментарии и операнды. Что касается комментария, то это самый простой элемент предложения ассемблера. Любая комбинация симво- лов ASCII, расположенная в строке за символом точки с запятой (;), транслятором игнорируется, то есть является комментарием (см. рис. 5.1-5.3). Описанию опе- рандов, ввиду их важности, будет посвящен отдельный подраздел.
<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Синтаксис ассемблера:

  1. А. И. СМИРНИЦКИЙ. СИНТАКСИС АНГЛИЙСКОГО ЯЗЫКА, 1957
  2. Таненбаум Э.. Архитектура компьютера. 5-е изд, 2007
  3. В. И. Юров. Assembler. Учебник для вузов. 2-е изд, 2003
  4. N. M. RAYEVSKA. MODERNENGLISHGRAMMAR, 1976
  5. ИСПАНСКИЙ ЯЗЫК
  6. АНГЛИЙСКИЙ ЯЗЫК
  7. ФРАНЦУЗСКИЙ ЯЗЫК
  8. Контрольные вопросы и задания
  9. ЗНАК
  10. Невербальное поведение.
  11. 5.2. Психолингвистический анализ как метод распознавания и идентификации преступник а