dseg SEGMENT PARA PUBLIC 'DATA'
cnt dw 0h
sec dw 0h
adr8i:
ip8 dw 0h ; вектор обработчика
cs8 dw 0h
adr60i:
ip60 dw 0h ; вектор обработчика
cs60 dw 0h
msg db ' Second$'
dseg ENDS
cseg SEGMENT
main proc FAR
; связь между регистром сегмента и сегментом программы
ASSUME cs:cseg, ds:dseg, ss:sseg
work: mov ax, dseg ; инициализация сегмента данных dseg
mov ds, ax
; установка вектора прерывания int8
mov ax,3508h ; получение адреса обработчика (вектор прерывания)
int 21h
mov ip8, bx ; сохранение указателей на программу обработки
mov ax, es
mov cs8, 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 myint60 ; получение адреса обработчика
mov ax, seg myint60
mov ds, ax
mov ah, 25h ; установка вектора прерывания
mov al, 60h
int 21h
pop ds
mov ah,0h
int 16h
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, 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 ; сохранение контекста
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 ax
jmp dword ptr es:adr8i ; управление - стандартному обработчику
iret
myint8 ENDP
myint60 proc FAR ; обработчик прерывания
push ax ; сохранение контекста
push bx
push es
push ds
push di
mov ax, dseg
mov es,ax
mov ax,word ptr es:sec ; инкрементация счетчика секунд и его сброс
inc ah
cmp ah,10
jne mn10
mov ah,0
inc al
cmp al,10
jne mn10
mov al,0
inc al
mn10:
mov word ptr es:sec,ax
add al,30h
add ah,30h
mov word ptr es:msg+1,ax
mov ax, dseg
mov ds,ax
mov ax,0b800h ; цветной дисплей
mov es,ax
lea bx, msg
mov di,7d0h ; место отображения сообщения
m1:
mov al,[bx]
cmp al,'$'
je m_ex
mov es:[di],al
inc di
inc bx
mov es:[di],word ptr 15h ; атрибуты вывода сообщения
inc di
jmp m1
m_ex:
pop di
pop ds
pop es
pop bx
pop ax
mov al,20h ; снятие заявки на обслуживание (ISR)
out 20h,al
iret
myint60 ENDP
cseg ENDS
END work
Время работы в секундах в центр экрана, используется прямое отображение в видеопамять.
Результаты работы программы:
В центре экрана мы видим надпись “ SS Second” розового цвета на синем фоне, SS – время работы программы в секундах, для окончания работы программы следует нажать любую клавишу. Реализован подсчет до 99 секунд.
2.5. Программа вывода на экран времени работы программы.
Программа построена на алгоритме, указанном в учебном пособии.
Вывод времени в формате: HH:MM:SS.
prog5.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
adr8i:
ip8 dw 0h ; вектор обработчика
cs8 dw 0h
adr60i:
ip60 dw 0h ; вектор обработчика
cs60 dw 0h
msg db ' : : $'
dseg ENDS
cseg SEGMENT
main proc FAR
; связь между регистром сегмента и сегментом программы
ASSUME cs:cseg, ds:dseg, ss:sseg
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.