; установка вектора прерывания int8
mov ax,3508h ; получение адреса обработчика (вектор прерывания)
int 21h
mov ip8, bx ; сохранение указателей на программу обработки
mov ax, es
mov cs8, ax
; установка вектора прерывания int9
mov ax,3509h ; получение адреса обработчика (вектор прерывания)
int 21h
mov ip9, bx ; сохранение указателей на программу обработки
mov ax, es
mov cs9, ax
; установка вектора прерывания int60
mov ax,3560h ; получение адреса обработчика (вектор прерывания)
int 21h
mov ip60, bx ; сохранение указателей на программу обработки
mov ax, es
mov cs60, ax
push ds
mov dx, offset myint8 ; получение адреса обработчика
mov ax, seg myint8
mov ds, ax
mov ah, 25h ; установка вектора прерывания
mov al, 8h
int 21h
pop ds
push ds
mov dx, offset myint9 ; получение адреса обработчика
mov ax, seg myint9
mov ds, ax
mov ah, 25h ; установка вектора прерывания
mov al, 9h
int 21h
pop ds
push ds
mov dx, offset myint60 ; получение адреса обработчика
mov ax, seg myint60
mov ds, ax
mov ah, 25h ; установка вектора прерывания
mov al, 60h
int 21h
pop ds
time: ; цикл, ограничивающий время работы
cmp klav,1 ; проверка нажатия клавиши
je Kl_exit
cmp flag,0 ; проверка на изменение секунд
je exit
mov flag,0
mov ax,sec ; преобразование количества секунд
mov bl,10
div bl
add ax,3030h ; преобразование в ASCII
mov word ptr es:msg+7,ax
mov ax,min ; преобразование количества минут
div bl
add ax,3030h ; преобразование в ASCII
mov word ptr es:msg+4,ax
mov ax,hour ; преобразование количества часов
div bl
add ax,3030h ; преобразование в ASCII
mov word ptr es:msg+1,ax
mov ax,0b800h ; цветной дисплей
mov es,ax
lea bx,msg
mov di,0 ; место отображения сообщения
mn1:
mov al,[bx]
cmp al,'$'
je exit
mov es:[di],al
inc di
inc bx
mov es:[di],word ptr 15h ; атрибуты вывода сообщения
inc di
jmp mn1
exit:
jmp time
kl_exit:
push ds
mov dx, ip8
mov ax, cs8
mov ds, ax
mov ah, 25h
mov al, 8h
int 21h
pop ds
push ds
mov dx, ip9
mov ax, cs9
mov ds, ax
mov ah, 25h
mov al, 9h
int 21h
pop ds
push ds
mov dx, ip60
mov ax, cs60
mov ds, ax
mov ah, 25h
mov al, 60h
int 21h
pop ds
mov ah,4ch ; завершение работы программы
int 21h
main ENDP
myint8 proc FAR ; обработчик прерывания
push ax ; сохранение контекста
push es
mov ax, dseg
mov es,ax
mov ax,word ptr es:cnt ; вычисление количества прерываний int8
inc ax
cmp ax,18 ; вызов int60, если поступило 18 int8
jne m0
int 60h
mov ax,0
m0:
mov word ptr es:cnt,ax
pop es
pop ax
mov ax,dseg
mov es,ax
jmp dword ptr es:adr8i ; управление - стандартному обработчику
myint8 ENDP
myint9 proc FAR ; обработчик прерывания
push ax ; сохранение контекста
push es
mov ax, dseg
mov es,ax
in al, 60h
cmp al,1
je m_kl
pop es
pop ax
mov ax,dseg
mov es,ax
jmp dword ptr es:adr9i ; управление - стандартному обработчику
m_kl:
mov word ptr es:klav,1
mov al,20h ; снятие заявки на обслуживание
out 20h,al
pop es
pop ax
iret
myint9 ENDP
myint60 proc FAR ; обработчик прерывания
push ax ; сохранение контекста
push es
mov ax, dseg
mov es,ax
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.