编写0号中断的处理程序
一、实验要求
编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“overflow”,然后返回到DOS。
二、设计思路:
1、编写0号中断的处理程序,该程序显示字符串,然后返回到DOS
2、编写安装程序,将步骤1中处理程序复制到0000:0200开始的内存中
3、修改中断向量表,使0号中断的处理程序地址指向0000:0200
三、详细设计
assume cs:codesg
codesg segment
start:
;将do0子程序放入到0000:0200开始的内存空间中
mov ax,0
mov es,ax
mov di,0200h ;es:[di]指向目标地址0000:0200
mov ax,cs
mov ds,ax
mov si,offset do0 ;ds:[si]指向do0程序的首地址
mov cx,offset do0end-offset do0 ;计算传输的长度
cld ;设置传输方向为正
rep movsb
;设置中断向量表,将0号(除法溢出)中断的处理程序地址改为0000:0200
mov ax,0
mov ds,ax
mov bx,0
mov word ptr ds:[bx],0200h
mov word ptr ds:[bx+2],0000h
;安装程序返回
mov ax,4c00h
int 21h
do0:
;存放要显示的数据
jmp short do0start
db "overflow"
do0start:
;显示字符串"overflow"
mov ax,0b800h
mov ds,ax
mov bx,12*80*2+30*2 ;ds:bx指向屏幕中央
mov ax,cs
mov es,ax
mov si,0202h ;es:si指向要显示的字符串
mov cx,8
s:
mov al,es:[si]
mov ds:[bx],al
inc bx
mov byte ptr ds:[bx],02h
inc bx
inc si
loop s
;返回dos
mov ax,4c00h
int 21h
do0end:
nop
codesg ends
end start
四、程序测试