编写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

四、程序测试

2523963_1268296662Lp2G

posted @ 2010-03-11 16:29  石莹  阅读(2077)  评论(0编辑  收藏  举报