Ассемблер (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 ; конец программы/точка выхода


Страница: