[060][匯編語言]實驗12 編寫0號中斷的處理程序

實驗12 編寫0號中斷的處理程序

  • 編寫0號中斷的處理程序,使得在除法溢出發(fā)生時,在屏幕中間顯示字符串"divide error!",然后返回到DOS。

實際運行結(jié)果

  • 屏幕中間 白底藍字 處顯示了字符串"divide error!"
    實驗12 除法溢出 divide error!.png

代碼實現(xiàn)

【參考代碼】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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容