- •5) Язык Ассемблера. Команды пересылки данных
- •1.1 Команда mov
- •1.2 Команда mov для сегментных регистров
- •1.3 Команда загрузки адреса
- •12) Язык Ассемблера.Логические операции
- •Одномерный массив
- •Двумерный массив
- •3.6.1 Реализация с помощью массива
- •3.6.2 Реализация с помощью динамического списка
- •Реализация очереди динамическим списком
- •27) Структуры данных. Неупорядоченные таблицы
- •31. Структуры данных. Древовидная таблица
- •Операция добавления
- •Операция удаления
- •38. Классификация систем программирования
- •46. Загрузчики. Абсолютный загрузчик
46. Загрузчики. Абсолютный загрузчик
Предназначен для загрузки загрузочного модуля в оперативную память и передачи ему управления.
Абсолютный загрузочный модуль – это модуль, содержащий исполняемую программу, сгенерированную на конкретный адрес загрузки в оперативной памяти.
Абсолютный загрузочный модуль содержит три типа карт:
H<имя модуля><длина модуля><адрес загрузки>
Т<адрес данных><длина данных><данные>
Е<точка входа>
Алгоритм функционирования абсолютного загрузчика:
Открытие файла с загрузочным модулем и чтение карты Н. Определение
имени, длины и адреса загрузки модуля.
Запрос ОС блока памяти с указ. Адреса и указ. Длины. Если память не
выделенена, то сообще. Об ошибке и переход к пункту 6
Чтение очередной карты.
Если карта E, то формирование адреса 1-й команды, равной точке входа и
переход к пункту 6
Обработка карты T.Считывается адрес и длина данных и произв. Загрузка
данных из карты в оперативную память по указанному адресу. Переход к п.3
Конец.
Преимущества загрузчика:
Загрузчик простой, представляет программу из одного, максимум двух циклов.
Маленький размер загрузчика.
Высокая скорость
Недостатки
При одновременном выполнении нескольких программ распределение памяти выполняется пользованием и выполняется в момент создания загрузочного модуля, а не в момент их выполнения.
Абсолютные загрузчики используются в специализированных операционных системах (например, управление технологическими процессами).
Выполнение программы возможно только в том случае, если блок памяти, на котором сгенерирована программа свободен.
47. Загрузчик. Перемещающий загрузчик
Перемещающий загрузчик – предназначен для загрузки перемещаемого загрузчного модуля в ОП и передачи ему управления.
Перемещаемый загрузочный модуль – модуль, который содерж. подпрограммы, сформированные для загрузки с нулевого адреса и дополнительную информацию для обеспечения загрузки прог-мы с любого адреса, т.е. обеспечение перемещаемости прог-мы.
Перемещаемый модуль содержит:
Н <имя мод.> <дл.мод.>
Т <адр.данных> <дл.дан.> <данные>
М <адр.данных> <дл.дан.> [<формула модификации> +адр.загрузки]
Е <точка входа>
Алгоритм:
1. открытие файла с перемещ-ым модулем. Чтение карты Н, определение имени модуля и его длины.
2. заказ в ОС блока памяти указанной длины. Если память выделена, то её адрес присваивается адресу загрузки модуля (АЗМ), иначе (если память занята или недостаточно памяти) сообщение об ошибке и п.п. 6
3. чтение очередной карты
4. обработка карты
4.1 Если карта Е, то вычисление и установка адреса первой выполняемой команды Ап.к.=<точка входа>+АЗМ и п.п.6
4.2 Если карта Т, то определение адреса и длины данных, затем вычисление адреса данных в ОП Адоп.=<адр.данных>+АЗМ и загрузка данных из карты по вычисленному адресу Адоп
4.3 Если карта М, то определение адреса и длины данных, затем вычисление адреса данных в ОП. Выбор по вычисленному адресу значения указанной длины и увеличение на АЗМ
5. П.п. 3
6. Конец
Преимущества:
Позволяет выполнить загрузку прог-мы с любого адреса.
Недостатки:
1. Загрузчик требует больше ОП
2. Перемещаемый модуль имеет больший размер, чем абсолютный, т.к. есть карты М
49. Загрузчик оверлейных программ.
Оверлейная программа – программа, при выполнении которой, модули в оперативную память загружаются по мере необходимости, и память под неиспользуемым в данный момент модулем может освобождаться. В зависимости от способа загрузки модулей, выделяют автоматический и планируемый загрузчик.
Автоматический загрузчик самостоятельно организует процесс загрузки модулей в оперативную память. При обращении к переменной или процедуре модуля, осуществляется проверка наличия соответствующего модуля в оперативной памяти. Если модуль присутствует, то считывается адрес соответствующей переменной или процедуры и осуществляется обращение. Если модуль отсутствует, то определяется размер загружаемого модуля и проверяется наличие блока памяти соответствующего размера. Если блока памяти нет, то производиться поиск и выгрузка неактивного модуля. Если все неактивные модули выгружены и нет требуемого блока памяти, то выполняется перезагрузка активных модулей. Затем выполняется загрузка требуемого модуля. Среди неактивных модулей первым может выгружаться модуль наиболее долго не используемый или имеющий минимальную частоту использования.
В планируемом загрузчике процессом загрузки модулей управляет программист. С помощью специальных команд или вызова специальных процедур. При обращении к переменной или процедуре оверлейный загрузчик выполняет проверку на наличие модуля памяти. Если его нет, сообщение об ошибке, и программа прекращает выполнение.
План загрузки задается при обработке объектных модулей связывающего загрузчика с функциональным формированием оверлейных программ. Обычно план загрузки представляет собой дерево или граф связей модулей с указанием абсолютных, относительных или вычисляемых адресов загрузки.
- Преимущества автоматического загрузчика: не требует вмешательства программиста в процесс реализации загрузки. Позволяет создавать оверлейную программу неквалифицированному программисту.
- Недостатки автоматического загрузчика: автоматическая загрузка может приводить к неэффективному использованию памяти, когда много кратно много кратно выполняется загрузка одних и тех же модулей, часто приходиться выполнять перезагрузку активных модулей. Это вызвано тем, что порядок загрузки модулей определяется порядком вызова процедур.
- Преимущества планируемого загрузчика: позволяет эффективно организовывать процесс загрузки модулей, так как им управляет программист.
- Недостатки планируемого загрузчика: Требуется квалифицированный программист, знающий особенности функционирования оверлейных программ и умеющий выполнять эффективное планирование загрузки модулей.
Пример автоматического загрузчика.
Д ля организации обращения к переменным и процедурам оверлейных модулей используется таблица оверлейных переменных, которая подобна таблице внешних переменных в связывающем загрузчике. Но обращение к ней производиться не по имени, а по номеру строки. Значение переменной в начале, равно нулю, что соответствует отсутствию модуля с переменной в памяти. Во время загрузки модуля в оперативную память. Во время загрузки модуля в оперативную память, в таблице устанавливаются значения адресов, по которым располагаются соответствующие переменные. При выгрузке, значения снова получают ноль.
50. Интерпретатор.
Транслятор- программа выполняющая преобразование исходного текста
программы в формат необходимый для её выполнения. Разделяют на интерпретаторы и компиляторы. Компилятор – выполняет преобразование программы в машинный формат, которую затем выполняет процессор.
Интерпретатор – выполняет преобразование программы в машинно-независимый формат, и затем сам её выполняет.
Интерпретатор – считывает операторы исходной программы. Выполняет лексический и синтаксический анализ. Формирует внутреннюю кодировку. А затем реализует выполнение команды. В интерпретаторе значение переменных храниться в специальной таблице, полями которой являются имя переменной, размер, тип, значение. Ключом является имя. Соответственно для обращения к переменной необходимо выполнить операцию поиска, добавления, и удаления в таблице.
Преимущества: - сравнительно дешевый вариант разработки транслятора; - Высокая универсальность(переносимость) т.к. используется машинно-независимый формат представления команд, а они выполняются на процессором а процедурами программы интерпретатора. – Не требуется разработка сложных систем отладки программ т.к. сам интерпретатор обрабатывает исходную программу, и обрабатывает значения в таблице внешних переменных.
Недостатки: - медленной выполнение программы т.к. при выполнении каждого оператора каждый раз выполняется лексический и синтаксический анализ построения внутреннего кода команд, так же для обработки k-ой переменной необходимо выполнить поиск в таблице, расшифровку типа данных и т.п. – Ошибка в программе обнаруживается в момент выполнение операторы.
51. Компилятор Р-кодов.
В этом трансляторе обработка исходного текста программы разбивается на 2 части: компиляция и выполнение:
-
Исходная программа
Компилятор пи-кодов
Пи-код программы
Интерпретатор
Оперативная память
Компилятор выполняет лексический и синтаксический анализ программы и формирует машинно-независимый код программы – Р-код. Интерпретатор считывает коды команд в машинно-независимом формате.
Выполняется их дешифрацию и выполняет соответствующие процедуры реализации команд.
Преимущества:
Сравнительно высокое быстродействие т.к процесс синтаксического и лексического анализа вынесен из процесса выполнения программы.
Полностью выполняется лексический и синтаксический анализ программы до ее выполнения.
Недостатки:
Возможны ошибки выполнения программы в случаи использования не объявленных переменных т.к значения хранятся в таблице.
52. Структура компилятора машинных кодов
Предназначен для преобразования исходной программы к заданной системе команд (в основном машинные коды). Комп. имеет след.структуру.
Исходная программа→лексический анализ→список лексем→синтаксический анализ→дерево разбора→генерация кода→код прог-мы→оптимизация кода→объектный код
Фрагменты дерева разбора соответствуют операторам языка прогр-ния.
Оптимизация предназначена для исключения из кода прог-мы «лишних» команд, которые возникают при вставке заготовок операторов.
Генерация кода предназначена для создания кода прог-мы по дереву разбора. Каждому оператору дерева разбора соответствует заготовка фрагмента прог-мы. Код прог-мы получается с помощью обхода дерева.
Преимущества:
Позволяет получить наиболее быстродействующую прог-му, т.к. команды выполняются процессором, а при обращении к переменным используется адресат.
Недостатки:
Разработка компилятора более трудоёмкая и дорогая процедура, чем интерпретатора.
Прог-ма может выполняться только на процессоре для которого она создана или совместима.
53. Компилятор. Лексический и синтаксический анализ
При лексическом анализе выполняется преобразование исходной программы в список лексем. Лексема – последовательность литералов (символов) представляющая собой логическую единицу языка (напр: идентификатор, разделитель, числовая константа). В списке лексем каждый элемент содержит код лексемы и её значение.
Лексический анализ может выполняться по прямой и непрямой схеме. При прямой схеме формирование лексемы выполняется только на основании литералов исходной программы. При непрямой схеме анализатор может получать дополнительную информацию о предполагаемой лексеме.
Синтаксический анализ выполняется по списку лексем и предназначен для проверки правильности синтаксических конструкций языка, а также формирования дерева разбора программы, если в процессе синтаксического анализа построено полное дерево разбора, то прог-ма имеет верную синтаксическую структуру, иначе содержит ошибку.
55. Библиотекарь. Назначение. Команды.
Библиотека – набор данных для хранения исходных объектных динамически связываемых загрузочных модулей и макроопределений. Состоит из оглавления и хранилища. В оглавлении указывается данные об имени модуля, его размере, месте в хранилище, даты записи и корректировки. Хранилище предназначено для хранения модуля. В хранилище модуль может быть в том же виде что и данных, а может представляться в виде отдельных структур. Например, объектный модуль может иметь инфу о внешних ссылках представленную в виде таблиц.
Основные команды библиотекаря. Библиотекарь состоит из 2х модулей: 1) модуль взаимодействия с редактором связи. 2) Модуль обслуживания библиотеки. Для первого модуля используются следующие команды:
- назначения (указания библиотеки) LIBRARY <имя библиотеки>[…] В команде указывается библиотека, в которой будет производиться поиск. Поиск модуля выполняется в библиотеке в том порядке, в котором они перечислены. Если модуль найден поиск прекращается.
- Включение модуля. INCLUDE <имя библиотеки><имя модуля> или просто <имя модуля>. По этой команде в программу включается модуль с заданными именами из заданной библиотеки.
- Игнорирование внешней ссылки. IGNORE(или NOCALL) <имя внешней ссылки> . По этой команде задаются внешние ссылки обработки, которых нужно игнорировать. Для этих ссылок не производиться проверка таблицы внешних переменных на наличие соответствующих переменных и не обрабатываются карты модификаций в которых указаны внешняя ссылка.
- Замена внешней ссылки. CHANGE><имя внешней ссылки 1>< имя внешней ссылки 2> . По этой команде внешняя ссылка 1 заменяется на внешнюю ссылку 2. Эта замена производиться в таблице внешних ссылок и карте памяти.
Для 2го модуля: программа обслуживания библиотеки реализует следующие команды: создание библиотеки, добавление модуля, замена, удаление модуля вывод модуля в файл.
56. Отладчик. Функции и структура.
Отладчик – программа, предназначенная для реализации процесса отладки программы. Отладчик должен обеспечивать выполнение следующих функций: 1)Загрузка программы в оперативную память 2) управление процессом выполнение программы 3)вывод состояния оперативной памяти в процессе функционирования программы. 4) Вывод исходного текста программы. 5) Взаимодействие с пользователем в процессе выполнения программы.
Отладчика разделяют на : универсальные ( являются машинно-ориентированными и позволяют выполнять отладку программы на любых языках) и специализированные (ориентированы на реализацию процесса отладки на конкретном языке, или в конкретной среде).
Модули отладчика:
Модуль загрузки. Предназначен для загрузки в оперативную память и загрузки дополнительной информации для отладчика.
Модуль управления. Предназначен для управления выполнением программы. Реализует механизм контрольных точек и его обработок.
Модуль вывода состояний. Предназначен для вывода значений переменных и исходного текста программы.
Модуль взаимодействий с пользователем. Предназначен для вывода инфы пользователю в удобной форме и передачи команд пользователя в отладчик.
В универсальном отладчике иметься модуль реассемблирования, который предназначен для формирования исходного текста программы по коду программы.
57. Редактор текстов
Редактор текстов предназначен для ввода и корректировки текстовых данных сохраняемые в текстовых файлах. При работе редактора текстов текст должен располагаться в ОП. Для этого выделяется рабочее поле которое представляет любой двунаправленный динамический список элементами которого является строка вида:
Указатель на следующий |
Указатель на предыдущий |
Текст строки |
Большинство редакторов текстов имеют ограничения на длину строки т.к она представляет массив (обычно 255 символов). Существует редакторы с неограниченной длиной строки. В этом случаи элементы списка имеют такую структуру:
Указатель на след |
Указатель на предыд. |
Текст строки |
Указат. На след. Фрагм |
Строки объединяются в двунаправленный список для обеспечении просмотра текста от начала к концу и в обратном направлении. Представления данных элементами динамического двунаправленного списка вызвана большой частотой добавления удаления строки в процессии корректировки текста.
Функции редактора:
загрузка текста из файла в рабочее поле
вывод содержимого рабочего поля на экран
ввод кодов с клавиатуры
изменение данных в рабочем поле в соответствии с введённым кодом
выполнение операций по просмотру данных на экране
сохранение рабочего поля в файле
Алгоритм редактора текстов:
Отрываем файл содержащий текст
Чтение текста в рабочее поле
Вывод текста на экран
Ввод кода нажатой клавиши
Если код соответствует символу то производится добавление соответствующего символа на место отмеченное курсором. Увеличение позиции курсора на единицу по строке и переход к п 4
Код соответствует функциональной клавише, выполняется соотв действие и переход к п 4
Код соотв ESC производится проверка текста на соответствие в рабочем поле и в текстовом файле. Если текст не совпадает т о запрос на сохранения текста. Если «да» то сохраняем текст
КОНЕЦ.