Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум по ВМСиС.doc
Скачиваний:
25
Добавлен:
05.06.2015
Размер:
2.31 Mб
Скачать

Программные прерывания

Программные прерывания – это сервисные процедуры операционной системы и базовой системы ввода-вывода (BIOS), которые загружены в оперативную память компьютера и вызываются командойint<номер>. В реальном режиме допускаются номера прерываний от 0 до 255. Такого количества прерываний недостаточно для всех требуемых сервисов, поэтому в каждом прерывании есть функции, которые задаются регистромAH, и даже подфункции, задаваемые регистромAL.

Некоторым сервисам кроме регистра AHтребуются исходные данные для выполнения. Например, установка позиции курсора требует ввода его координат, а вывод символа – код символа и атрибуты цвета символа и фона. Эти параметры называютсявходными. У некоторых сервисов есть ивыходныепараметры, например, функция определения текущих координат курсора использует регистрDXдля внесения в него строки и колонки курсора.

Описание большинства прерываний (сервисов) можно найти в электронном справочнике help.exe:M:\САУИК\BMCC\HELP.RUS\help.exe(рис. 6.1).

Рис. 6.1. Внешний вид программы help.exe

Чтобы найти описание какой-либо функции, сначала нужно определить какой тип у этой функции, а затем найти в соответствующем разделе подробное описание. Например, чтобы найти описание функции 3 прерывания 10h, определяем, что это функцияBIOS, и переходим к описанию по такому пути вложенных меню: "Указатель функций DOS/BIOS""Прерывания и сервисROM-BIOS""INT10H""Детали видео сервиса".

Чтобы найти описание функции 4Chпрерывания 21h, определяем, что это функцияDOS, переходим к описанию по другому пути вложенных меню: "Указатель функций DOS/BIOS""ФункцииDOS""4cH".

Для возвращения в предыдущий пункт меню используйте клавишу "Esc".

Рис. 6.2. Внешний вид описания прерывания int10h(функция 03h) в программеhelp.exe

Отладка программ

Отладка программ осуществляется с помощью программы-отладчика TurboDebuggertd.exe. Строка запуска:td.exe<исполняемый модуль>.

После запуска программы-отладчика в основном окне (слева вверху) будет находиться программный код, внизу – дамп сегмента, то есть символы и их коды, следующие подряд, начиная с определённого места сегмента. Правее находятся регистры общего назначения (РОН), а ещё правее – основные флаги процессора. Снизу справа – стек (см рис. 6.3).

Рис. 6.3. Внешний вид программы td.exe.

Пошаговое исполнение программы запускается клавишей F8. Каждый следующий шаг программы запускается нажатием клавишиF8 ещё раз до тех пор, покаTurboDebuggerне выдаст сообщение:Terminated,exitcode0, что означает – программа завершена с кодом завершения 0. Следующее нажатие клавишиF8 приведёт к тому, чтоTurboDebuggerспросит: "Programalreadyterminated,Reload?" (Программа уже завершена, перезагрузить?) Если в программе есть процедуры, то зайти вовнутрь каждой из них можно по клавишеF7. Просмотр экрана пользователя на любом этапе можно осуществлять с помощью сочетания клавиш:Alt-F5.

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

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

Рис. 6.4. Сегмент кода.

При запуске TurboDebuggerв дампе сегмента данных отображается состояние сегмента для регистра данных (ds)TurboDebugger, а не загруженной программы. Чтобы перегрузить регистр данных и посмотреть состояние сегмента данных программы, достаточно выполнить хотя бы одну команду программы (например, клавишейF8).

Затем, чтобы увидеть дамп сегмента данных, нужно вызвать из меню программы "View" команду "Dump" (рис. 6.5).

Рис. 6.5. Внешний вид дампа сегмента данных

Дальний адрес – это полный адрес ячейки, который включает в себя адрес сегмента DS(его значение можно найти в окне РОН) и смещение внутри сегмента для этой ячейки. Колонка дальних адресов соответствует адресам первых элементов текущей строки. Например, символу "З" (код 87) на рисунке 6.5 соответствует дальний адресDS:0000, т.е. смещение в сегментеDSравно 0. Для следующего символа "а" (кодA0) соответствует адресDS:0001. Символу "п" (кодAF) – адресDS:0002. На следующей строке символ "е" (кодA5) имеет адресDS:0008.