Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка2012.doc
Скачиваний:
7
Добавлен:
19.11.2019
Размер:
151.55 Кб
Скачать

1.2Транслятор

Типичным транслятором является ассемблер. Существует целый ряд основных функций, например таких, как трансляция мнемонических кодов операций в их эквиваленты на машинном языке или присваивание машинных адресов символическим меткам, которые должны выполняться любым ассемблером.

Большинство ассемблеров выполняет два просмотра исходной программы. Основной задачей первого просмотра является поиск символических имен и назначение им адресов. Фактическая трансляция выполняется во время второго просмотра. Ассемблер наряду с трансляцией исходной программы должен также выполнять и так называемые директивы ассемблера (иногда их называют псевдокомандами). Эти директивы не переводятся непосредственно в машинные команды (хотя и могут оказывать влияние на объектную программу), а управляют работой самого ассемблера. В заключительной фазе своей работы ассемблер должен записать полученный объектный код на некоторое устройство вывода. Позднее эта объектная программа будет загружена в оперативную память для исполнения.

Для представления объектной программы обычно используется простой формат, в котором определены три типа записей: запись-заголовок, тело программы и запись-конец. Запись-заголовок содержит имя программы, её начальный адрес и длину. Тело программы содержит машинные команды и данные программы с указанием адресов их загрузки. Запись конец отмечает конец объектной программы и определяет адрес, с которого следует начинать исполнение программы (точку входа).

Теперь подробнее опишем функции каждого из двух просмотров простого ассемблера:

Первый просмотр (определение имен):

  1. назначение адресов для всех предложений исходной программы;

  2. запоминание значений (адресов), присвоенных всем меткам, для последующего их использования на втором просмотре;

  3. выполнение некоторых директив ассемблера.

Второй просмотр (трансляция команд и генерация объектного кода):

  1. трансляция команд(перевод кодов операций и разрешение адресных ссылок);

  2. генерация данных, заданных директивами BYTE,WORD и др.

  3. выполнение тех директив ассемблера, которые небыли обработаны на первом просмотре.

  4. запись объектного кода и выдача листинга.

1.3Машинно-зависимые характеристики ассемблера

1. Форматы команд и способы адресации.

Преобразование имен регистров в их числовые значения может делаться с помощью отдельной таблицы. Часто для удобства используют таблицу имен.

Для трансляции большинства команд вида память – регистр используется относительный способ адресации (либо относительно счетчика команд, либо относительно базы). В любом случае ассемблер должен вычислить смещение, которое является составной частью объектной команды. Трансляция команд, в которых используются непосредственные операнды, проще, поскольку в них не нужна организация ссылок на оперативную память. Все, что требуется, это преобразовать операнд во внутреннее представление и занести его в команду. Ассемблирование команд, использующих косвенную адресацию, фактически не представляет ничего нового. Для того чтобы получить требуемый целевой адрес, вначале обычным образом вычисляется смещение. Затем в разряде n генерируемой команды устанавливается признак косвенной адресации.

2.Перемещение программ:

Поскольку ассемблеру не известен фактический адрес начала загрузки, он не может выполнять необходимую настройку адресов, используемых программой. Однако ассемблер может указать загрузчику те части объектной программы, которые нуждаются в настройке при загрузке Объектная программа, содержащая информацию, необходимую для выполнения подобной модификации, называется перемещаемой программой. Естественно, что команда загрузчика должна быть составной частью объектной программы. Это можно сделать с помощью дополнительного типа записи объектного формата – запись модификатора. Эта запись имеет следующий формат:

Запись-модификатор:

Столбец 1

М.

Столбец 2-7

Начальный адрес модифицируемого адресного поля относительно начала программы (шестнадцатеричный).

Столбец 8-9

Длина модифицируемого адресного поля в полубайтах (шестнадцатеричная).

Длина хранится в полубайтах (а не в байтах), так как модифицируемое адресное поле не обязательно содержит целое число байтов. Месторасположения модифицируемого адресного поля задаётся адресом байта, в котором содержатся старшие разряды адресного поля. Если модифицируемое адресное поле занимает нечетное количество полубайтов, то предполагается, что оно начинается с середины байта, адрес которого задан в столбцах 2-7. Модификация во время загрузки требуется только в командах, использующих прямую (как альтернатива относительной) адресацию.