Рассмотрим теперь работу ассемблера в
целом. Детали будут обсуждены позднее, но сейчас нам нужно ввести новые термины и ознакомиться с реальным результатом работы
ассемблера.
Ассемблер берет программу, написанную на
языке ассемблера, и превращает ее в машинный язык. Файл, который содержит программу на языке ассемблера, называют исходным
файлом. Выход и ассемблера в действительности является не собственно
машинным языком, а некоторым промежуточным представлением
программы. Этот выходной файл называют объектным файлом. Данные в нем называются объектным кодом. Для получения из него настоящего машинного кода объектный код должен быть несколько изменен. Для IBM PC это делает программа редактор связей LINK. Шаг преобразования объектных кодов в машинные принято называть построением
связей или редактированием связей. Как пользоваться редактором связей мы увидим в одной из следующих глав.
Помимо преобразования исходного кода в
объектный ассемблер создает несколько других выходных
файлов. Один из них - ассемблерный листинг. Он содержит сообщение о действиях ассемблера. Этот файл содержит исходный код вместе с комментариями, а также объектный код,
сформированный ассемблером. Фиг. 2.9 дает пример листинга ассемблера, иногда называемого распечаткой.
Microsoft (R) Macro Assembler Version 5.00 10/28/88
16:35:34
Фиг. 2.9 Пример ассемблирования Page 1-1
1 PAGE ,132
2 TITLE Фиг. 2.9 Пример
ассемблирования
3 0000 CODE SEGMENT
4 ASSUME CS:CODE
5
6 0000 03 C3 PART1: ADD AX,BX ; Сложить с длиной буфера
7
8 0002 CODE ENDS
9 END
Фиг. 2.9 Пример ассемблирования
Взяв пример команды ассемблера, рассмотрим
результаты работы ассемблера. В правой части распечатки находятся исходные команды. В левой части - информация,
сгенерированная ассемблером. Первая колонка содержит номер каждой строки
распечатки. Ассемблер устанавливает эти номера для исходного
файла. Они строк не обязательно соотносятся с номерами строк в
исходном файле сформированном текстовым редактором.
Во второй колонке содержатся адреса
инструкций. Программа LINK может их изменить, но они являются лучшим
предположением, которое может сделать ассемблер на шаге
ассемблирования. Следующая колонка - код команды на машинном языке. Поскольку команды 8088 имеют длину от 8 до 56 бит, это поле будет изменяться
в размере. Кроме того, программа LINK может изменить некоторую
информацию в поле объектных кодов. Редактор связей может изменить любую группу команд, оперирующих с адресами. Однако, за исключением адресов, листинг ассемблера дает верные машинные коды,
которые и будут в дальнейшем исполняться.
В большинстве примеров программ мы будем
использовать листинг ассемблера. Это позволит нам сразу видеть вырабатываемый ассемблером код.
Другой создаваемый ассемблером файл - файл
перекрестных ссылок. Этот файл описывает все связи между
метками и командами, которые их используют. Такая информация незаменима, когда вы пытаетесь изменить программу. Вы можете воспользоваться перекрестными ссылками для того, чтобы выявить все
команды, которые обращаются к определенному участку памяти. Это позволяет программисту определить все команды, на которые может
повлиять изменение в другой части программы. Использование информации о перекрестных ссылках будет обсуждаться в главе 5.