Реклама:

До настоящего момента мы обозначали команды их мнемониками - краткими и легкими для запоминания символическими именами, как то ADD или СМР. Регистры также назывались символическими именами - АХ, ВР и т. д. Программа, написанная с применением символических имен команд и регистров, называется программой на языке ассемблера, или просто ассемблерной программой. Чтобы выполнить такую программу, в первую очередь необходимо преобразовать ее в двоичные числа, с которыми работает процессор. Прикладная программа, которая осуществляет такое преобразование, называется ассемблером. То, что получается в результате работы этой программы (то есть в результате ассемблирования), называется объектным файлом. Многие программы выполняют вызовы уже ассемблированных подпрограмм, хранящихся в библиотеках. Чтобы такие программы могли выполняться, ассемблированный объектный файл и библиотечные подпрограммы, к которым он обращается (а они также существуют в виде объектных файлов), необходимо объединить в исполняемый двоичный файл. Эту операцию проводит специальная программа, называемая компоновщиком. Ассемблирование считается полностью завершенным лишь после сборки компоновщиком исполняемого двоичного файла из одного или нескольких объектных файлов. Затем операционная система помещает этот файл в память и исполняет его.

В первую очередь, ассемблер должен сформировать таблицу символов; с ее помощью имена символических констант и меток отображаются на двоичные числа, которым они фактически соответствуют. Константы, явно определенные в программе, можно разместить в таблице символов без предварительной обработки. Метки же представляют адреса, значения которых не столь очевидны. Для определения этих значений ассемблер проводит построчный анализ программы, называемый первым проходом. Во время этого прохода он отслеживает показания счетчика адресов, который обычно обозначается точкой. При обнаружении на первом проходе каждой команды или операции резервирования памяти счетчик адресов увеличивается на величину, которая выражает объем памяти, необходимый для размещения данного элемента. Таким образом, если первые две команды занимают 2 и 3 байта соответственно, то метка третьей команды принимает численное значение 5. К примеру, если следующий фрагмент кода находится в начале программы, значением метки L будет 5:

M0V АХ,6 MOV ВХ.500 L:

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

Ассемблер || Оглавление || Ассемблер as88 из набора АСК