Санкт–Петербургский Государственный Политехнический Университет
Факультет Технической Кибернетики
Кафедра Автоматики и Вычислительной Техники
ОТЧЕТ
О лабораторной работе
Дисциплина: СПО
Тема: Изучение принципов работы с прерываниями в DOS
Выполнил студент группы 4081/1
Журавлев А. В.
Руководитель:
Душутина Е.В.
Санкт-Петербург
2009
1. Цель работы
Целями работы являются приобретение знаний о типах внутренних прерываний и флаговой логики процессора, источников возникновения внутренних прерываний, формирование навыков использования механизма внутренних прерываний при решении практических задач (приемы перехвата прерываний и передачи управления соответствующим системным обработчикам).
2. Анализ обработчика прерывания при делении на ноль
Задание:
Проанализируйте содержимое стандартного обработчика прерывания по ошибке операции деления. Т.е. проверьте, как реагирует операционная система, на переполнение при выполнении команды деления
mov ax, 11
mov bl, 0
div bl
ret
Листинг 2. Текст программы вызова обработчика деления на ноль
Выводы:
Как видно, данная программа пытается разделить число 11, занесенное в регистр ax на 0, занесенный в младший байт регистра bx. Продолжительность выполнения данной операции составляет 2 байта.
В результате выполнения программы на экране монитора возникает предупреждение об ошибке деления на ноль.
3. Замена стандартного обработчика int0 с помощью функций DOS
Задание:
Замените стандартный обработчик int 0 на собственный, используя функции DOS для замены вектора прерывания и функцию 9h прерывания int 021h (функция dos 9) для иллюстрации работы вашего обработчика.
Рис. 3. Алгоритм последовательности действий
print macro
push ax, dx
lea dx, #1
mov ah, 9
int 021
pop dx, ax
#em
jmp start
_error db 'Warning: деление на ноль', 13, 10, '$'
n_vect equ 0
old_v dd ?
ddiv db 200 dup 0
start:
mov ax, 035 by n_vect ;сохранение вектора
int 021 ;es:bx
mov w old_v, bx
mov w old_v + 2, es
mov ax, 025 by n_vect ;установка нового вектора
lea dx, new ;ds:dx
int 021
Листинг 3. Текст программы PR_2.8 (начало)
mov ax, 11 ;деление на 0
mov bl, 0
nop
nop
div ddiv
mov ax, 025 by n_vect ;возврат старого вектора
mov dx, w old_v ;ds:dx
mov ds, w old_v+2
int 021
mov ds, cs ;возврат ds
int 020 ;выход
new: ;обработка прерывания
print _error
pop ax
add ax , 4
push ax
iret
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.