Ассемблер (assembler). Разработка резидентых обработчиковРефераты >> Программирование и компьютеры >> Ассемблер (assembler). Разработка резидентых обработчиков
mode db 13,10," ╔════════════════════════════════╗"
db 13,10," ║ Коэффициент замедления: ║"
db 13,10," ╚════════════════════════════════╝$"
info1 db 13,10," ╔═════════════════════════════════════════════╗"
db 13,10," ║ Нажмите комбинацию клавиш вида <Scroll Lock + цифра> ║"
db 13,10," ║ где цифра = 1 . 8 (коэффициент замедления) ║"
db 13,10," ║ цифра '1' означает, что замедление отсутствует ║"
db 13,10," ║ Примечание : по умолчанию замедление отсутствует! ║"
db 13,10," ╚═════════════════════════════════════════════╝$"
str1 db "1/1$"
str2 db "1/2$"
str3 db "1/3$"
str4 db "1/4$"
str5 db "1/5$"
str6 db "1/6$"
str7 db "1/7$"
str8 db "1/8$"
len7 = $-str8
error db 13,10,13,10, "Неверная комбинация клавиш. Попробуйте еще раз. $"
temp db ?
temp1 db ?
clocks db "00:00:00"
sclock_len = $-clocks
yes db "Резидент обнаружен"
yes_len = $-yes
no db "Резидент не обнаружен"
no_len = $-no
;--------------------------------------------------------------
Codeseg
Start:
mov ax,@data
mov ds,ax
mov es,ax
;вывод пользовательского меню
window 0,8Fh,0,0,25,80
locate 0,0
out_str intro
out_str mes_t11
out_str status
out_str mode
out_str info1
mov ax,0C800h
int 2Fh
cmp al,0ffh
jne ok
cprintf yes,yes_len,2Fh,12,11,0
mov [temp1],1
jmp work
; резидента в памяти нет - выход
ok:
cprintf no,no_len,4Fh,12,11,0
jmp quit
; вывод на экран незамедленного (системного) времени
work:
mov ah, 2Ch
int 21h
jc end_out
mov al,ch
call bcd_asc
mov [clocks],ah
mov [clocks+1],al
mov al,cl
call bcd_asc
mov [clocks+3],ah
mov [clocks+4],al
mov al,dh
call bcd_asc
mov [clocks+6],ah
mov [clocks+7],al
cprintf clocks,sclock_len,1Fh,36,7,0
end_out:
;--------------------------------------------------------------------
push ax
mov ax,0C700h
int 2Fh
mov [temp],al
locate 14,30
cmp [temp],0h
jne del1
cmp [temp1],1h
jne del1
out_str str1,len7,1Eh,63,15,0
del1: cmp [temp],01h
jne del2
out_str str1,len7,1Eh,63,15,0
del2: cmp [temp],02h
jne del3
out_str str2,len7,1Eh,63,15,0
del3: cmp [temp],03h
jne del4
out_str str3,len7,1Eh,63,15,0
del4: cmp [temp],04h
jne del5
out_str str4,len7,1Eh,63,15,0
del5: cmp [temp],05h
jne del6
out_str str5,len7,1Eh,63,15,0
del6: cmp [temp],06h
jne del7
out_str str6,len7,1Eh,63,15,0
del7: cmp [temp],07h
jne del8
out_str str7,len7,1Eh,63,15,0
del8: cmp [temp],08h
jne del9
out_str str8,len7,1Eh,63,15,0
del9:
pop ax
;---------------------------------------------------------------
; проверка на нажатие клавиши
quit: mov ah, 01h
int 16h
je work
exit:
mov ax,4C00h
int 21h
;---------------------------------------------------------------
; процедура преобразования числа в ASCII-форму
Proc bcd_asc
xor bx,bx
mov bl, al
mov bh, 00h
mov ax,bx
mov cl, 10 ; 10 == 1010b
div cl
add ah, '0'
add al, '0'
xchg ah,al
ret
Endp bcd_asc
;---------------------------------------------------------------
End start ; конец программы/точка выхода