Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по япмт.docx
Скачиваний:
4
Добавлен:
18.09.2019
Размер:
3.94 Mб
Скачать

3. Понятие транслятора и способы его реализации. Сравнительный анализ компиляторов, интерпретаторов и псевдокомпиляторов.

Транслятор – устройство (прог-ма), реализующая преобразование с входного языка на другой (чаще всего - машинный) без дополнительных требований.

Существуют 3 вида трансляторов:

1) Компилятор – обслуживющая прог-ма, выполняющая трансляцию на машинный язык программ, записанных на исходном языке. Обеспечивает преобразование программы с одного языка на другой. Компиляция – технология перевода прог-мы целиком. Разделены по времени процессы трансляции и исполнения (все ресурсы на исполнение трансляции предоставлены машине). После компиляции перенос на другую аппаратную платформу бессмыслен.

«+» - высокая скорость выполнения программ;

«-» сложный процесс отладки программных продуктов.

2) Интерпретатор – программа или устройство, осуществляющая пооператорное трансляцию и выполнение исходной программы.. В отличии от компилятора не порождает на выходе программу на машинном языке. выполняет команду сразу после распознавания. В них используются одинаковые методы анализа текста программы. Интер-р позволяет начать обработку данных уже после написания одной команды. Отсутствие выходного машинного кода позволяет не захламлять внешнее устр-во. Является не только транслятором, но и средой выполнения прог-мы.

«+» легкая отладка, не захламляет внешнее устр-во;

«-» снижает производительность, низкая скорость выполнения прог-мы.

3)Псевдокомпилятор – транслятор, преобразующий исходный код в машинно-независимый код. Может быть перенесен на другую машину и интерпретирован.

«+» одна фаза трансляции.

Этапы трансляции:

Лексический анализ – в тексте прог-мы выделяются лексемы (наименьшие единицы лексики). На этом этапе обнаруживаются простейшие ошибки: недопустимые символы, неправильная запись чисел и т.д.

Синтаксический анализ –проверяется правильность синтаксических конструкций. Результат – дерево разбора. Обнаруживаются ошибки, связанные со структурой прог-мы.

Генерация кода – перевод синтаксич. конструкции исходного языка в синтаксич. конструкцию результирующего языка. Результатом ее является либо ассемблерный модуль, либо объектный модуль.

Оптимизация. Фаза оптимизации предназначена для уменьшения избыточности программы по затратам времени и памяти.

Компиляция безотладочной информации формирует более компактный двоичный код.

4.Процедурное программирование. Характеристики языков, реализующих процедурное программирование.

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

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

Процедурные языки характеризуются следующими особенностями:

необходимостью явного управления памятью, в частности, описанием переменных;

малой пригодностью для символьных вычислений;

отсутствием строгой математической основы;

высокой эффективностью реализации на традиционных ЭВМ.

Одним из важнейших классификационных признаков процедурного языка является его уровень.

Ассемблер – язык условных обозначений машинных команд. Берет на себя вычисление адресов и двоичных кодов. Любой Ассемблер привязан к конкретной архитектуре процессора.

Макроассемблер является расширением языка Ассемблера путем включения в него макросредств.

Кроссассемблер – некоторые средства переноса накопленного ПО с одного процессора на другой класс процессоров.

FORTRAN, BASIC – содержат явно оператор перехода. Недостаток – длительность отладки.

Затем возникло структурное прогр-ие как попытка ухода от оператора перехода. Изначально это было реализовано в PASCAL (оператор перехода присутствует для анологии).

Pascal. Одним из существенных признаков языка является последовательная и достаточно полная реализация концепции структурного программирования. Это осуществляется не только путем упорядочивания связей между фрагментами программы по управлению, но и за счет структуризации данных. Кроме того, в языке реализована концепция определения новых типов данных на основе уже имеющихся.

Си имеет следующие важные особенности:

простую языковую базу

ориентацию на процедурное программирование

использование препроцессора для, например, определения макросов и включения файлов с исходным кодом;

непосредственный доступ к памяти компьютера через использование указателей;

передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке выполняется с помощью указателей);

указатели на функции и статические переменные.

В С сочетаются достоинства высокоуровневых языков в части управляющих конструкций и структур данных с возможностями доступа к аппаратным средствам ЭВМ на уровне, который ассоциируется с языком низкого уровня типа языка Ассемблера. Язык С имеет синтаксис, обеспечивающий краткость программы, а компиляторы способны генерировать эффективный объектный код.

PL1 – на основе FORTRAN, но в нем заложены мощные механизмы асинхронной обработки. Его реализация сложная.

ADA – прогр-ма состоит из отдельных единиц компиляции – модулей.

На сегодняшний день наблюдается тенденция, что многие процедурные языки переходят в ООП. Например: PASCAL, C++, VISUAL BASIC.

6. Машинный язык. Язык Ассемблера для процессора i80x86.

Машинный язык – виртуальной машиной для него является сам ЦП.

Иерархия языков:

машинно-зависимые (перенос с одной архитектуры на другую значительно затруднен, а иногда невозможен);

а) Ассемблер - язык условных обозначений машинных команд. Берет на себя вычисление адресов и двоичных кодов. Любой Ассемблер привязан к конкретной архитектуре процессора.

б) Макроассемблер является расширением языка Ассемблера путем включения в него макросредств.

в) Кроссассемблер – некоторые средства переноса накопленного ПО с одного процессора на другой класс процессоров.

2) Машинно-независимые языки (позволяют мобильно переносить ПО):

а) неструктурируемые;

б) непроцедурные (FORTRAN, Basic);

в) структурные (реализуют любой алгоритм в виде алгоритмических конструкций).

В МП i80x86 имеется 14 регистров. В функциональном отношении они делятся на группы:

- регистры общего назначения (АХ, ВХ, СХ, DХ); предназначены для хранения операндов и выполнения арифметико-логических операций; любой из них может использоваться как совокупность двух независящих друг от друга 8-разрядных регистров: старшего байта регистра (AH, BH, CH, DH) и младшего байта (AL, BL, CL, DL).

- сегментные регистры (CS, DS, SS, ES); используются для указания сегмента при адресации памяти.

- регистры-указатели (SP, BP, IP); используются для указания смещения при адресации памяти.

- индексные регистры (SI, DI); применяются для индексной адресации;

- регистр флагов; используется для хранения признаков состояния процессора.

Процессор поддерживает несколько видов адресации:

Непосредственная – операнд находится в самой команде.

Пр: MOV AX, 2 (AX – адрес приемника информации, 2 – адрес источника) – прямая адресация.

MOV AX, CX (из одного регистра в другой)

Косвенная адресация – операнд находится в регистре.

Пр: MOV AX, WORD PTR [SI]

Неявная адресация – когда адрес одного из операндов подразумевается или ясен из контекста.

Пр: PUSH AX

POP DX

Для доступа к стеку используется индексная адресация.

Классы команд:

Команды пересылки данных (присутствуют различные виды адресации): MOV, PUSH, POP, …

Арифметико-логические операции: ADD (сложение), SUB (вычитание), CMP (сравнение), ADC (сложение с переносом), SBB (вычитание с переносом), INC, DEC; AND, OR, XOR, NOT (при этом элементы интерпретируются побитово).

Сдвиговые команды (при умножении или делении на степень двойки): SHL n, SHR n.

Команды передачи управления: команды условного и безусловного перехода; команды вызова и возврата процедуры; циклы.

JMP <адрес> - безусловный переход

CALL <адрес> - вызов процедуры

INT – команда вызова прерывания

IRET – команда возврата прерывания

Условный переход: J<буква> (буква – мнемоническое условие перехода): JA – перейти, если больше; JB – перейти, если меньше; JE – перейти, если равно.LOOP <метка> - цикл с постусловием.

Сроковые команды (для работы с одномерными массивами), используют автоадресацию.

Команды работы с флагами (проверка и установка флагов): CLC, STD, TESTC.

Существуют директивы описания данных:

<имя> <тип> <нач. значение>.

Типы данных в Ассемблере: BYTE, WORD, DWORD.