int_60 ENDP
cseg ENDS
END start
Программа выводит счетчик времени, прошедшего с момента запуска, пока пользователь не нажмет клавишу. При этом при нажатии на Esc происходит выход из программы, а при нажатии на любую другую клавишу вызывается стандартный обработчик прерывания от клавиатуры.
Программа 10. Преобразуйте программу так, чтобы на экран выводились часы суточного времени. Для этого в начале основной программы примените вызов функции 2Ch прерывания DOS int 21h.
iclock.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
mov ah,2ch
int 21h
mov ax,0
mov al,ch
mov hour,ax
mov al,cl
mov min,ax
mov al,dh
mov sec,ax
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
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
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 0F0h
inc di
jmp mn1
exit:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.