Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 / МУ_ЭВМ+ПУ_ч1 / 3_МУ_ЭВМ+ПУ-TASM.docx
Скачиваний:
29
Добавлен:
28.05.2015
Размер:
40.19 Кб
Скачать

Лабораторная работа 3 этапы разработки программы на ассемблере

    1. Цель работы

Изучение структуры простейшей ассемблерной программы, этапов создания программы на Ассемблере, возможностей отладчика.

    1. Простейшая программа на Ассемблере

Для знакомства с языком Ассемблера рассмотрим один из вариантов программы, осуществляющей вывод на экран фразы «Здравствуй, МИР!!!».

1 Model small ; модель памяти

2 .data ; объявление сегмента данных

3 ; описание строки для вывода

4 message db 'Здравствуй, МИР!!!', '$'

5 .stack 100h ; объявление сегмента стека

6 .code ; объявление сегмента кода

7 start: ; точка входа в программу

8 ; настройка DS на сегмент данных

9 mov ax, @data ; адрес сегмента данных  в AX

10 mov ds, ax ; содержимое AX  в DS

11 ; вывод на экран строки message

12 lea dx, message ; начальный адрес message  в DX

13 mov ah, 9h ; функция DOS: вывод строки на экран

14 int 21h ; вызов DOS

15 ; стандартный выход из программы

16 mov ax, 4С00h ; функция DOS: выход из программы

17 Int 21h ; вызов dos

18 ; завершение программы

19 end start

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

Строка 1 содержит объявление выбранной модели памяти.

Строки 2-4 объявляют сегмент данных. В строке 4 описана строковая переменная message ‘Здравствуй, МИР!!!’, вспомогательный символ ‘$’ используется для сигнала об окончании вывода сообщения на экран.

Строка 5 описывает сегмент стека программы - область памяти, специально выделяемую для временного хранения данных программы. Под стек зарезервировано 256 байт (100h).

Строки 6-19 содержат сегмент кода. Метка start помечает первую команду программы.

Строки 9-10 выполняют инициализацию сегментного регистра ds.

В строке 12 в регистр DX загружается адрес сообщения message ‘Здравствуй, МИР!!!’.

В строке 13 в регистр ah заносится число 9h - номер функции MS DOS Вывод строки, а затем вызывается прерывание MS-DOS int 21h, которое запускает эту функцию.

Строки 16-17 - обращение к средствам операционной системы для стандартного выхода из программы.

Строка 19 содержит директиву END, помечающую конец текста исходной программы.

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

    1. Этапы разработки программы

3.3.1 У существующих реализаций Ассемблера нет интегрированной среды, подобной интегрированным средам большинства языков высокого уровня. Поэтому для выполнения всех функций по вводу кода программы, ее трансляции, редактированию и отладке используют отдельные служебные программы. Большая часть их входит в состав специализированных пакетов Ассемблера. В данном курсе предпочтение отдано пакету Turbo Assembler TASM фирмы Borland.

3.3.2 Для подготовки кода программы можно использовать любой текстовый редактор, например, Блокнот, Microsoft Word, встроенные редакторы оболочек FAR, Norton Commander и др. Основное требование к редактору - не вставлять в текст символы, не входящие в алфавит ассемблера (как это делает, например, Lexicon). Файл с исходной программой должен иметь расширение .asm. Пусть для определенности имя рассмотренной выше программы будет progr.asm.

3.3.3 На этапе трансляции при помощи программы tasm.exe формируется объектный модуль, который включает в себя представление исходной программы в машинных кодах и некоторую другую информацию, необходимую для отладки и компоновки его с другими модулями. Формат команды:

TASM [<опции>] <имя_исходного_файла> [,<имя_объектного_файла>] [,<имя_файла_листинга>] [,<имя_файла_перекрестных_ссылок>],

где:

<опции> - режим работы транслятора TASM; рекомендуется применять опцию /zi – включить в объектный файл информацию для отладки;

<имя_исходного_файла> - обязательный параметр;

<имя_объектного_файла>, <имя_файла_листинга>, <имя_файла_перекрест- ных_ссылок> – необязательные параметры, если не заданы два последних имени, то соответствующие файлы не будут созданы.

Для получения справки о формате командной строки и возможных значениях параметров нужно запустить tasm.exe без указания аргументов.

Файл листинга содержит информацию о программе в виде строк формата:

<глубина_вложенности> <номер_строки> <смещение> <машинный_код> <исходный_код>

где :

<глубина_вложенности> - уровень вложенности включаемых файлов или макрокоманд в исходном файле;

<номер_строки> - номер строки в файле листинга (а не в программе!);

<смещение> - смещение в байтах текущей команды относительно начала сегмента кода;

<машинный_код> - машинное представление команды Ассемблера, которая записана в поле <исходный_код>;

<исходный_код> - строка кода исходной программы.

В конце листинга формируются таблицы об используемых метках, именах и сегментах в программе. При наличии ошибок транслятор включает в строку и в конец листинга соответствующие сообщения.

При работе с tasm нужно учитывать следующие особенности.

1. Расширение .asm в имени исходного файла может быть опущено.

2. Если необходимо создать лишь объектный файл progr.obj, можно задать команду:

tasm.exe progr

Если планируется в дальнейшем работа в отладчике, требуется дополнительно указать нужную опцию:

tasm.exe /zi progr

3. Если, кроме объектного файла, необходимы файлы листинга и перекрестных ссылок и их имена при этом должны совпадать с именем исходного файла (наиболее типичный случай), то нужно поставить запятые вместо указания имен файлов:

tasm.exe /zi progr , , ,

В результате будут созданы файлы: progr.obj, progr.lst, progr.xrf.

Если имена объектного файла, файла листинга и файла перекрестных ссылок не должны совпадать с именем исходного файла, то нужно в соответствующем порядке в командной строке указать имена этих файлов.

4. В результате работы программы tasm на экране появится примерно следующее:

Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International

Assembling file: progr.asm

Error messages: None

Warning messages: None

Passes: 1

Remaining memory: 373k

Если программа содержит ошибки, то транслятор выдаст на экран строки сообщений, начинающиеся словами «Error» (ошибка) и /или «Warning» (предупреждение). Последние две строки информируют о количестве проходов, сделанных ассемблером, и о количестве оставшейся памяти.

3.3.4 Результатом работы компоновщика является создание загрузочного (исполняемого) файла с расширением .ехе или .com. В данном пособии рассматривается процесс формирования exe-файлов.

Формат командной строки для запуска компоновщика:

TLINK [<опции>] <список_объектных_файлов> [,<имя_загрузочного_модуля>]

[,<имя_файла_карты>] [,<имя_файла_библиотеки>],

где:

<опции> - необязательные параметры, управляющие работой компоновщика, одна из наиболее употребляемых опций: /v - включить отладочную информацию в исполняемый файл;

<список_объектных_файлов> - обязательный параметр, файлы должны быть разделены пробелами или знаком плюс;

<имя_загрузочного_модуля> - если не указано, то имя загрузочного модуля будет совпадать с именем первого объектного файла из списка;

<имя_файла_карты> - наличие этого параметра обязывает компоновщик создать файл, в котором перечисляются имена, адреса загрузки и размеры всех сегментов, входящих в программу;

<имя_файла_ библиотеки> - путь к файлу библиотеки с расширением .lib.

Чтобы получить справку об опциях программы tlink.exe, достаточно запустить ее без указания параметров.

Для компоновки учебной программы следует запустить программу tlink.exe командной строкой вида:

tlink.exe /v progr.obj

При успешной компоновке на экране появляется сообщение:

Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International

Для запуска программы на выполнение нужно набрать в командной строке имя исполняемого модуля (в нашем случае: progr.exe ) и нажать <Enter>. Программа выведет на экран сообщение:

Здравствуй, МИР!!!

3.3.5 Не всегда создание исполняемого модуля гарантирует правильность работы программы. Поэтому практически обязательным этапом разработки программы становится отладка.

Некоторые возможности отладчика Turbo Debugger (TD):

  • выполнение трассировки программы, то есть исполнение программы по шагам;

  • просмотр и изменение состояния аппаратных ресурсов микропроцессора во время покомандного выполнения программы.

TD не дает возможности исправлять исходный текст программы. После определения причины ошибочной ситуации можно, при необходимости, не завершая работу отладчика, внести исправления прямо в машинный код и запустить программу на выполнение. Однако, после завершения работы отладчика эти изменения не будут сохранены, и нужно внести их повторно, но уже в исходный текст и заново создать загрузочный модуль.

Запуск отладчика производят из командной строки:

td.exe <имя_исполняемого_модуля>

В открывшемся окне просмотра модуля Module находится исходный текст программы. Курсор выполнения (в виде треугольника) указывает на первую команду, подлежащую выполнению. Этой команде предшествует имя метки. Это так называемая точка входа в программу.

Управление работой отладчика ведется с помощью системы меню.

Глобальное меню - находится в верхней части экрана и доступно постоянно.

Локальное (контекстное) меню - вызывается в каждом окне отладчика щелчком правой кнопки мыши.

Специфика программ на ассемблере состоит в том, что делать выводы о правильности их функционирования можно, только отслеживая работу на уровне микропроцессора – в CPU‑окне. Для вызова этого окна используют комбинацию клавиш <Alt+V>+<C> или команду View / CPU (просмотр окна центрального процессора).

CPU-окно отражает состояние микропроцессора и состоит из 5 подокон.

1. Окно с исходной программой. Это программа из окна Module, но уже в машинном виде.

2. Registers - окно регистров микропроцессора. По умолчанию отображаются регистры только процессора i8086. Для того, чтобы проконтролировать состояние 32-битных регистров, нужно вызвать локальное меню и выбрать команду Registers 32-bit – Yes.

3. Окно регистра флагов.

4. Окно стека Stack .

5. Окно с дампом памяти Dump. Для задания отображения области памяти нужно в локальном меню выбрать соответствующую команду. Например, чтобы просмотреть содержимое сегмента данных, нужно после выполнения команд загрузки начального адреса в DS (в программе progr.asm – строка 10) в контекстном меню выбрать GOTO и указать: DS:0000.

Запустить программу на выполнение в отладчике можно в одном из четырех режимов:

  • режим безусловного выполнения (F9);

  • выполнение по шагам (F7, F8);

  • выполнение до текущего положения курсора (F4);

  • выполнение с установкой точек прерывания (F2 –установить / отменить точки останова).