gn="justify"> out FRQ_PORT, ax
push si
mov ah, 0
int 1Ah
pop si
mov bx, dx
push ax
add si, 2
add di, 2
mov ax, cs: word ptr Music [si]
add bx, ax
pop ax:
push si
mov ah, 0
int 1Ah
pop si
cmp dx, bx
jle Loop1
add si, 2
add di, 2
cmp di, NUM + NUM
jnz LoopM
cmp [count], PLRE
jb R_Play
; Вимкнемо
in al, PPI_PORT
and al, OFF
out PPI_PORT, al
retENDP
inmem PROC; Відновлення старого обробника переривання
push ds
mov ax, 251Ch
mov dx, cs: word ptr oldintseg
mov ds, dx
mov dx, cs: word ptr oldintoff
int 21h
mov ax, 2507h
mov dx, cs: word ptr oldintseg7
mov ds, dx
mov dx, cs: word ptr oldintoff7
int 21h
pop ds
retENDP
release PROC; Видалення з пам'яті
mov ah, 49h
mov cx, cs
mov es, cx
int 21h
retENDPCh:; обробник переривання
pushf
call cs: dword ptr oldintoff
pusha
push ds
push es
mov ah, 2
push cs
pop ds
int 1Ah; Отримання системного часу
lea di, time; Зсув масиву з часом в di
mov [di], ch; Годинники
add di, 2
mov [di], cl; Хвилини
add di, 2
mov [di], dh; Секунди
mov cx, 3
push ds
pop es
lea di, time
lea si, atime
repe cmpsw; Порівняння за словами часу системи і будильника
jne ext
mov al, 20h; Повідомлення контролеру переривань
out 20h, al; про завершення переривання