编写0号中断的处理程序
使得在除法溢出的时候,在屏幕上显示divide error!,然后返回dos界面
代码如下:
assume cs:code
code segment
start:
mov ax,0
mov ds,ax
call error
mov ax,1000h
mov bl,1
div bl
mov ax,4c00h
int 21h
;###################################################
;子程序error:用来处理除法错误
error:
push ax
push cx
push ds
push es
push si
push di
mov ax,0
mov es,ax
mov di,200h
mov ax,cs
mov ds,ax
mov si,offset do0
mov cx,offset do0_end - offset do0
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[0],200h
mov word ptr es:[2],0
jmp near ptr do0_end
;***************************************************
;显示在dos界面上
do0:
jmp short do0_start
db 'divide error!!'
do0_start:
mov ax,cs
mov ds,ax
mov si,202h
mov ax,0b800h
mov es,ax
mov di,10*160+20*2
mov cx,14
s:
mov al,[si]
mov es:[di],al
mov byte ptr es:[di+1],2
inc si
add di,2
loop s
mov ax,4c00h
int 21h
;***************************************************
do0_end:
pop di
pop si
pop es
pop ds
pop cx
pop ax
ret
code ends
end start
运行截图:
![](https://i-blog.csdnimg.cn/blog_migrate/fa958c5eefa20f539cd07a0abae3ab47.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0c2220cb269566b65bab6883402d946e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7f1394e706ffd4dbaf8f0103baf3ad13.png)
查看0000:0000 和0000:0200位置存的信息
![](https://i-blog.csdnimg.cn/blog_migrate/1f777f47fe2b64b62fea53c5737de59f.png)
查看修改后的 0000:0000 和0000:0200位置存的信息
![](https://i-blog.csdnimg.cn/blog_migrate/df8df7256534fec920a80157fb41dea1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/02954f599bf2575eb73b59635090ba42.png)
g到mov ax,4c00h 查看结果
![](https://i-blog.csdnimg.cn/blog_migrate/1ef92f5a36d5cf3c22352a9f08ac7dfc.png)
或者直接运行exe查看结果
![](https://i-blog.csdnimg.cn/blog_migrate/ee60a99468fe906dce8599d3f371889e.png)
再重新写一个除法溢出代码error 运行查看结果
![](https://i-blog.csdnimg.cn/blog_migrate/d3c67a5283e72a47c0e6687e3b09c590.png)