Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Assembler / P16

.pdf
Скачиваний:
61
Добавлен:
02.06.2015
Размер:
387.42 Кб
Скачать

11

; обработчик прерывания при ошибке деления divide_overflow PROC

sti

; Разрешить внешние прерывания

mov idiv_err,1 ; Установить индикатор ошибки

mov bp,sp

; В BP - адрес IP, сохраненного в стеке,

; это адрес команды idiv bx (код F7 FB занимает два байта) add word ptr [bp], 2 ; теперь IP показывает на следующую команду

iret divide_overflow ENDP

start: mov ax,@data mov ds,ax

;Получить вектор прерывания для ошибки при делении (тип 0) mov al,0

DOS 35h

mov ip_old,bx ; Сохранение mov cs_old,es ; вектора

;Установить новый вектор прерывания

mov bx,ds ; сохранить DS mov al,0

mov dx, SEG divide_overflow mov ds,dx

mov dx, OFFSET divide_overflow DOS 25h

mov ds,bx; Восстановить DS ; Первый набор

eval x1,y1,z1,v1,err1

; Второй набор

eval x2,y2,z2,v2,err2

; Третий набор

eval x3,y3,z3,v3,err3

; Четвѐртый набор

eval x4,y4,z4,v4,err4

; Восстановить вектор прерывания mov al,0

mov dx,ip_old mov ds,cs_old DOS 25h

;

exit

END start

Возникает вопрос, как в TD отлаживать процедуру обработки прерывания по ошибке деления? Если выполнять программу пошагово (нажимая F7), то в эту процедуру мы не попадем. В процедуре надо сделать точку останова (Breakpoint). Поставьте курсор на команду sti и нажмите клавишу F2. Строка будет выделена красным цветом. (Повторное нажатие на F2 отменит точку останова.) Запустите программу на выполнение (F9). Произойдет останов на команде sti. Далее можно изучать работу программы с помощью пошагового

12

выполнения. (Впрочем, можно было обойтись и "старыми запасами": поставить курсор на sti и нажать F4.)

Макросредства языка Си. …….

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