Изучение принципов работы с прерываниями в DOS

Страницы работы

6 страниц (Word-файл)

Содержание работы

Санкт–Петербургский Государственный Политехнический Университет

Факультет Технической Кибернетики

Кафедра Автоматики и Вычислительной Техники

ОТЧЕТ

О лабораторной работе

Дисциплина: СПО

Тема: Изучение принципов работы с прерываниями в 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                 

Похожие материалы

Информация о работе