[060][汇编语言]实验12 编写0号中断的处理程序

实验12 编写0号中断的处理程序

  • 编写0号中断的处理程序,使得在除法溢出发生时,在屏幕中间显示字符串"divide error!",然后返回到DOS。

实际运行结果

  • 屏幕中间 白底蓝字 处显示了字符串"divide error!"
    实验12 除法溢出 divide error!.png

代码实现

  • 代码编写以及测试参考
    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

你可能感兴趣的:([060][汇编语言]实验12 编写0号中断的处理程序)