Рассмотрим теперь работу ассемблера в целом. Детали будут
обсуждены позднее, но сейчас нам нужно ввести новые термины и
ознакомиться с реальным результатом работы ассемблера.
Ассемблер берет программу, написанную на языке ассемблера, и
превращает ее в машинный язык. Файл, который содержит программу на
языке ассемблера, называют исходным файлом. Выход и ассемблера в
действительности является не собственно машинным языком, а
некоторым промежуточным представлением программы. Этот выходной
файл называют объектным файлом. Данные в нем называются объектным
кодом. Для получения из него настоящего машинного кода объектный
код должен быть несколько изменен. Для 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.