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

 

 

四、程序测试

编写0号中断的处理程序_第1张图片

 

你可能感兴趣的:(c,dos,测试,byte)