Одно- и двухпроходной ассемблеры

Большинство ассемблеров являются двухпроходными, так как для получения правильного объектного кода они осуществляют два просмотра исходной программы. Во время первого прохода ассембл'ер создает таблицу символов и собирает все имена, определенные в программе; во время второго прохода он транслирует программу, используя информацию^ собранную при первом проходе. В общем случае символические имена могут быть определены в любом месте программы, поскольку в любом случае ассемблер просматривает всю программу. Однако программисту бывает удобно размещать все определения в начале программы. Большинство двухпроходных ассемблеров временно записывает транслируемую программу на ленту или диск, так что повторный ввод данных с внешнего носителя не требуется. Если рабочая память отсутствует, то двухпроходный ассемблер должен будет дважды ввести программу с перфоленты или перфокарт. Для выдачи результата трансляции на перфоленту или кассету может понадобиться третий проход ассемблера. На рис.4.6 иллюстрируется принцип работы двухпроходного ассемблера.

Кроме двухпроходных ассемблеров часто используется однопроходный ассемблер, который работает быстрее, так как должен просматривать программу 1 раз. Однако в однопроходных • ассемблерах возникает проблема ссылок вперед; часто такие ссылки обрабатывает загрузчик. В общем случае однопроходные ассемблеры предоставляют -меньше возможностей, чем двухпроходные. Кроме того, они вносят дополнительные ограничения на способы задания адресов, использование имен, распределение памяти или требуют более сложного загрузчика, который выполняет часть функций ассемблера в процессе загрузки программы в память.

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

Обычно ассемблер выдает на выходе все или некоторые из перечисленных ниже документов:

а) листинг ассемблерной программы вместе с сгенерированным объектйьнм кодом* . - . . ,

б) список ошибок ассемблирования;

в) таблицу символических имей, используемых в программе, с указанием их значений;

! г) таблицу перекрестных ссылок, содержащую перечень имен* и список всех команд, 1в Которых ойи используются;

д) список внешних ссылок (перечень имён подпрограмм4 или переменных, которые определены за пределами данной, программы);

е)' список подпрограмм или макрокоманд с указанием их длины.

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

Некоторые ассемблеры сразу помещают программу в память и инициируют ее выполнение с указанной точки входа. Такие ассемблеры называются ассемблерами тизагрузки и выполнения. Другие помещают машинную программу на диск или ленту (или оставляют ее в памяти) и ожидают дальнейших команд.

Ошибки. Ассемблеры выдают множество различных сообщений об ошибках. Эти сообщения описаны в соответствующих руководствах по ассемблеру. Наиболее типичные ошибки перечислены в табл. 4.3. Обычно ассемблер идентифицирует ошибку с помощью специальной буквы или цифры и печатает в конце программы список ошибок с указанием номеров строк, к которым они относятся. Иногда ассемблер отмечает строки, в которых обнаружена ошибка, также й в выходном листинге.
 


 



Массажная накидка для авто gezatone amg 388 bodypro.ru.