3.
;
; Proc.asm
; Author: Barnaeva Natasha
;
code segment public
assume cs:code
; обьявление процедур
public key, set_init, set_simbol, set_msg, set_cursor, set_wait
;================================================= =============================
; Инициализация клавиатуры
;================================================= =============================
key proc near
jmp kstart
exit_pressed db 0
cps_pressed db 0
old9 dd 0
buf_s dw 0
buf db 50 dup (?)
end_buf db 24h
att dw 0
TABm db ' 1234567890-= qwertyuiop[] asdfghjkl;''\ zxcvbnm,./ '
TABb db ' !@#$%^&*()_+ QWERTYUIOP{} ASDFGHJKL:" ZXCVBNM<>? '
klava db ' '
db ' г===============================================¬ '
db ' ¦ --¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬ ¦ '
db ' ¦ ¦e¦¦1¦¦2¦¦3¦¦4¦¦5¦¦6¦¦7¦¦8¦¦9¦¦0¦¦-¦¦=¦¦\¦¦-¦ ¦ '
db ' ¦ L--L--L--L--L--L--L--L--L--L--L--L--L--L--L-- ¦ '
db ' ¦ ----¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬---¬ ¦ '
db ' ¦ ¦ # ¦¦q¦¦w¦¦e¦¦r¦¦t¦¦y¦¦u¦¦i¦¦o¦¦p¦¦[¦¦]¦¦ ¦ ¦ '
db ' ¦ L----L--L--L--L--L--L--L--L--L--L--L--L--¦ ¦ ¦ '
db ' ¦ -----¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--- ¦ ¦ '
db ' ¦ ¦ # ¦¦a¦¦s¦¦d¦¦f¦¦g¦¦h¦¦j¦¦k¦¦l¦¦;¦¦"¦¦ < ¦ ¦ '
db ' ¦ L-----L--L--L--L--L--L--L--L--L--L--L--L----- ¦ '
db ' ¦ ------¬--¬--¬--¬--¬--¬--¬--¬--¬--¬--¬-------¬ ¦ '
db ' ¦ ¦ # ¦¦z¦¦x¦¦c¦¦v¦¦b¦¦n¦¦m¦¦,¦¦.¦¦/¦¦ # ¦ ¦ '
db ' ¦ L------L--L--L--L--L--L--L--L--L--L--L------- ¦ '
db ' ¦ ---¬---¬----------------------------¬---¬---¬ ¦ '
db ' ¦ ¦ #¦¦ #¦¦ # ¦¦# ¦¦# ¦ ¦ '
db ' ¦ L---L---L----------------------------L---L--- ¦ '
db ' L===============================================- '
db ' ',24h
exits db 'Выход по нажатию 24h, т.е. при включеном caps lock нажав 4', 0dh, 0ah, 24h
kstart:
; инициируем или закрываем?
cmp bp,1
jne uninstall
; установка своего int9
call Install_Int
; покажем ascii рисунок
mov cs

osition,0
lea bx,klava
call set_msg
mov cs

osition,3054
lea bx,exits
call set_msg
mov cs

osition,3360
; цикл ввода - пока не будет нажат caps locc а после 4
vvod: cmp exit_pressed,0
jne done
jmp vvod
; покажем программе где буфер символов и возвратимся
done: lea bx,buf
ret
uninstall:
; восстановление вектора
call uninstall_int
jmp done
key endp