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

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

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

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

2017-11-21 401
Двухпроходный Ассемблер — первый проход 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-го прохода. Сообщение об ошибке включает в себя: код ошибки, диагностический текст, номер и текст оператора программы, в котором обнаружена ошибка.


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

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

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

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



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

0.008 с.