CODE SEGMENT
ASSUME DS:CODE,CS:CODE,ES:CODE,SS:CODE
.186
ORG 100h
START:
mov ax,3508h
int 21h ;割り込みベクタ取得
mov VECT8_SEG,es
mov VECT8_OFF,bx ;割り込みベクタ保管
push cs
pop ds ;DS <= CS
mov dx,offset VECT8
mov ax,2508h
int 21h ;割り込みベクタ設定
MAIN:
mov ah,6
mov dl,0ffh
int 21h ;入力
cmp al,0dh
jz QUIT ;リターンキーだったら終了
cmp COUNT,18
jnz MAIN
mov ah,6
mov dl,'*'
int 21h
mov COUNT,0
jmp short MAIN
QUIT:
mov ax,2508h
mov dx,VECT8_OFF
mov ds,VECT8_SEG
int 21h ;割り込みベクタを戻す
mov ax,4c00h
int 21h ;終了
;-------------------------------------
VECT8:
cli ;割り込み禁止
push ax ;レジスタ保管
inc cs:COUNT
mov al,20h
out 20h,al ;割り込みコントローラーに終わりを告げる
pop ax ;
sti ;割り込みを許可する
iret ;終了
VECT8_SEG dw ?
VECT8_OFF dw ?
COUNT db 0
ENDS
END START
; 一部のコンパイラでは、
;CODE ENDS
; END START
;と記述しなければいけないようです
|