Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
44
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

Глава 2

Основы программирования

45

менте команд к данным должны быть скорректированы на величину пе­рекрытия сегментов, в нашем случае — на 1 байт. Эта коррекция выпол­няется системой после загрузки программы в память, но еще до ее запус­ка. Адреса, которые могут потребовать описанной коррекции, и помеча­ются в листинге трансляции буквой «г».

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

Вернемся к рассмотрению листинга трансляции. Данные, введенные нами в программу, также оттранслировались: вместо символов текста в загрузочный файл попадут коды ASCII этих символов. Так, буква «П» преобразовалась в код 8Fh, буква «р» в код ЕО и т. д. При выводе этих кодов на экран видеосистема компьютера преобразует их назад в изображения символов, записанных в исходном тексте программы.

Из листинга трансляции легко определить размер отдельных состав­ляющих программы. В нашем случае длина сегмента команд составляет ilh = 17 байт, длина сегмента данных — 14h = 20 байт, а под стек отведе­но ровно столько, сколько мы запросили в программе — lOOh = 256 байт. Размер же всей программы окажется больше суммы длин сегментов, во-первых, из-за пустых промежутков между сегментами (у нас на них уйдет 15 + 12 = 27 байт), и, во-вторых, за счет подсоединения к программе обязательного префикса программы, имеющего всегда размер 256 байт.

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

Объектный файл является основным результатом работы транслятора и представляет собой текст программы, преобразованный в машинные коды. Хотя в этом файле уже присутствуют коды команд, он не может быть выполнен. Для того чтобы получить выполнимую программу, объек­тный файл необходимо скомпоновать.

Компоновка объектного файла выполняется с помощью программы компоновщика (редактора связей). Эта программа получила такое назва­ние потому, что ее основное назначение — подсоединение к файлу с основной программой файлов с подпрограммами и настройка связей между ними. Однако компоновать необходимо даже простейшие программы, не содержащие подпрограмм. Дело в том, что у компоновщика имеется и вторая функция — изменение формата объектного файла и преобразова­ние его в выполнимый файл, который может быть загружен в оператив­ную память и выполнен. Файл с программой компоновщика обычно име­ет имя LINK.EXE, хотя это может быть и не так. Например, компонов­щик пакета TASM назван TLINK.EXE. В результате компоновки образуется загрузочный, или выполнимый файл с расширением .ЕХЕ.

Отладку и изучение работы готовой программы удобнее всего осуще­ствлять с помощью интерактивного отладчика, который позволяет вы-

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

Рассмотрим вкратце основные приемы работы с «турбоотладчиком» TD.EXE из пакета TASM. Приступая к работе с отладчиком, следует убе­диться, что в рабочем каталоге имеются и загрузочный (Р.ЕХЕ), и исход­ный (P.ASM) файлы, так как отладчик в своей работе использует оба эти файла. Для запуска отладчика следует ввести команду

tdp

На экране появится кадр отладчика, в котором видны два окна — окно Module с исходным текстом отлаживаемой программы и окно Watches для наблюдения за ходом изменения заданных переменных в процессе выполнения программы (рис. 2.3). Окно Watches нам не понадобится, и его можно убрать, щелкнув мышью по маленькому квадратику в левом верхнем углу окна, или введя команду <Alt>+<F3>, предварительно сде­лав это окно активным. Переключение (по кругу) между окнами осуще­ствляется клавишей <F6>.

Data Options Uindov Help

BEADY

Ё File Edit Uieu Bun Breakpoints -tiJ-flodiile: p File: p.asn 4 ~ -™

;0пиием сегмент конанд

assune CS:codes,DS:data

;Откроен сегмент команд

;Настроим DS

:на сегмент данных

codes segnent ' begin: nou AX,data

*ou DS.AX

;Выведем на экран строку текста

;Функция DOS вывода на экран ;Адрес выводимой строки ;Вызов DOS

;Функция DOS завершения программы

;Битов DOS

;Закроем сегмент команд

пои AH,G9h

пои DX,offset nsg

int 21h

:Завершим программу

пои flX,4CeOh

int 21h

codes ends :0пинем сегмент данных data segment .'Откроен сегиент данных

nsg db 'Программа работает!$'

data ends ;Закроем сегиент данных

Fl-4telp F2-Bkpt ГЗ-Nod F4-Here FS-Zoon Fo-Next F7-Trace F8-Step FS-Run Fie-Henu


рис. 2.3. Начальный кадр отладчика с текстом отлаживаемой программы.


; 0пишем сегмент стека

46