Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Работа с отладчиком Turbo Assemblera




Лабораторная работа №1

Тема: Трансляция, компоновка и отладка программ

Цель работы: освоение инструментальных средств создания программ на языке ассемблера.

 

1 Ход работы:

 

1. Набрать приведенную в тексте программу на ассемблере с использованием редактора текста.

2. Оттранслировать программу в объектный код.

3. Скомпоновать программу (получить исполнимый файл). Изучить листинг программы.

 

Содержание отчета

 

Отчет лабораторной работы представляется в печатном виде.

Отчет должен содержать:

- титульный лист;

- цель лабораторной работы;

- вариант задания;

- исходный текст программы;

- результат в 16-тиричном и 10-тичном виде.

 

3 Контрольные вопросы

 

1. Основные группы функций DOS

2. Характеристика пакета МASM. Состав пакета, назначение.

3. Командная строка masm.exe

4. Командная строка ml.exe

5. Командная строка link.exe

6. Отладчик cv.exe

7. Программа lib.exe

8. Характеристика пакета TASM. Состав пакета, назначение.

9. Формат командной строки для запуска tasm.exe

10. Формат командной строки для запуска tlink.exe

11. Отладчик Turbo Debuger (TD)

 

Теоретический материал

 

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

1. Постановка задачи (точное и подробное описание функциональности будущей программы, а также описание всех входных и выходных данных и способа их передачи программе);

2. Разработка алгоритма программы (построение блок схемы, граф-схемы или текстовое или математическое описание решения);

3. Формализация алгоритма (запись алгоритма на языке программирования).

Создание текстового файла программы с расширением.asm (например my.asm). Отсутствие среды разработки позволяет программисту самостоятельно выбрать текстовый редактор для написания кода программы. Для этой цели подойдет любой текстовый редактор с нумерацией строк, мы рекомендуем редактор, встроенный в оболочку "FAR Manager".

4. Компиляция программы;

Компиляция - процесс перевода программы из текстового вида в машинный код. При использовании компилятора фирмы Borland необходимо выполнить:

Tasm my.asm

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

В случае успешной компиляции будет создан файл, содержащий объектный код программы my.obj, который ещё не является исполняемым модулем.

5. Компоновка программы;

Компоновка - создание из файла объектного кода исполняемого модуля.

Tlink my.obj

В качестве параметра компоновщик tlink принимает имя файла содержащего объектный код программы (в нашем случае - my.obj). В случае успешной компоновки будет создан исполняемый модуль my.exe

6. Запуск и тестирование исполняемого модуля программы.

На данном этапе необходимо проверить, соответствует ли написанная программа постановке задачи, сделанной нами на этапе №1. Неправильная работа программы говорит об алгоритмической ошибке (семантическая ошибка), поэтому для успешного её устранения нужно вернуться на этап разработки алгоритма (этап №2).

Написание первой программы на языке ассемблера

5.1 Постановка задачи. Написать программу, которая выводит на экран строчку "Привет!".

5.2 Разработка алгоритма программы. Алгоритм линейный, разработки не требует.

Формализация (запись) алгоритма

В текстовом редакторе создаем файл privet.asm и записываем в него следующий код (без номеров строк):

 

       
         
       
         
       
       
         
         
         
         
         
         
         
         
         
         
       
       

 

5.3.1 Компиляция программы

Tasm privet.asm

5.3.2 Компоновка программы

Tlink privet.obj

5.3.3 Запуск и тестирование

privet.exe

5.3.4 Описание программы privet.asm

 

Строки 1 - 3 программы privet.asm содержат описание сегмента данных. Сегмент данных - область память, в которой будут храниться данные для наших программ.

Строки 5 - 17 — это код программы, её исполняемая часть.

В 8 и 9 строках выполняется настройка сегмента данных программы.

Строки 11 - 13 — вывод строки на экран при помощи функции №9 прерывания 21h (подробнее о функциях и работе с ними на следующей лабораторной работе).

15 и 16 строки — стандартное завершение программы.

После символа ';' пишутся комментарии, они не обрабатываются компилятором.

Переход на новую строку

Для организации перехода на новую строку достаточно вывести на экран символы перевода строки и возврата каретки (CR/LF). Эти символы имеют коды 10 и 13. Если в нашей программе необходимо после вывода строки перейти на новую, то для этого достаточно переписать вторую строку программы:

mes2 db 'Выводим строку и переходим на новую...', 10, 13, '$'

Переход на новую строку можно выполнить и до вывода сообщения на экран:

mes3 db 10, 13, 'Выводим с новой строки...$'

5.3.5 Задание для выполнения

 

Написать программу, которая выводит одно под другим следующие сообщения:

Привет!

Меня зовут компьютер!

До свидания!

Работа с отладчиком Turbo Assemblera

 

Чтобы проверить работоспособность созданной программы и увидеть результаты ее работы (если не использован вывод на дисплей), применяют программу отладчик. Тестирование и отладка исполняемой программы выполняется отладчиком TD или DEBUG.

Отладчик td.exe, разработанный фирмой Borland International представляет собой оконную среду отладки программ на уровне исходного текста на языках Pascal, C, ассемблер. Основные возможности отладчика, наиболее широко используемые студентами - это:

- выполнение трассировки программы в прямом направлении, при котором за 1 шаг выполняется одна машинная инструкция;

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

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

- глобального, находящегося в верхней части экрана и постоянно доступного. Вызов меню осуществляется нажатием клавиши F10;

- локального, учитывающего особенности окон и становящегося активным щелчком правой мыши или нажатием клавиш Alt+F10.

Специфика программы на ассемблере в том, что делать выводы о правильности ее функционирования можно, отслеживая работу на уровне микропроцессора, обращая внимание на то, как изменяется состояние ресурсов микропроцессора и компьютера в целом. Общее поведение программы позволяет просмотреть режим безусловного выполнения, который вызывается нажатием клавиши F9. Однако для детального изучения работы программы рекомендуется применять режим выполнения программы по шагам, для вызова которых выбираются пункты меню Run -> Trace into ( прерывание или внутренняя процедура будут выполняться по шагам) или Run -> Step over (вызов процедуры или прерывание отрабатываются как одна обычная команда). При этом используется окно CPU, вызов которого осуществляется через глобальное меню командой View -> CPU. Окно CPU состоит из 5 подчиненных окон:

- окно с исходной программой в машинных кодах,

- Register – окно регистров микропроцессора, отражающее текущее состояние регистров,

- окно флагов, отражающее состояние флагов микропроцессора в соответствии с таблицей 1;

- окно стека, в котором отражается содержимое области памяти, отведенной для стека,

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

 

Таблица 1 Обозначения и значения флагов

 

Имя флага Обозначение флага Установлен Сброшен
Флаг переполнения O    
Флаг направления D    
Флаг прерывания I    
Флаг знака S 1(<0) 0(>0)
Флаг нуля Z    
Флаг вспомогатель-ного переноса A    
Флаг четности P    
Флаг переноса C    

Рекомендуемый порядок работы с отладчиком:

а) вызвать на выполнение td.exe.;

б) выбрать файл исполняемой программы, набрав комбинации клавиш FILE ->OPEN и имя Вашей программы в окне запроса. После ответа OK на сообщение об отсутствии символьной таблицы в окно CPU загружается программа с нулевого адреса относительно начала сегментного регистра кодов (для приведенного в конце описания лабораторной работы примера это будет команда PUSH DS);

в) выбрать режим пошагового выполнения Run -> Step over. В окне CPU появляется окрашенный треугольник между относительным адресом команды и машинным кодом команды. Он показывает очередную команду, которая будет выполнена процессором после нажатия функциональной клавиши F8. Изменения, которые происходят в сегментных регистрах после выполнения команды, отмечаются белым цветом соответствующей строки в окне регистров. Пошаговый процесс выполнять до тех пор, пока не появится сообщение об окончании программы (с ключевым словом terminated);

г) после выполнения команд, связанных с изменением содержимого ячеек памяти, нужно просматривать эти изменения командой VIEW -> DUMP. При отсутствии мыши скрыть окно дампа памяти можно нажатием функциональной клавиши F6.

 

Структура программы

 

Программа на языке ассемблера представляет собой последовательность операторов, описывающих выполняемые операции. Оператором (строкой) исходной программы может быть или команда, или псевдооператор (директива) ассемблера. Команды выполняются в процессе решения задачи на компьютере, а директивы – в процессе ассемблирования (трансляции) программы. Следовательно, в отличие от команд директивы сообщают ассемблеру (транслятору), что ему делать с командами и данными, которые вводятся в программе. Ниже в таблице 2 перечисляются наиболее часто используемые директивы ассемблера [5].

 

Таблица 2 Синтаксис и функции псевдооператоров (директив)

 

Псевдооператор Формат и Функция
   
Определения данных DB [имя] DB выражение [,…….] определяет переменную или присваивает ячейке памяти начальное значение. Резервирует 1 или более байт (при наличии запятых)
DW [имя] DW выражение [,…….] аналогично предыдущему резервирует двухбайтовые слова
DD [имя] DD выражение [,…….] Резервирует 4-х байтовые двойные слова
Определения сегмента или процедуры SEGMENT   Имя_cer SEGMENT [тип_выравнивания (подгонки)] [тип_связи] [‘класс’] .... Имя_cer ENDS Определяет границы сегмента программы. Обязательно содержит начало описания Имя_cer SEGMENT и окончание описания Имя_cer ENDS
ASSUME ASSUME регистр_cer: Имя_cer [,…….] Или ASSUME регистр_cer: NOTHING Cообщает Ассемблеру, какой регистр сегмента связан с соответствующим сегментом программы. Оператор ASSUME регистр_cer: NOTHING отменяет действие всех предыдущих операторов ASSUME для данного регистра
PROC Имя PROC [NEAR] или Имя PROC FAR .... .... RET имя ENDP Присваивает имя последовательности операторов. Должно иметь начало PROC и окончание ENDP
Псевдооператор Формат и Функция
Управление трансляцией END   END [метка точки входа] Отмечает конец исходной программы
Внешние ссылки PUBLIC PUBLIC идентификатор Делает определенный ранее идентификатордоступным другим модулям программы, которые впоследствии должны быть присоединены к данному модулю
EXTERN   EXTERN имя: тип [, ….] Указывает, что имя определено в другом модуле программы
INCLUDE   INCLUDE файл вставляет содержимое указанного файла в текущий файл исходной программы
Определение идентификаторов EQU Имя EQU текст или Имя EQU числовое_выражение Постоянно присваивает идентификатору имя текст или числовое_выражение Имя = числовое_выражение Числовое_выражение присваивается идентификатору имя, но может быть переприсвоено

Обязательные требования к структуре ASM -программы следующие [6]:

- программа может использовать четыре сегмента памяти, начальные адреса которых должны быть загружены в регистры микропроцессора CS,DS, ES, SS, а сами сегменты в явном виде определены в программе в виде операторных скобок

- имя_сегмента segment

-........

- имя_сегмента ends,

например,

DSEG SEGMENT PARA PUBLIC ‘DATA’

SOURCE DB 10,20,30,40

DEST DB 4 DUP(?)

DSEG ENDS;

- в программе должно быть указание, какие сегментные регистры закрепляются за используемыми именами регистров, например:

ASSUME CS:CSEG, DS:DSEG, SS:STACK.

При исполнении программы адреса сегментных регистров CS, SS, ESв соответствии с вышеприведенными указаниями загружаются автоматически;

- сегмент данных DS в EXE-программе не может быть загружен автоматически, поскольку он используется программой-загрузчиком LINK для формирования начального адреса служебной области памяти – префикса программного сегмента (PSP), непосредственно предшествующего любой исполняемой программе. PSP – это группа служебных слов в оперативной памяти, формируемая для каждой загружаемой программы пользователя и занимающая обычно 256 байт (100Н байт), именно адрес этой области записывается в регистр DS. Поэтому в самом начале исполняемой программы этот сегмент инициируется принудительно: сначала в стек записывается адрес возврата к служебной области в виде 2-ух слов – содержимого регистра DS и нулевого смещения; затем в регистр DS записывается адрес сегмента данных исполняемой программы, например, как показано ниже:

PUSH DS; поместить в стек адрес PSP

SUB AX,AX; обнулить регистр АХ

PUSH AX; поместить в стек смещение адреса возврата=0

MOV AX,DSEG; инициировать адрес сегмента данных

MOV DS,AX; загрузить адрес в регистр DS;

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

END OUR_PROG;

- обеспечение выхода из программы, например, используя функцию 4С прерывания 21Н, как показано ниже:

MOV AX,4C00Н

INT 21H

или оформив основную программу как процедуру с атрибутом FAR и стандартным выходом из процедуры RET, как показано в приведенной ниже программе.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...