学習ノートのアセンブリ--内部中断
1559 ワード
プログラミングタスク:
0番割り込みハンドラを作成し、除算オーバーフローが発生したときに画面の真ん中に文字列「devide error!」が表示され、DOSに戻ります.
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