编写0号中断的处理程序,使得除法溢出时在屏幕中间显示"divide error!"并返回DOS
代码如下:
溢出测试:
assume cs:codesg
codesg segment
start:
mov ax,1000h
mov bh,1
div bh
mov ax,4c00h
int 21h
codesg ends
end start
中断处理程序:
assume cs:codesg
codesg segment
start: ;do0安装程序
mov ax,cs
mov ds,ax
mov si,offset do0 ;ds:si->do0
xor ax,ax
mov es,ax
mov di,200h ;es:di->0000:0200
cld
mov cx,(offset d0e-offset do0)
rep movsb ;完成do0迁移
mov word ptr es:[0],200h
mov word ptr es:[2],0
;设置中断向量0,完成do0安装
mov ax,4c00h
int 21h
do0: ;0号中断处理程序do0
jmp d0s
s: db "divide error!"
d0s:mov ax,cs
mov ds,ax
mov si,202h ;ds:si->str
mov ax,0b800h
mov es,ax
mov di,12*80*2+34*2 ;es:di屏幕中间位置
mov cx,(offset d0s-offset s)
mov ax,0700h ;(ah)=文字属性
l: mov al,ds:[si]
mov es:[di],ax
inc si
add di,2
loop l
mov ax,4c00h
int 21h
d0e:nop
codesg ends
end start