Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





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

Алгоритм работы 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: Конец работы Ассемблера.







Date: 2015-05-22; view: 641; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.013 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию