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

Общая схема разработки программы на ассемблере




Общая схема разработки программы на ассемблере включает четыре этапа:

Ø ввод исходного текста (кода) программы;

Ø создание объектного модуля (компиляция программы);

Ø создание загрузочного модуля (компоновка программы);

Ø отладка программы.

Для ввода кода программы может использоваться любой текстовый редактор. Основным требованием к нему является ввод текста без спецсимволов редактирования. Файл кода должен обязательно иметь расширение asm.

Программы (компиляторы, компоновщики, отладчики), реализующие остальные этапы разработки, как правило, входят в состав программных пакетов ассемблера. Чаще всего используются программные пакеты TASM, MASM и WASM соответственно компаний Borland, Microsoft и Watcom.

Например, в пакете TASM компиляция программы осуществляется при помощи программы tasm.exe.

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

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

Так как обязательным аргументом командной строки является только имя исходного файла, то для компиляции, например, программного файла prog.asm достаточно выполнить в командной строке

Tasm prog. asm

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

Tasm prog. asm,,,

Необязательный аргумент опции позволяет задавать режим работы компилятора tasm. Например, опция /zi включает в объектный файл информацию для отладки, а опция /x – запрещает создание файла карты (с расширением map).

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

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

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

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

Обязательным аргументом командной строки является только список компонуемых файлов с расширениями obj. Файлы должны быть разделены пробелами или знаком «+».

Необязательный параметр опции служит для управления работой компоновщика.

Например, для компоновки модуля prog.obj в COM-файл prog.com необходимо выполнить в командной строке

Tlink / t prog. obj

а для получения EXE-файла –

Tlink prog. obj

COM и EXE - основные два формата исполняемых файлов в DOS. Файлы типа COM содержат только скомпилированный код без какой-либо дополнительной информации о программе. Весь код, данные и стек COM-программы в отличие от EXE-программы располагаются в одном сегменте и не могут превышать 64Кб. Кроме того, файлы типа EXE содержат заголовок, где описывается размер файла, требуемый объем памяти, список команд в программе, использующих абсолютные адреса, которые зависят от расположения программы в памяти, и т.д.

Отладка программы осуществляется с целью поиска логических ошибок и для исследования существующих программ. В составе пакета TASM поставляется отладчик Turbo Debugger - td.exe, представляющий собой оконную среду для отладки программ на уровне исходного текста. Turbo Debugger позволяет выполнять трассировку программы в прямом и обратном направлении, а также просмотр и изменение состояния аппаратных ресурсов микропроцессора во время покомандного выполнения программы.


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

Название: Сегментная адресация и сегментная структура программ.

Цель работы: Исследование расположения сегментов программы в памяти.

Задание: Создать и выполнить программу, выводящую на экран текстовую строку. Программа должна состоять:

Ø Из сегмента команд

Ø Из сегмента команд и данных

Ø Из сегмента команд, данных и стека

В каждом случае определить размер и положение программы в памяти. Получить листинги трансляции.

Пример выполнения работы:

Программа из одного сегмента - сегмента команд:

Объявляем начало сегмента команд:

text segment 'code'

В данном случае сегмент данных помещен внутрь сегмента команд, так отсутствует объявление его отдельным сегментом.

Сегментные регистры CS и DS будут указывать на один и тот же сегмент – text:

assume cs:text, DS:text

Загружаем адрес сегмента команд в сегментный регистр DS через аккумулятор AX, так как операция передачи адреса напрямую в DS невозможна.

begin: mov AX,text

mov DS,AX

Загружаем в старший разряд регистра аккумулятора номер функции для вывода строки на экран из ряда служебных программ MS DOS.

mov AH,09h

Помещаем в регистр данных адрес выводимого сообщения.

mov DX,offset message

Вызов прерывания DOS. После вызова прерывания операционная система проверяет содержимое старшего разряда аккумулятора. Так как в нашем случае там находится номер функции вывода на экран, операционная система проверит содержимое регистра данных и выполнит вывод на экран текста, находящегося в памяти по указанному в регистре адресу.

int 21h

Загружаем в старший разряд аккумулятора номер функции для завершения программы, а в младший разряд – код успешного завершения программы.

mov AH,4Ch

mov AL,00h

Вызов прерывания DOS, которое завершит программу.

int 21h

Объявление данных, то есть выводимой строки. 0Dh – команда возврата курсора в начало строки, 0Ah – команда переноса курсора на следующую строку, символ $ означает конец строки.

message db "string", 0Dh, 0Ah,'$'

Конец сегмента команд.

text ends

Директива END завершает программу, одновременно указывая, с какой метки должно начинаться ее выполнение.

end begin

 

Для следующих примеров комментироваться будут только еще не встречавшиеся части.

Поделиться:





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



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