学習ノートのアセンブリ--内部中断

1559 ワード

プログラミングタスク:
0番割り込みハンドラを作成し、除算オーバーフローが発生したときに画面の真ん中に文字列「devide error!」が表示され、DOSに戻ります.
assume cs:code

code segment
    start:  ;1.      
            mov ax,cs
            mov ds,ax
            mov si,offset interrupt     ;ds:si point to source address
            
            mov ax,0
            mov es,ax
            mov di,200h                 ;es,di  point to destination address   
            
            mov cx,offset interend - offset interrupt   ;set length of interrupt program code
            
            cld
            rep movsb
            
            
            ;2.       
            mov ax,0
            mov ds,ax         ;ds      0000
            mov ax,20dh
            mov [0],ax        ;      20d   ds:0,            
            mov ax,0
            mov [2],ax        ;     0   ds:2,           
            
            ;3.   DOS
            mov ax,4c00h
            int 21h 
            
            ;4.    
interrupt:  db "devide error!"
 show_str:  mov ax,0
            mov ds,ax
            mov bx,200h    ;ds:bx            , :       0000:0200
            
            mov ax,0b800h
            mov es,ax
            mov di,12*160+36*2  ;es:di           :    
            
            mov cx,13
  display:  mov al,[bx]
            mov es:[di],al
            inc bx
            add di,2
            loop display     ;           
            
            mov ax,4c00h
            int 21h         
            
interend:   nop
                                     
code ends
end start