Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Двухпроходный Ассемблер — первый проход

2017-11-21 463
Двухпроходный Ассемблер — первый проход 0.00 из 5.00 0 оценок
Заказать работу

Вверх
Содержание
Поиск

Ассемблер просматривает исходный программный модуль один или несколько раз. Наиболее распространенными являются двухпроходные Ассемблеры, выполняющие два просмотра исходного модуля. На первом проходе Ассемблер формирует таблицу символов модуля, а на втором — генерирует код программы

Алгоритм работы 1-го прохода двухпроходного Ассемблера показан на рисунке.

 

F Блок1: Начало 1-го прохода ассемблирования.

F Блок2: Начальные установки:

u установка в 0 счетчика адреса PC;

u создание пустой таблицы символов;

u создание пустой таблицы литералов;

u открытие файла исходного модуля;

u установка в FASLE признака окончания.

F Блок3: Признак окончания TRUE?

F Блок4: Считывание следующей строки исходного модуля. Добавка к счетчику адреса устанавливается равной 0.

F Блок5: При считывании был обнаружен конец файла?

F Блок6: Если конец файла обнаружен до того, как обработана директива END, — ошибка (преждевременный конец файла), при этом также устанавливается признак окончания обработки.

F Блок7: Лексический разбор оператора программы. При этом:

u выделяется метка/имя, если она есть;

u выделяется мнемоника операции;

u выделяется поле операндов;

u удаляются комментарии в операторе;

u распознается строка, содержащая только комментарий.

F Блок8: Строка содержит только комментарий? В этом случае обработка оператора не производится.

F Блок9: Мнемоника операции ищется в таблице директив.

F Блок10: Завершился ли поиск в таблице директив успешно?

F Блок11: Если мнемоника была найдена в таблице директив, происходит ветвление, в зависимости от того, какая директива была опознана.

F Блок12: Обработка директив типа DD (определения данных) включает в себя:

u выделение элементов списка операндов (одной директивой DD может определяться несколько объектов данных);

u определение типа и, следовательно, размера объекта данных, заданного операндом;

u обработка для каждого операнда возможного коэффициента повторения.

F Блок13: Добавка к счетчику адреса устанавливается равной суммарному размеру объектов данных, определяемых директивой.

F Блок14: Обработка директив типа BSS подобна обработке директив типа DD.

F Блок15: Добавка к счетчику адреса устанавливается равной суммарному объему памяти, резервируемому директивой.

F Блок16: Обработка директивы END состоит в установке в TRUE признака окончания обработки.

F Блок17: Обработка директивы включает в себя вычисление значения имени и занесение его в таблицу символов.

F Блок18: Обработка прочих директив ведется по индивидуальным для каждой директивы алгоритмам. Существенно, что никакие директивы, кроме DD и BSS, не изменяют нулевого значения добавки к счетчику адреса.

F Блок19: Если мнемоника операции не найдена в таблице директив, она ищется в таблице команд.

F Блок20: Завершился ли поиск в таблице команд успешно?

F Блок21: Если мнемоника не была найдена в таблице команд, — ошибка (неправильная мнемоника).

F Блок22: Если мнемоника найдена в таблице команд — определение длины команды, она же будет добавкой к счетчику адреса.

F Блок23: Есть ли в операторе литерал?

F Блок24: Занесение литерала в таблицу литералов (если его еще нет в таблице).

F Блок25: Была ли в операторе метка?

F Блок26: Поиск имени в таблице символов.

F Блок27: Имя в таблице символов найдено?

F Блок28: Если имя найдено в таблице символов — ошибка (повторяющееся имя).Если имя не найдено в таблице символов — занесение имени в таблицу символов.

F Блок29: Формирование и печать строки листинга.

F Блок30: Модификация счетчика адреса вычисленной добавкой к счетчику

F Блок31: Печать строки листинга и переход к чтению следующего оператора.

F Блок32: При окончании обработки — закрытие файла исходного модуля.

F Блок33: Были ли ошибки на 1-м проходе ассемблирования?

F Блок34: Формирование литерального пула.

F Блок35: Выполнение 2-го прохода ассемблирования.

F Блок36: Конец работы Ассемблера.

Определение длины команды

Эта задача может решаться существенно разным образом для разных языков. В языках некоторых Ассемблеров мнемоника команды однозначно определяет ее формат и длину (S/390, все RISC-процессоры). В этом случае длина команды просто выбирается из таблицы команд. В других языках длина и формат зависит от того, с какими операндами употреблена команда (Intel). В этом случае длина вычисляется по некоторому специфическому алгоритму, в который входит выделение отдельных операндов и определение их типов. В последнем случае должна производиться также необходимая проверка правильности кодирования операндов (количество операндов, допустимость типов).

Обнаружение литералов

Требует, как минимум, выделения операндов команды.

Листинг

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

Ошибки

На первом проходе выявляются не все ошибки, а только те, которые связаны с выполнением задачи 1-го прохода. Сообщение об ошибке включает в себя: код ошибки, диагностический текст, номер и текст оператора программы, в котором обнаружена ошибка.


Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.017 с.