Физика атомного реактора Сопротивление материалов Математика решение задач Информатика Атомная энергетика безопасность Электротехника и электроника
Знакомство с ассемблером Формат оператора Директивы Макроопределение Макровызовы Макросы с параметрами Процесс ассемблирования Компиляция Задачи компоновщика Динамическая компоновка

Второй проход

Цель второго прохода — создать объектную программу и напечатать протокол ассемблирования (если нужно). Кроме того, при втором проходе должна выводиться информация, необходимая для компоновки в один исполняемый файл процедур, которые ассемблировались в разное время. В листинге 7.10 показана процедура для второго прохода.


Процедура второго прохода похожа на процедуру первого: строки считывают- ся по одной и обрабатываются тоже по одной. Поскольку мы записали в начале каждой строки тип, код операции и длину (во временном файле), все они считы- ваются и, таким образом, нам не нужно проводить анализ строк во второй раз. Основная работа по порождению кода выполняется процедурами eval typel, eva!_type2 и т. д. Каждая из них обрабатывает определенную модель (например, код операции и два регистра-операнда). Полученный в результате двоичный код команды сохраняется в переменной code. Затем совершается контрольное считывание. Желательно, чтобы процедура write code просто сохраняла в буфере накопленный двоичный код и записывала файл на диск большими кусками — это снизит нагрузку на диск.

Исходный оператор и выходной (объектный) код, полученный из него (в ше- стнадцатеричной системе), можно напечатать или поместить в буфер, чтобы напечатать потом. После смены значения счетчика адресов команд вызывается следующий оператор.


Экспертные системы и экспертный анализ Архитектура компьютера Уровень ассемблера