Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / GL13.doc
Скачиваний:
21
Добавлен:
20.05.2014
Размер:
209.92 Кб
Скачать

Выполнение задания на машине.

1) Ввод текстов программ. Можно воспользоваться файлами с излагаемым примером, как шаблоном. Будут приниматься только распечатки, а не тексты, написанные от руки. Комментарии к программе можно делать рукописными.

2) Трансляция, компоновка, выполнение. Можно просто вручную набрать команды:

c:\tasm\bin\tasm /zi/m/la main5v0

c:\tasm\bin\tasm/zi/m/la sub5v0

c:\tasm\bin\tlink/v/m main5v0 sub5v0, a5v0

c:\tasm\bin\td a5v0.exe

но эти команды наверняка придется набирать многократно, т.к. вряд ли у вас все получится с первого раза. Имеет смысл эти команды записать в командный файл. Но этот путь неэффективен вот по какой причине: предположим, мы уже отладили главную программу (она проще), зачем же каждый раз ее транслировать, хотя она не претерпевает изменений. А если при трансляции возникнет ошибка, то компоновку выполнять не нужно (вообще-то этой ситуации можно избежать, если в командный файл вставить проверку уровня ошибки ERRORLEVEL). Но лучшим решением является использование утилиты MAKE.

Для того чтобы воспользоваться этой утилитой, представим наглядно в виде дерева (рис.6.4) зависимость итогового файла a5v0.exe от исходных файлов:

a5v0.exe

main5v0.obj

sub5v0.obj

main5v0.asm

macr5v0.inc

sub5v0.asm

Рис.6.4.

А теперь запишем это дерево в make-файле. Make-файл имеет следующую структуру:

цель: условие

команда

команда

Эти строки могут повторяться многократно.

Цели и условия — списки имен файлов, разделенные пробелами. Команда — это любая команда DOS. Цель обязательно начинается с первой позиции, а команда — с отступом хотя бы на одну позицию.

файл a5v0.mak

a5v0.exe: main5v0.obj sub5v0.obj

c:\tasm\bin\tlink /v/m main5v0 sub5v0, a5v0

c:\tasm\bin\td a5v0

main5v0.obj: main5v0.asm macr5v0.inc

c:\tasm\bin\tasm /zi/m/la main5v0

sub5v0.obj: sub5v0.asm

c:\tasm\bin\tasm /zi/m/la sub5v0

Строки, которые начинаются с первой позиции, соответствуют неконцевым вершинам дерева. После двоеточия перечисляются вершины-потомки (хотя в нашем случае их хотелось бы назвать "предками"). Строки с отступом не менее единицы содержат команды, которые надо выполнить, чтобы получить целевой файл (тот, что перед двоеточием).

Перед ключами (опциями) команд надо обязательно вставлять пробел.

Запуск файла на выполнение осуществляется по команде

c:\tasm\bin\make –fa5v0.mak (после ключа -f указывается имя make-файла)

Make обрабатывает файл так. Поочередно просматриваются все зависимости. Для каждой зависимости сравниваются даты последнего изменения целей и условий. Если дата/время последнего изменения одного из файлов-условий больше, чем у любой из целей, или если файл-цель отсутствует, make вызывает все команды, указанные в зависимости.

Возможности этой утилиты намного больше, чем здесь показано.

Рекомендуется make запускать так:

c:\tasm\bin\make –fa5v0.mak > a5v0.txt

Тогда вы прочтете отчет о работе make и сообщения запускаемых программ в файле a5v0.txt.

В результате выполнения make-файла на диске помимо исходных файлов (main5v0.asm, sub5v0.asm, macr5v0.asm, macro.inc) появляются файлы:

  • main5v0.obj, sub5v0.obj;

  • main5v0.lst, sub5v0.lst;

  • a5v0.exe;

  • a5v0.map.

3) Подготовка отчета.

После запуска Turbo Debugger перед вами два окна Module (1) и Watch (2). Они нам не понадобятся, но закрывать их не будем (хотя, если возникают проблемы с памятью, лишние окна рекомендуется закрывать). Перечислим действия пользователя в отладчике в предположении, что программа работает правильно.

1) Запишем адрес процедуры treat_array в окно протокола. Сейчас активно первое окно (текст главной программы). Выведем текст модуля с подпрограммами. Для этого нажмем F3 (Module) и возникшем меню выберем имя файла с подпрограммами. Подведем курсор в строку treat_array PROC и нажимаем Ctrl+I (Alt+F10/Inspect). Появляется окно, в котором читаем адрес процедуры. Копируем содержимое окна в окно протокола.Alt+W,D (F10/Window/Dump Pane to Log). Замечание: если вы используете более позднюю версию TD, то F10/Edit/Dump Pane to Log.

2) Создадим окно CPU. Alt+V,C,F5,Ctrl+M,Ctrl+M (эквивалент при использовании меню: F10/View/CPU, F10/Window/Zoom, Alt+F10/Mixed/Both).

3) Выполним команды загрузки DS(mov ax,@data / mov ds,ax): F7,F7.

4) В панели данных покажем массив arrb.Shift+Tab, Ctrl+G (Alt+F10/Goto). Набираем имя arrb. В панели данных отображается

ds:0000 D5 F5 D5 00 F5 00 …

5) Скопируем содержимое панели в окно протокола.Alt+W,D (F10/ Window/ Dump Pane to Log).

6) В окне данных покажем массив arrw.Alt+V,D (F10/View/Dump). Получаем 4-ое окно.Ctrl+G (Alt+F10/Goto..). Набираем имя arrw. Отобразим как слова.Ctrl+D,W (Alt+F10/Display as…/Word) . В окне данных отображается

ds:0002 00D5 00F5 …

Скопируем в окно протокола Alt+W,D.

7) Войдем в процедуру treat_elem и скопируем стек. Перейдем в окно CPU (Alt+3, т.е. в окно 3; либо можно нажимать F6 пока не окажетесь в нужном окне). Перейдем в панель кода: Tab. Многократным нажатием на F7 попадаем в процедуру treat_elem (в ней выполним командыpush ax,push bx). Переходим в панель стека: Tab,Tab,Tab. Скопируем в окно протокола: Alt+W,D. Вернемся в панель кода (необязательно): Tab,Tab.

8) Выполним программу и скопируем результат в окно протокола. Выполнить до конца: F9 (F10/Run/Run). Получим окно с сообщением: Terminated, exit code 0. Нажимаем Enter. Переходим в панель данных: Shift+Tab. Скопируем в окно протокола: Alt+W,D. Перейдем в 4-ое окно: Alt+4 (F6,F6,F6). Скопируем в окно протокола: Alt+W,D.

9) Сохраним протокол в файле. Перейдем в окно протокола: Alt+V,L (F10/View/Log). Распахнем окно: F5 (F10/Window/Zoom). Откроем файл протокола: Ctrl+O (Alt+F10/Open log file …). Запрашивается имя файла (по умолчанию предлагается a5v0.log) — подтверждаем. Закрываем файл: Ctrl+C (Alt+F10/Close log file).

10) Завершаем работу в TD.Alt+X (F10/File/Quit).

В текстовом редакторе правим файл a5v0.log, распечатываем его и снабжаем комментариями.

Turbo Debugger Log

Соседние файлы в папке Лекции