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