mov ax,dseg
mov es,ax
; Native handler
jmp dword ptr es:adr_int8
int_8 ENDP
int_60 proc FAR
push ax
push es
mov ax, dseg
mov es,ax
; Set flag to change time
mov es:flag,1
; Increment counter
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
; Unset ISR int flag
mov al,20h
out 20h,al
iret
int_60 ENDP
cseg ENDS
END start
Данная программа в течение двух минут производит вывод времени, прошедшего с момента запуска.
Программа 7. Используя свою программу, замаскируйте доступ к клавиатуре на 20 с. Попробуйте «перезапустить» компьютер с «теплого старта».
imask.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
adr_int8:
ipsave_8 dw 0h
cssave_8 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,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_60
mov ax, seg int_60
mov ds, ax
mov ah, 25h
mov al, 60h
int 21h
pop ds
mov al,2
out 21h,al
time:
cmp flag,0
je exit
mov flag,0
mov ax,sec
mov bl,10
div bl
add ax,3030h
mov word ptr es:msg+7,ax
mov ax,min
div bl
add ax,3030h
mov word ptr es:msg+4,ax
mov ax,hour
div bl
add ax,3030h
mov word ptr es:msg+1,ax
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.