Что такое ассемблер?
Языки ассемблеров
Команды языка ассемблера
Код операции
Псевдооперации
Литералы
Свободный формат команд
Некоторые типичные команды ассемблера для машин с побайтовой организацией
Ассемблеры типа «трансляция — выполнение»
Однопроходный ассемблер
Двухпроходный ассемблер
Символы
Подробная блок-схема прохода
Подробная блок-схема прохода 2
Пример трансляции
Таблицы символов общие замечания
Обработка таблицы
Линейный поиск
Двоичный поиск
Сравнение двоичного и линейного способов поиска
Метод хеширования
Пример хеширования
Скученность
Назначение макрокоманды
Различие между макрокомандами и подпрограммами
Форматы макрокоманды
Ключевой макрос
Макропроцессор

Однопроходный ассемблер

Простейшим ассемблером является однопроходный ассемблер, в котором исходная программа просматривается только один раз. Так как символические адреса должны быть заменены соответствующими абсолютными или перемещаемыми адресами, возникает серьезная проблема ссылок вперед, когда символы используются прежде, чем они определяются в программе. Типичными ссылками вперед являются команды ветвления, которые передают управление на символическую метку, появляющуюся на более поздней стадии трансляции исходной программы, или такие имена данных в адресных полях, память для которых еще не выделена посредством псевдоопераций DS или DC
Последнюю трудность можно обойти, потребовав, чтобы все имена данных были объявлены заранее, как это сделано в ассемблере PLAN для ICL 1900 [4]. Поэтому проблема ссылок вперед возникает только в связи с командами ветвления, когда требуется выполнить передачу управления вперед. Так как символическое имя, использованное в команде ветвления, еще не появилось в программе, ассемблер не может подставить его фактический адрес. Для решения этой проблемы заводится специальная таблица — таблица ссылок вперед, в которую помещаются- записи, содержащие позицию команды ветвления и символ, использованный в ее адресной части. Если этот символ впоследствии определяется, появляясь в поле метки некоторой команды, загрузчику передается директива модифицировать данный адрес во время загрузки. Для ассемблеров типа «компиляция — выполнение» модификация выполняется немедленно, при этом с помощью записей таблицы ссылок вперед получают позицию команды, использующей данный символ. После этого, естественно, использованная запись исключается из таблицы.

Hosted by uCoz