實驗12 編寫0號中斷的處理程序
- 編寫0號中斷的處理程序,使得在除法溢出發(fā)生時,在屏幕中間顯示字符串"divide error!",然后返回到DOS。
實際運行結(jié)果
- 屏幕中間 白底藍字 處顯示了字符串"divide error!"
實驗12 除法溢出 divide error!.png
代碼實現(xiàn)
- 代碼編寫以及測試參考
http://www.itdecent.cn/p/8c3e4d42c441 - 基于上方鏈接給出的代碼,按照本題題干,僅做以下三處修改
【參考代碼】do0 標(biāo)號之后的代碼
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
