Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 05. Синтаксис ассемблера

Предложения, составляющие программу, могут представлять собой синтаксичес­кую конструкцию, соответствующую команде, макрокоманде, директиве или комментарию. Для того чтобы транслятор ассемблера мог распознать их, они должны формироваться по определенным синтаксическим правилам. Нам, ко­нечно, было бы неплохо их знать. Лучше всего использовать формальное описа­ние синтаксиса языка наподобие правил грамматики.

Ассемблер является символическим аналогом машинного языка. По этой причине программа, написанная на ассемблере, должна отражать все осо­бенности архитектуры микропроцессора: организацию памяти, способы ад­ресации операндов, правила использования регистров и т. д. Из-за необхо­димости учета подобных особенностей ассемблер уникален для каждого типа микропроцессоров;

программа на ассемблере представляет собой совокупность блоков памяти, называемых сегментами памяти. Программа может состоять из одного или нескольких таких блоков-сегментов. Каждый сегмент содержит совокуп­ность предложений языка, каждое из которых занимает отдельную строку кода программы;

предложения ассемблера бывают четырех типов:

команды или инструкции, представляющие собой символические анало­ги машинных команд. В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд микропро­цессора;

макрокоманды - оформляемые определенным образом предложения

текста программы, замещаемые во время трансляции другими предложе­ниями;

директивы, являющиеся указанием транслятору ассемблера на выполне­ние некоторых действий. У директив нет аналогов в машинном представ­лении;

строки комментариев, содержащие любые символы, в том числе и буквы русского алфавита. Комментарии игнорируются транслятором.

 

имя метки идентификатор, значением которого является адрес первого байта того предложения исходного текста программы, которое он обозначает;

имя идентификатор, отличающий данную директиву от других одно­именных директив. В результате обработки ассемблером определенной ди­рективы этому имени могут быть присвоены определенные характеристики;

код операции (КОП) и директива это мнемонические обозначения соответ­ствующей машинной команды, макрокоманды или директивы транслятора;

операнды — части команды, макрокоманды или директивы ассемблера, обо­значающие объекты, над которыми производятся действия. Операнды ас­семблера описываются выражениями с числовыми и текстовыми константа­ми, метками и идентификаторами переменных с использованием знаков операций и некоторых зарезервированных слов.

 

Допустимыми символами при написании текста программ являются:

1. Все латинские буквы A-Z, a-z. При этом заглавные и прописные буквы счита­ются эквивалентными.

2. Цифры от 0 до 9.

3. Знаки?, @, $, _, &.

4. Разделители:,. [] () <> {} + / * %! " "? = # ^

Предложения ассемблера формируются из лексем, представляющих собой син­таксически неразделимые последовательности допустимых символов языка, имеющие смысл для транслятора. Лексемами являются:

- идентификаторы последовательности допустимых символов, использую­щиеся для обозначения таких объектов программы, как коды операций, имена переменных и названия меток. Правило записи идентификаторов заключается в следующем. Идентификатор может состоять из одного или нескольких символов. В качестве символов можно использовать буквы ла­тинского алфавита, цифры и некоторые специальные знаки —_,?,$,©. Идентификатор не может начинаться символом цифры. Длина идентифика­тора может быть до 255 символов, хотя транслятор воспринимает лишь пер­вые 32, а остальные игнорирует. Регулировать длину возможных идентифи­каторов можно с использованием опции командной строки mv (см. прило­жение 1). Кроме этого существует возможность указать транслятору на то, чтобы он различал прописные и строчные буквы либо игнорировал их различие (что и делается по умолчанию). Для этого применяются опции коман­дной строки /т, /ml, /mx (см. приложение 1);

- цепочки символов — последовательности символов, заключенные в одинарные или двойные кавычки;

- целые числа в одной из следующих систем счисления: двоичной, десятичной, шестнадцатеричной. Отождествление чисел при записи их в программах на ассемблере производится по определенным правилам. Для шестнадцатеричных чисел эти правила были рассмотрены на уроке 3. Десятичные числа не требуют для своего отождествления указания каких-либо дополнительных символов. Для отождествления в исходном тексте программы двоичных чи­сел необходимо после записи нулей и единиц, входящих в их состав, поста­вить латинское «Ь». К примеру, lOlOlOlb.

- операнды это объекты (некоторые значения, регистры или ячейки памяти), на которые действуют инструкции или директивы, либо это объекты, которые определяют или уточняют действие инструкций или директив.

Операнды могут комбинироваться с арифметическими, логическими, побито­выми и атрибутивными операторами для расчета некоторого значения или оп­ределения ячейки памяти, на которую будет воздействовать данная команда или директива.

Рассмотрим классификацию операндов, поддерживаемых транслятором ассем­блера.

 

- Постоянные или непосредственные операнды число, строка, имя или вы­ражение, имеющие некоторое фиксированное значение. Имя не должно быть перемещаемым, то есть зависеть от адреса загрузки программы в па­мять.

- Адресные операнды - задают физическое расположение операнда в памяти с помощью указания двух составляющих адреса: сегмента и смещения (рис. 5.4).

- Перемещаемые операнды любые символьные имена, представляющие не­которые адреса памяти. Эти адреса могут обозначать местоположение в па­мяти некоторой инструкции (если операнд — метка) или данных (если опе­ранд — имя области памяти в сегменте данных). Перемещаемые операнды отличаются от адресных тем, что они не привязаны к конкретному адресу физической памяти. Сегментная составляющая адреса перемещаемого опе­ранда неизвестна и будет определена после загрузки программы в память для выполнения. К примеру:

 

data segment mas_w dw 25 dup (0)

code segment lea si, mas_w; mas_w - перемещаемый операнд

В этом фрагменте mas_w — символьное имя, значением которого является начальный адрес области памяти размером 25 слов. Полный физический адрес этой области памяти будет известен только после загрузки программы в память для выполнения.

 

- Счетчик адреса специфический вид операнда. Он обозначается знаком $. Специфика этого операнда в том, что когда транслятор ассемблера встреча­ет в исходной программе этот символ, то он подставляет вместо него теку­щее значение счетчика адреса. Значение счетчика адреса, или как его иногда называют счетчика размещения, представляет собой смещение текущей ма­шинной команды относительно начала сегмента кода.

 

jmp $+3 [безусловный переход на команду mov eld; длина команды eld составляет 1 байт

mov аl, 1

 

- Регистровый операнд это просто имя регистра. В программе на ассембле­ре можно использовать имена всех регистров общего назначения и боль­шинства системных регистров.

mov аl, 4; константу 4 заносим в регистр а1

mov dl, pass+4;байт по адресу pass+4 в регистр dl

add al, dl;команда с регистровыми операндами

 

- Базовый и индексный операнды. Этот тип операндов используется для реали­зации косвенной базовой, косвенной индексной адресации или их комбина­ций и расширений. Адресация будет рассмотрена на следующем уроке.

- Структурные операнды используются для доступа к конкретному элементу сложного типа данных, называемого структурой.

- Записи (аналогично структурному типу) используются для доступа к бито­вому полю некоторой записи.

Операнды являются элементарными компонентами, из которых формируется часть машинной команды, обозначающая объекты, над которыми выполняется операция. В более общем случае операнды могут входить как составные части в более сложные образования, называемые выражениями. Выражения представ­ляют собой комбинации операндов и операторов, рассматриваемые как единое целое. Результатом вычисления выражения может быть адрес некоторой ячей­ки памяти или некоторое константное (абсолютное) значение.

 

<== предыдущая лекция | следующая лекция ==>
Представление чисел в двоичном коде с плавающей запятой | Арифметические команды
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 582; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.