Задание. Написать программу, демонстрирующую прерывания деления на 0 и переполнения.

DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
int00_vect DD ?
Msg DB ‘Произошло прерывание int 00h$’
Msg1 DB ‘ = переполнение =$’
Msg2 DB ‘ = деление на ноль =$’
.CODE

new00h proc ; новая процедура для обработки прерывания
mov ah,9
mov dx,OFFSET Msg
int 21h ; вывести сообщение

cmp bl,0
je label1 ; перейти если было деление на ноль

mov ah,9 ; в противном случае - переполнение
mov dx,OFFSET Msg1
int 21h ; вывести сообщение
jmp label2
label1:
mov ah,9
mov dx,OFFSET Msg2
int 21h ; вывести сообщение
label2:
jmp cs:[int00_vect] ; выполнить прежний обработчик int 00h
ret
new00h endp

main: mov ax,@DATA ;
mov ds,ax ; установить адрес сегмента данных

push es ; сохранить es в стеке
mov ax,3500h ; получить вектор прерывания int 00h
int 21h ;
mov word ptr int00_vect,bx ; сохранить смешение вектора
mov word ptr int00_vect+2,es ; сохранить сегмент вектора
pop es ; восстановить es

mov ax,2500h ; установить новый обработчик
; прерывания int 00h на процедуру new00h
mov dx,offset new00h ; в dx смещение процедуры
push ds ;
push cs ;
pop ds ; в ds сегмент процедуры
int 21h ;
pop ds ;

mov ax,3
mov bl,0 ; проверяем
div bl ;

; ———————————
mov dx,word ptr int00_vect ;
mov ds,word ptr int00_vect+2 ;
mov ax,2500h ; установить прежний обработчик
int 21h ; прерывания int 00h

mov ah,4Ch
int 21h
END main

Очень классные детские коляски в широком ассортименте на любой вкус.