编写0号中断的处理程序:处理除法溢出
October 17, 2013
masm
在除法溢出的时候,在屏幕中间显示字符串“divide error!”
安装程序:
assume cs:code
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset do0
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset do0end - offset do0
cld
rep movsb
mov ax, 0
mov ds, ax
mov word ptr ds:[0*4], 200h
mov word ptr ds:[0*4 + 2], 0
do0:
jmp do0start
db "divide error!"
do0start:
mov ax, cs
mov ds, ax
mov si, 202h
mov ax, 0b800h
mov es, ax
mov di, 12*160+36*2
mov cx, 13
s:
mov al, [si]
mov es:[di], al
mov byte ptr es:[di+1], 01001001b
inc si
add di, 2
loop s
mov ax, 4c00h
int 21h
do0end:
nop
mov ax, 4c00h
int 21h
code ends
end start
测试程序:
assume cs:code
code segment
start:
mov dx, 0
div dx
mov ax, 4c00h
int 21h
code ends
end start
debug执行这个程序,会发现执行到div dx的时候,屏幕中间会出现红底蓝字的divide error!
基本是照着书上的思路写的
注意,这里有一个要注意的问题,尤其是要显示颜色的时候,在37行,如果不加byte ptr,那么会默认当做字传送,最终会多出一个小方格,也就是乱码,这个问题以前也遇到过,刚才忘了,幸好很快就想到了。这里记录一下。