int_8 ENDP
int_60 proc FAR
push ax
push es
mov ax, dseg
mov es,ax
mov es:flag,1
mov ax,word ptr es:sec
inc ax
cmp ax,60
jne ms
mov ax,0
mov word ptr es:sec,ax
jmp mm
ms:
mov word ptr es:sec,ax
jmp m_ex
mm:
mov ax,word ptr es:min
inc ax
cmp ax,60
jne mm_m
mov ax,0
mov word ptr es:min,ax
jmp mh
mm_m:
mov word ptr es:min,ax
jmp m_ex
mh:
mov ax,word ptr es:hour
inc ax
cmp ax,24
jne mh_h
mov ax,0
mov word ptr es:hour,ax
jmp m_ex
mh_h:
mov word ptr es:hour,ax
m_ex:
pop es
pop ax
mov al,20h
out 20h,al
iret
int_60 ENDP
cseg ENDS
END start
Программа выполняется идентично программе 7.
Программа 9. Исключите цикл, ограничивающий время работы вашей программы. Реализуйте возможность выхода из программы по «горячей клавише». Для этого перехватите аппаратное прерывание от клавиатуры.
ihotkey.asm
sseg SEGMENT STACK
db 64 dup (?)
sseg ENDS
dseg SEGMENT PARA PUBLIC 'DATA'
cnt dw 0h
sec dw 0h
min dw 0h
hour dw 0h
flag dw 0h
klav dw 0h
adr_int8:
ipsave_8 dw 0h
cssave_8 dw 0h
adr_int9:
ipsave_9 dw 0h
cssave_9 dw 0h
adr_int60:
ipsave_60 dw 0h
cssave_60 dw 0h
msg db ' : : $'
dseg ENDS
cseg SEGMENT
main proc FAR
ASSUME cs:cseg, ds:dseg, ss:sseg
start:
mov ax, dseg
mov ds, ax
mov ax,3508h
int 21h
mov ipsave_8, bx
mov ax, es
mov cssave_8, ax
mov ax,3509h
int 21h
mov ipsave_9, bx
mov ax, es
mov cssave_9, ax
mov ax,3560h
int 21h
mov ipsave_60, bx
mov ax, es
mov cssave_60, ax
push ds
mov dx, offset int_8
mov ax, seg int_8
mov ds, ax
mov ah, 25h
mov al, 8h
int 21h
pop ds
push ds
mov dx, offset int_9
mov ax, seg int_9
mov ds, ax
mov ah, 25h
mov al, 9h
int 21h
pop ds
push ds
mov dx, offset int_60
mov ax, seg int_60
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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.