Исходный текст программы


; Резидентная программка-будильничек, в определенные часы выводит

; время и надпись, задаваемые пользователем

;_—-== вывод строки string на экран ==—-

@DisStr MACRO string

mov ah,9h

mov dx,offset &string

int 21h

ENDM

PAGE 60,132

TITLE ALARM — CLOCK

;_____________________________________________________________________________

code segment para public ‘code’

assume cs:code,ds:code

org 100h

start: jmp init

;_____________________________________________________________________________

;_——== новый вектор преырывания 1Ch ==——

int_1Ch:

cli

push AX

push CX

push DX

push ES

push DI

push BX

push SI

;_——== начнем с проверки ==——

call check_time

cmp CX,[CS:tim]

jnz finish

call check_time

cmp AL,5

jg finish

call mes_out

a: call click ;звонок

;сообщение

;_——== А вот и конец обработки ==——

finish:

pop SI

pop BX

pop DI

pop ES

pop DX

pop CX

pop AX

sti

iret

;_____________________________________________________________________________

;_——== проверка на время ==——

check_time PROC NEAR

call check_busy

cli

mov AL,4 ;часы

call read_clock

mov AH,AL

mov AL,2 ;минуты

call read_clock

mov cx,ax

mov al,0 ;секунды

call read_clock

sti

ret

check_time ENDP

;_____________________________________________________________________________

;_——== проверить,не идет ли изменение времени ==——

check_busy PROC NEAR

push CX

mov CX,1168h

repeat:

mov AL,0ah

cli

out 70h,AL ;пошлем в порт для проверки

jmp short $+2

in AL,71h ;получим измененное значение

and AL,80h ;7 бит занятости

jz go_out

sti

loop repeat

mov AL,80h

go_out:

pop CX

ret

check_busy ENDP

;______________

Загрузка...