Классификация систем программированияСистемы программирования низкого уровня предназначены для обеспечения разработки, отладки и выполнения простых программ. Классификацию выполним по степени взаимодействия программной системы с аппаратной частью компьютера.
39. Двухпросмотровый ассемблер. Компоненты. Процесс построения кода программы заключается в последовательном просмотре операторов исходной программы, и построения для каждого оператора кода команды или формирования значения переменной. Проблема возникает когда в операторе присутствует ссылка на переменную или метку, которая определена позднее. Проблема обработки операторов имеющих ссылку на впереди определенные метки и переменные решаются с помощью 2х просмотров. Задачей 1го просмотра является: 1) распределение памяти, т.е определение длинны команды и длины данных, заданных операторами. 2) Определение значений, меток, и переменных, т.е. адресов. Задачей 2го просмотра является: 1) формирование кодов команд и данных. 2) Формирование объектного кода. 3) Формирование протокола трансляции. В трансляторе используются следующие структуры данных. Используются следующие структуры данных(компоненты): 1. Постоянные 1.1. Таблица регистров - предназначена для указания перечня регистров, их типа и кодов. Содержит поля: имя регистра, тип, код регистра. Ключ: имя регистра 1.2. Таблица форматов команд - содержит информацию о перечне команд и способе формирования кода команды. Поля: мнемокод команды, тип 1 и 2 операндов, длина команды, код операции, номер формата. В данной таблице ключ составной, включает 1 и 2 поля. 1.3. Таблица директив - содержит информацию о перечне директив, и их форматах. 2. Переменные 2.1. Таблица символических имен: предназначена для хранения информации о использования в программе переменных, метках, константах. Содержит поля: имя, значения, тип, перемещаемость, длина. Ключ: имя. 2.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. КОНЕЦ.
|