Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |