pop es, ds, ax
iret
i08_hnd:
push ax, ds, es
mov ds, cs ;установка доступа к данным процедуры
inc cntr ;увеличение значения счетчика прерывании
cmp cntr, 18 ;проверка на прохождение 1 минуты (~990 мсек)
jne l10
mov cntr, 0 ;обнуление счетчика прерывании
int 060 ;вызов пользовательского прерывания
l10:
mov al, 020 ;снятие заявки на обслуживание прерывания
out 020, al
pop es, ds, ax
cs jmp old_v ;передача управления исходному обработчику
Результат – вывод каждую секунду в левый верхний угол экрана символа, каждый раз – с ASCII-кодом, на единицу большим, чем код предыдущего выведенного символа (“*”, далее “+” и т.д.).
2.4. Изменение программы так, чтобы происходил подсчет относительного времени с момента начала работы программы
Out4.8
include mac.inc
jmp start
old_v dd ? ;двойное слово для хранения значения вектора прерывания 08h
old_v1 dd ? ;двойное слово для хранения значения вектора прерывания 060h
cntr db 0 ;счетчик прерываний от таймера
sec db 0 ;счетчик секунд
min db 0 ;счетчик минут
hour db 0 ;счетчик часов
flag db 0
maxmin db 2
start: chv old_v, 08, i08_hnd ;замена ВП системного таймера
chv old_v1, 060, i060_hnd ;замена пользовательского ВП
l1:
test flag ;проверка на требуемость изменения отображения времени на экране
jz l2
mov es, 0b800 ;указатель на видеобуфер
mov bx, 10 ;сохранение в стек числа часов, минут и секунд
mov cx, 3
mov di, 18
mov al, hour
mov ah, 0
push ax
mov al, min
mov ah, 0
push ax
mov al, sec
mov ah, 0
push ax
; цикл преобразования и вывода чч:мм:сс
l3:
pop ax ;выгрузка из стека и преобразование в ASCII код часов, минут
mov dx, 0 ;секунд и отображение времени на экране в формате чч:мм:сс
div bx
add dl, '0'
add al, '0'
sub di, 2
cmp di, 16
je nopt
es mov b [di], ':'
nopt:
sub di, 2
es mov b [di], dl
sub di, 2
es mov b [di], al
loop l3
mov flag, 0
l2:
mov al, min ;проверка на время окончания работы программы
cmp al, maxmin ; в минутах
jne l1
restv 08, old_v ;восстановление ВП системного таймера
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.