实验12
要求
编写0号中断处理程序,使得在除法溢出发生时,在屏幕中间显示字符串“divide error!”,然后返回到DOS
思路:
- 先选一块儿其他程序不会用到的内存区,用它来存放以后的中断处理程序do0
- 通过使用rep movsb 以及“-”运算实现将do0代码段复制到上述内存区
- 设置中断向量表,将存放代码的偏移地址和段地址依次存放在0**4和0*4+2中
代码:
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 es,ax
mov word ptr es:[0*4],200h
mov word ptr es:[0*4+2],0
int 0h *这里通过int指令来调用编写好的0号中断,后面13章会学到*
mov ax,4c00h
int 21h
do0: jmp short do0start
db"divide error"
do0start: mov ax,cs
mov ds,ax
mov si,202h
mov ax,0b800h
mov es,ax
mov di,12*160+68
mov dh,02h
mov cx,12
s: mov al,[si]
mov es:[di],al
mov es:[di+1],dh
inc si
add di,2
loop s
mov ax,4c00h
int 21h
do0end: nop
code ends
end start