- •5) Язык Ассемблера. Команды пересылки данных
- •1.1 Команда mov
- •1.2 Команда mov для сегментных регистров
- •1.3 Команда загрузки адреса
- •12) Язык Ассемблера.Логические операции
- •Одномерный массив
- •Двумерный массив
- •3.6.1 Реализация с помощью массива
- •3.6.2 Реализация с помощью динамического списка
- •Реализация очереди динамическим списком
- •27) Структуры данных. Неупорядоченные таблицы
- •31. Структуры данных. Древовидная таблица
- •Операция добавления
- •Операция удаления
- •38. Классификация систем программирования
- •46. Загрузчики. Абсолютный загрузчик
38. Классификация систем программирования
Системы программирования низкого уровня предназначены для обеспечения разработки, отладки и выполнения простых программ. Классификацию выполним по степени взаимодействия программной системы с аппаратной частью компьютера.
Система программирования |
Назначение и состав |
Используемые языки |
Языки разработки |
1. Операционная система |
Предназначена для обеспечения работоспособности компьютера, выполнения программ, организации обмена данными и управления памятью. |
Языки управления заданиями |
Assembler, C (для визуализации) |
2. Системы программирования низкого уровня |
Предназначены для обеспечения разработки и выполнения несложных программ. Состав: ассемблер (транслятор), редактор связей (компоновщик), загрузчик, простой текстовый редактор, отладчики, библиотека. |
Ассемблер (+ иногда дополнительные языки) |
Ассемблер, в настоящее время С |
3. Системы программирования на универсальных языках |
Предназначены для разработки программных продуктов в различных областях. |
Языки высокого уровня (C, Paskal) |
Раньше Ассемблер, сейчас С, Pasсal |
4. Системы программирования на специализированных языках |
Разработка прикладных программ. Состав: СУБД, САПР, системы удаленного доступа. |
Специализированные языки (SQL, FoxPro, GPSS, HTML и т.д.) |
Универсальные языки |
5. Прикладные программы |
Предназначены для решения конкретных задач пользователя. |
Специализированные языки, реже – универсальные языки |
39. Двухпросмотровый ассемблер. Компоненты.
Процесс построения кода программы заключается в последовательном просмотре операторов исходной программы, и построения для каждого оператора кода команды или формирования значения переменной. Проблема возникает когда в операторе присутствует ссылка на переменную или метку, которая определена позднее.
Проблема обработки операторов имеющих ссылку на впереди определенные метки и переменные решаются с помощью 2х просмотров.
Задачей 1го просмотра является: 1) распределение памяти, т.е определение длинны команды и длины данных, заданных операторами. 2) Определение значений, меток, и переменных, т.е. адресов.
Задачей 2го просмотра является: 1) формирование кодов команд и данных. 2) Формирование объектного кода. 3) Формирование протокола трансляции.
В трансляторе используются следующие структуры данных. Используются следующие структуры данных(компоненты):
Постоянные
Таблица регистров - предназначена для указания перечня регистров, их типа и кодов.
Содержит поля: имя регистра, тип, код регистра. Ключ: имя регистра
Таблица форматов команд - содержит информацию о перечне команд и способе
формирования кода команды. Поля: мнемокод команды, тип 1 и 2 операндов, длина команды, код операции, номер формата. В данной таблице ключ составной, включает 1 и 2 поля.
Таблица директив - содержит информацию о перечне директив, и их форматах.
Переменные
Таблица символических имен: предназначена для хранения информации о
использования в программе переменных, метках, константах. Содержит поля: имя, значения, тип, перемещаемость, длина. Ключ: имя.
Таблица литералов предназначена для хранения информации о литералах. Содержит
поля: значение литералов, адрес, длина, тип. Литерал это константное значение имеющее размер больше слова.
40. Двухпросмотровый ассемблер. Первый просмотр.
Процесс построения кода программы заключается в последовательном просмотре операторов исходной программы, и построения для каждого оператора кода команды или формирования значения переменной. Проблема возникает когда в операторе присутствует ссылка на переменную или метку, которая определена позднее.
Проблема обработки операторов имеющих ссылку на впереди определенные метки и переменные решаются с помощью 2х просмотров.
Задачей 1го просмотра является: 1) распределение памяти, т.е определение длинны команды и длины данных, заданных операторами. 2) Определение значений, меток, и переменных, т.е. адресов.
Алгоритм 1го просмотра: 1) открытие исходного и результирующих файлов. 2. Выделение памяти для временных структур и инициализация переменных (счак:=0,№стр:=0) 3. Чтение очередной строки из файла исходной программ и №стр++. Если конец файла, то сообщение об ошибке и переход к пункту 10. 4) разделение строки ( выделение полей) 5. Если поле метки на пусто, то запись в таблицу символических имен 6. Если директива END, то п.10. 7. Определение типов операндов. 8. Определение команды. 9. Увеличение Счак на длину команды. Преход к п.3. 10. Конец.
41. Двухпросмотровый ассемблер. Второй просмотр.
Процесс построения кода программы заключается в последовательном просмотре операторов исходной программы, и построения для каждого оператора кода команды или формирования значения переменной. Проблема возникает, когда в операторе присутствует ссылка на переменную или метку, которая определена позднее.
Проблема обработки операторов имеющих ссылку на впереди определенные метки и переменные решаются с помощью 2х просмотров.
Задачей 2го просмотра является: 1) формирование кодов команд и данных. 2) Формирование объектного кода. 3) Формирование протокола трансляции.
Алгоритм 2го просмотра: 1. открытие исходного и результирующих файлов. 2. Выделение памяти для временных структур и инициализация переменных (счак:=0,№стр:=0) 3. Чтение очередной строки из файла исходной программ и №стр++. Если конец файла, то сообщение об ошибке и переход к пункту 12. 4) разделение строки ( выделение полей) 5. Если директива END, то п.12. 6. Определение типов операндов. 7. Определение команды. 8. Формирование кода команды. 9. Формирование карты Т и запись её в Объектный код. 10. Формирование строки протокола и запись в протокол трансляции. 11. Увеличение Счак на длину команды. Преход к п.3. 12. Конец.
43. Однопросмотровый и многопросмотровый ассемблер.
1-вый. Проблема трансляции возникает, если ссылка предшествует метке или переменной, в этом случае невозможно сформировать полный код команды. В однопросмотровом ассемблере эта проблема решается с помощью формирования неполного кода команды, в котором значение метки или переменной берется равным 0, а информация о месте значения и имени ссылки записывается в специальную таблицу – таблица ссылок(таблица неразрешенных ссылок). После обработки программы просматриваются запись таблицы ссылок и производиться модификация неполных кодов команд, когда дописываются требуемые значения. Если в таблице символических имен не найдено имя ссылки, то метка или переменная не определена, что соответствует ошибке в программе. Для обеспечения возможности модификации кода команды, код программы не должен находиться в оперативной памяти, а в буфере, в оперативную память записывается только по завершению трансляции.
Пример:
Многопросмотровый. В большинстве ассемблеров выражение должно использовать уже определенные аргументы. Многопросмотровый ассемблер разрешает использовать в выражении аргументы, которые будут определенны далее. В многопросмотровом ассемблере реализуется несколько просмотров для определения значений в таблице символических имен и один просмотр в конце для формирования кода команды. Просмотры определения значений переменных и констант выполняется до тех пор пока: 1) Все значение определены в таблице символических имен. Можно формировать код команды. 2. На очередном просмотре не определенно ни одно новое значение. В программе ошибка.
Пример:
45. Однопросмотровый макропроцессов. Алгоритм.
Макропроцессор – предназначен для реализации параметрической замены(вставки) текстовых фрагментов. Для однопросмотрового макропроцессора обязательно должно выполняться правило: Макрокоманда следует только после макроопределения.
Алгоритм однопросмотрового макропроцессора основан на изъятии из текста программы макроопределения, записи его в массив макроопределений с заменой формальных параметров в тексте на их номера, на извлечении макроопределения из массива и вставки его на место макрокоманды с заменой номеров на фактические параметры.
Алгоритм:
1. Открытие файла с текстом программы и создание рабочих структур.
2. Чтение очередного оператора из буфера, если буфер пустой, то чтение очередного
оператора из входного фаила. Если конец файла то выполнять пункт 6
3. Если считанный оператор является макро то
3.1 Определение макрокоманды и формирование списка аргументов.
3.2 Запись всех операторов в список макроопределений с заменой формальных
параметров на их номера до соответствующего оператора endm.
3.3 Добавляем записи в таблицу макроопределений с указанием имени,
указателем и последней строки. Переходим к пункту 2.
4. Если оператор макрокоманда то
4.1Поиск в таблице макроопределений и определение номера первой и последней строки макроопределения.
4.2 Формирование списка аргументов
4.3 Копирование всех строк макроопределений в буфер на место макрокоманды с
заменой номеров параметров на значение фактических параметров. Переход к пункту 2
5 . Перенос строки в выходную протокол и переход к пункту 2.
6 . КОНЕЦ.