Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Алгоритмы работы Ассемблеров

Структуры (базы) данных Ассемблера

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

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

  1. Начало 1-го прохода ассемблирования.
  2. Начальные установки:
    • установка в 0 счетчика адреса PC;
    • создание пустой таблицы символов;
    • создание пустой таблицы литералов;
    • открытие файла исходного модуля;
    • установка в FASLE признака окончания.
  3. Признак окончания TRUE?
  4. Считывание следующей строки исходного модуля. Добавка к счетчику адреса устанавливается равной 0.
  5. При считывании был обнаружен конец файла?
  6. Если конец файла обнаружен до того, как обработана директива END, - ошибка (преждевременный конец файла), при этом также устанавливается признак окончания обработки..
  7. Лексический разбор оператора программы. При этом:
    • выделяется метка/имя, если она есть;
    • выделяется мнемоника операции;
    • выделяется поле операндов;
    • удаляются комментарии в операторе;
    • распознается строка, содержащая только комментарий.
  8. Строка содержит только комментарий? В этом случае обработка оператора не производится.
  9. Мнемоника операции ищется в таблице директив.
  10. Завершился ли поиск в таблице директив успешно?
  11. Если мнемоника была найдена в таблице директив, происходит ветвление, в зависимости от того, какая директива была опознана.
  12. Обработка директив типа DD (определения данных) включает в себя:
    • выделение элементов списка операндов (одной директивой DD может определяться несколько объектов данных);
    • определение типа и, следовательно, размера объекта данных, заданного операндом;
    • обработка для каждого операнда возможного коэффициента повторения.
  13. Добавка к счетчику адреса устанавливается равной суммарному размеру объектов данных, определяемых директивой.
  14. Обработка директив типа BSS подобна обработке директив типа DD.
  15. Добавка к счетчику адреса устанавливается равной суммарному объему памяти, резервируемому директивой.
  16. Обработка директивы END состоит в установке в TRUE признака окончания обработки.
  17. Обработка директивы включает в себя вычисление значения имени и занесение его в таблицу символов.
  18. Обработка прочих директив ведется по индивидуальным для каждой директивы алгоритмам. Существенно, что никакие директивы, кроме DD и BSS, не изменяют нулевого значения добавки к счетчику адреса.
  19. Если мнемоника операции не найдена в таблице директив, она ищется в таблице команд.
  20. Завершился ли поиск в таблице команд успешно?
  21. Если мнемоника не была найдена в таблице команд, - ошибка (неправильная мнемоника).
  22. Если мнемоника найдена в таблице команд - определение длины команды, она же будет добавкой к счетчику адреса.
  23. Есть ли в операторе литерал?
  24. Занесение литерала в таблицу литералов (если его еще нет в таблице).
  25. Была ли в операторе метка?
  26. Поиск имени в таблице символов.
  27. Имя в таблице символов найдено?
  28. Если имя найдено в таблице символов - ошибка (повторяющееся имя).Если имя не найдено в таблице символов - занесение имени в таблицу символов.
  29. Формирование и печать строки листинга.
  30. Модификация счетчика адреса вычисленной добавкой к счетчику
  31. Печать строки листинга и переход к чтению следующего оператора.
  32. При окончании обработки - закрытие файла исходного модуля.
  33. Были ли ошибки на 1-ом проходе ассемблирования?
  34. Формирование литерального пула
  35. Выполнение 2-го прохода ассемблирования.
  36. Конец работы Ассемблера.

Примечания

  1. Определение длины команды (п.21). Эта задача может решаться существенно разным образом для разных языков. В языках некоторых Ассемблеров мнемоника команды однозначно определяет ее формат и длину (S/390, все RISC-процессоры). В этом случае длина команды просто выбирается из таблицы команд. В других языках длина и формат зависит от того, с какими операндами употреблена команда (Intel). В этом случае длина вычисляется по некоторому специфическому алгоритму, в который входит выделение отдельных операндов и определение их типов. В последнем случае должна производиться также необходимая проверка правильности кодирования операндов (количество операндов, допустимость типов).
  2. Обнаружение литералов (п.22). Требует, как минимум, выделения операндов команды. (Подробнее об обработке литералов см. ниже).
  3. Листинг. Строка листинга печатается в конце каждой итерации обработки команды. Строка листинга 1-го прохода содержит: номер оператора, значение счетчика адреса (только для команд и директив, приводящих к выделению памяти), текст оператора. Листинг 1-го прохода не является окончательным, фактически он используется только для поиска ошибок, поэтому печатать его необязательно. Режим печати листинга 1-го прохода может определяться параметром Ассемблера или специальной директивой. После листинга программы может (опционно) печататься таблица символов.
  4. Ошибки. На первом проходе выявляются не все ошибки, а только те, которые связаны с выполнением задачи 1-го прохода. Сообщение об ошибке включает в себя: код ошибки, диагностический текст, номер и текст оператора программы, в котором обнаружена ошибка.
<== предыдущая лекция | следующая лекция ==>
Директивы | Некоторые структуры данных 1-го прохода
Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 1606; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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