русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 2026; Нарушение авторских прав


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

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



<== предыдущая лекция | следующая лекция ==>
Файл перекрестных ссылок | Некоторые структуры данных 1-го прохода


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.