实验12 编写0号中断的处理程序
- 编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串"divide error!",然后返回到DOS。
实际运行结果
- 屏幕中间 白底蓝字 处显示了字符串"divide error!"
代码实现
- 代码编写以及测试参考
https://www.jianshu.com/p/8c3e4d42c441 - 基于上方链接给出的代码,按照本题题干,仅做以下三处修改
【参考代码】do0 标号之后的代码
do0: jmp short do0Start
db 'overflow!'【即将修改1】
do0Start: mov ax,cs
mov ds,ax
mov si,202H
mov ax,0B800H
mov es,ax
mov di,12*160+36*2
mov ah,02H 【即将修改2】
mov cx,9 【即将修改3】
s: mov al,[si]
mov es:[di],al
mov es:[di+1],ah
inc si
add di,2
loop s
mov ax,4c00H
int 21H
do0end: nop
【修改后的代码】
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+36*2
mov ah,71H 【修改成 白底蓝字 了】
mov cx,13 【修改成题目要求的字符串的长度 了】
s: mov al,[si]
mov es:[di],al
mov es:[di+1],ah
inc si
add di,2
loop s
mov ax,4c00H
int 21H
do0end: nop
【其余代码 完全不变】
完整源码 : ex12.asm
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
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+36*2
mov ah,71H
mov cx,13
s: mov al,[si]
mov es:[di],al
mov es:[di+1],ah
inc si
add di,2
loop s
mov ax,4c00H
int 21H
do0end: nop
code ends
end start
测试源码 : testex12.asm
assume cs:code
code segment
start: mov ax,0FFFFH
mov bh,1
div bh
mov ax,4c00H
int 21H
code ends
end start