
СП - ASM / Лабораторная работа №1 Borland ассемблер
.docЛАБОРАТОРНАЯ РАБОТА №1
ИЗУЧЕНИЕ СРЕДСТВ РАЗРАБОТКИ И ОТЛАДКИ СИСТЕМНЫХ ПРОГРАММ ДЛЯ ПЛАТФОРМЫ MS-DOS
Цель работы: освоить процесс подготовки программы к выполнению, среды разработки приложений Borland C++ 3.X и процесс отладки программ с использованием интерактивного отладчика Turbo Debugger (TD); изучить структуру com- и exe-программ для MS-DOS.
Порядок выполнения работы
При домашней подготовке самостоятельно на основе материалов лекций, справочной системы соответствующих средств разработки и отладки, а также рекомендуемой литературы изучить:
-
особенности архитектуры программ для MS-DOS;
-
технологию создания com- и exe-программ для MS-DOS с использованием пакета Turbo Assembler (TASM), смысл и назначение её этапов;
-
возможности среды разработки приложений Borland C++ 3.X и технологию создания com- и exe-программ для MS-DOS с её использованием, смысл и назначение отдельных этапов процесса подготовки программы;
-
возможности интерактивного отладчика Turbo Debugger (TD) и технологию отладки программ с его использованием.
I Подготовка программ к выполнению с использованием пакета TASM
-
Установить пакет TASM в каталог С:\tools\TASM.
-
При помощи текстового редактора (который не добавляет в выходной файл служебную информацию!) подготовить исходный текст com- (рис. 1.1) и exe- (рис. 1.2) программ.
; Пример простейшей сом-программы ; .model tiny .code org 100h start: mov ah,9 mov dx, offset msg_txt int 21h ret msg_txt db "Пример простейшей сом-программы", 0Dh,0Ah,'$' end start
Рисунок 1.1 – Пример простейшей сом-программы
|
; Пример простейшей exe-программы .model small ;-------------------------------------------- stacksg segment para stack 'stack' dw 10 dup('s','t','a','c','k') stacksg ends ;-------------------------------------------- datasg segment para 'data' msg_txt db "Пример простейшей exe-программы", 0Dh,0Ah,'$' datasg ends ;-------------------------------------------- codesg segment para 'code' assume cs:codesg,ds:datasg,ss:stacksg,es:nothing begin proc far mov ax,datasg mov ds,ax mov dx, offset msg_txt mov ah,9 int 21h mov ah,4Ch mov al,00h int 21h
begin endp codesg ends end begin ;--------------------------------------------
Рисунок 1.2 – Пример простейшей ехе-программы
|
-
Проанализировать различия в исходных текстах com- и exe-программ.
-
Получить исполняемый код программ путем ассемблирования и последующей компоновки. При этом, для создания сом-программы средствами TASM следует использовать команды:
<диск>:\<путь>\tasm /z /zi /n <имя файла>.asm
<диск>:\<путь>\tlink /t /x <имя файла>.obj, <имя файла>.com
а для создания ехе-программы средствами TASM следует использовать команды:
<диск>:\<путь>\tasm /z /zi /n <имя файла>.asm
<диск>:\<путь>\tlink /v /x <имя файла>.obj
Для „автоматизации” процесса ассемблирования и компоновки рекомендуется исходные тексты файлов оформлять в виде пакетных командных файлов (bat-файлов), например:
;@echo off
;goto assemble
; Пример простейшей сом-программы
.model tiny
.code
org 100h
start: mov ah,9
mov dx, offset msg_txt
int 21h
ret
msg_txt db "Пример простейшей сом-программы", 0Dh,0Ah,'$'
end start
:assemble
<диск>:\<путь>\tasm /z /zi /n <имя файла>.asm
<диск>:\<путь>\tlink /t /x <имя файла>.obj, <имя файла>.com
del <имя файла>.obj
echo.
pause
-
Сравнить размеры исполняемых файлов com- и exe-программ. Объяснить различия.
-
При помощи отладчика TD запустить полученные программы на выполнение (в режиме выполнения до позиции курсора, автоматическом и пошаговом режимах) и проверить их работоспособность.
-
Пронаблюдать изменения состояния регистров процессора в ходе выполнения программ. Проанализировать различия в ходе выполнения com- и exe-программ.
-
Получить дампы памяти обоих программ. Определить в них положение сегментов кода, данных и стека, а также префикса программного сегмента (PSP) и блока окружения. Проанализировать порядок размещения сегментов и их границы.
-
Получить дампы префикса программного сегмента (PSP) и блока окружения. Проанализировать их содержимое.
-
В пошаговом режиме средствами отладки определить адреса и значения переменных, объявленных в программах; убедится в корректности присваиваемых им значений.
-
Средствами отладчика TD во время пошагового выполнения программы изменить выводимый на экран текст сообщения.
II Подготовка программ к выполнению с использованием среды Borland C++ 3.X
-
Установить среду разработки в каталог С:\tools\BС3x.
-
Настроить параметры среды: каталоги исходных файлов, выходных файлов, библиотек, модель памяти и т.д.
-
Подготовить исходный текст программы:
#include <dos.h>
void main(void) {
char *msg_txt="Sample of CPP program$";
_DX=FP_OFF(msg_txt);
_AH=9;
geninterrupt(0x21);
}
-
Получить исполняемый код сом- и ехе-программ. Исполняемый код сом-программы получить с использованием утилиты exe2bin.
-
Сравнить размеры исполняемых файлов com- и exe-программ. Объяснить различия. Сравнить размеры исполняемых файлов программ, подготовленных с использованием TASM и Borland C++, сделать выводы.
-
При помощи отладчика TD запустить полученные программы на выполнение (в режиме выполнения до позиции курсора, автоматическом и пошаговом режимах) и проверить их работоспособность.
-
Пронаблюдать изменения состояния регистров процессора в ходе выполнения программ. Проанализировать различия в ходе выполнения com- и exe-программ а также различия исполняемого кода для программ, подготовленных с использованием TASM и Borland C++, сделать выводы.
-
Получить дампы памяти обоих программ. Определить в них положение сегментов кода, данных и стека, а также префикса программного сегмента (PSP) и блока окружения. Проанализировать порядок размещения сегментов и их границы. Сравнить результаты с полученными ранее для программ, подготовленных с использованием TASM.
-
Получить дампы префикса программного сегмента (PSP) и блока окружения. Проанализировать их содержимое. Сравнить результаты с полученными ранее для программ, подготовленных с использованием TASM.
-
В пошаговом режиме средствами отладки определить адреса и значения переменных, объявленных в программах; убедится в корректности присваиваемых им значений. Сравнить результаты с полученными ранее для программ, подготовленных с использованием TASM.
-
Проанализировать содержимое стека при выполнении программы.
-
Средствами отладчика TD во время пошагового выполнения программы изменить выводимый на экран текст сообщения.
Содержание отчета
-
Титульный лист.
-
Текст сом- и ехе-программ, подготовленных с использованием TASM и Borland C++.
-
Дампы памяти сом- и ехе-программ и результаты отладки программы в пошаговом режиме (адреса переменных) для программ подготовленных с использованием TASM и Borland C++.
-
Структуру размещения программы в памяти (для программ подготовленных с использованием TASM и Borland C++).
-
Содержимое регистров процессора перед началом выполнения сом- и ехе-программы. Адрес точки входа в программу.
-
Дампы префикса программного сегмента (PSP) и блока окружения с анализом их содержимого.
-
Выводы (преимущества и недостатки использования сом- и ехе-программ, языков программирования низкого/высокого уровня для их написания, области эффективного применения и т.п.).
Контрольные вопросы
-
Чем отличаются программы сом и ехе?
-
Процесс создания исполняемого (exe) файла с применением TASM.
-
Процесс создания исполняемого (exe) файла с применением Borland C++.
-
Процесс создания исполняемого (com) файла с применением TASM.
-
Процесс создания исполняемого (com) файла с применением Borland C++.
-
В каком диапазоне могут находится адреса переменных при выполнении программы под управлением MS-DOS?
-
В каком порядке размещаются сегменты программы? Каким образом можно изменить их порядок?
-
Чем ограничены размеры сегментов программы? Количество возможных сегментов?
-
и т.д. (все про программную модель МП86, архитектуру программ, основы МС-ДОС)
Литература
-
Абель П. Язык ассемблера для IBM PC и программирования: Пер. с англ. – М.: Высш. шк., 1992. – 447 с.
-
Данкан Р. Профессиональная работа в MS-DOS: Пер. с англ. – М.: Мир, 1993. – 509 с.
-
Зубков С.В. Assembler для DOS, Windows и UNIX. – М.: ДМК Пресс, 2000. – 608 с.