model tiny
code1 segment
assume cs:code1,ds:code1,ss:code1,es:code1
org 100h
begin:
mov ax,3
int 10h
mov ax,3509h
int 21h
mov old09o,bx
mov old09s,es
mov ax,2509h
mov dx,offset new09
int 21h
mov ah,9
mov dx,offset mess1
int 21h
mov ah,10
mov dx,offset mess2
int 21h
mov ax,2509h
mov dx,old09o
mov ds,old09s
int 21h
ret
old09o dw ?
old09s dw ?
mess1 db 10,10,13,'Enter a key: $'
mess2 db 120,?,120 dup(?)
new09:
in al,60h
and al,01111111b
push ax
call proc1
proc1 proc
pop ax
mov bx,1030h
mov ah,0
div bh ; ax/bh=(al, ost->ah)
cmp ah,09h
ja @@03
add bl,ah
jmp @@04
@@03:
mov bl,41h
sub ah,0Ah
add bl,ah
@@04:
mov ah,0
div bh ; ax/bh=(al, ost->ah)
cmp ah,09h
ja @@05
mov dx,3030h
add dx,ax
jmp @@06
@@05:
mov dx,4141h
sub ah,0Ah
add dx,ax
@@06:
push dx
mov ah,2
mov dh,10
mov dl,20
mov bh,0
int 10h
pop dx
mov ah,2
mov dl,dh
int 21h
mov dl,bl
int 21h
mov dl,68h
int 21h
; mov dl,0Dh
; int 21h
ret
proc1 endp
code1 ends
end begin
model tiny
.code
org 100h
start:
mov al,0F5h
;начало вывода
mov bx,1030h
mov ah,0
div bh ; ax/bh=(al, ost->ah)
cmp ah,09h
ja @@03
add bl,ah
jmp @@04
@@03:
mov bl,41h
sub ah,0Ah
add bl,ah
@@04:
mov ah,0
div bh ; ax/bh=(al, ost->ah)
cmp ah,09h
ja @@05
mov dx,3030h
add dx,ax
jmp @@06
@@05:
mov dx,4141h
sub ah,0Ah
add dx,ax
@@06:
mov ah,2
mov dl,dh
int 21h
mov dl,bl
int 21h
;конец вывода
; mov ah,0
; int 16h
mov ah,4Ch
int 21h
end start
... аппаратный обработчик клавиатуры выполняет ещё много различных функций важных для ОСи и если Вы их не сделаете, то система может рухнуть. Он должен сбросить контролер клавиатуры-т.е. сказать ему, что событие обработано, также должен ещё быть сброшен контролер обработки аппаратных прерываний, чтобы другие аппаратные прерывания могли дождаться своей очереди;...
Он должен сбросить контролер клавиатуры-т.е. сказать ему, что событие обработано, также должен ещё быть сброшен контролер обработки аппаратных прерываний,
and al,0fh
PrHDig: add al, 90h
daa
adc al, 040h
daa
push ax ; какое значение регистра AX заносится в стек ?
in al,60h ; в регистр AL заносится полный (8-битный) скен-код нажатой клавиши, не так ли ?
push ax
;-------------------------------------------------------------------------------------
;
in al,61h ; 7-ой читаемый старший бит описывает блокировку (1-да, 0-нет) клавиатуры
mov ah,al ; но здесь этот 7-ой бит при нажатии равен 0, то есть клавиатура разблокирована ?
or al,80h ; это эквивалентно замене 7-ого старшего бита в AL на "1", то есть блокировка клавиатуры
out 61h,al ; здесь клавиатура официально блокируется
xchg ah,al ; здесь в AL в 7-ой старший бит записывается первоначальное значение "0"
out 61h,al ; здесь клавиатура официально разблокировывается
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.