Общая схема разработки программы на ассемблере
⇐ ПредыдущаяСтр 3 из 3 Общая схема разработки программы на ассемблере включает четыре этапа: Ø ввод исходного текста (кода) программы; Ø создание объектного модуля (компиляция программы); Ø создание загрузочного модуля (компоновка программы); Ø отладка программы. Для ввода кода программы может использоваться любой текстовый редактор. Основным требованием к нему является ввод текста без спецсимволов редактирования. Файл кода должен обязательно иметь расширение 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|