Interruption clavier
Fermé
smail
-
23 mars 2008 à 19:22
mbzrwt Messages postés 1 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 1 mai 2009 - 1 mai 2009 à 13:33
mbzrwt Messages postés 1 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 1 mai 2009 - 1 mai 2009 à 13:33
A voir également:
- Interruption clavier
- Telecharger clavier arabe تنزيل لوحة المفاتيح العربية - Télécharger - Divers Web & Internet
- Comment taper / sur clavier - Guide
- Changer clavier qwerty en azerty - Guide
- Télécharger clavier arabe samsung - Télécharger - Bureautique
- Clavier+ - Télécharger - Personnalisation
2 réponses
;== Constantes et structures ===========================================
INT_CTR = 20h ;Port du contrôleur d'interruption
EOI = 20h ;Fin d'interruption
KB_PORT = 60h ;Port du clavier
;== Début du programme proprement dit ==============================
code segment para 'CODE' ;Définition du segment de code
org 100h
assume cs:code, ds:code, es:code, ss:code
start: jmp getscan ;Branchement au début du programme
;== Programmcode =======================================================
getscan: mov ah,09h ;Message de copyright
mov dx,offset copyr
int 21h
mov ax,3509h ;Contenu du vecteur d'interruption 09h
int 21h ;Interruption de DOS
mov int9_seg,es ;Mémorise le segment et l'offset
mov int9_ofs,bx ;du vecteur d'interruption 9h
mov dx,offset nouvi9 ;Offset de la nouvelle routine d'int.
mov ax,2509h ;Détourne le vecteur de
int 21h ;l'interruption 09h
;push cs
;pop ds
;lea dx,hood
;mov cl,4
;shr dx,cl
;inc dx
;int 27H
;lds dx,int9_ptr ;Rétablit l'ancien gestionnaire -
;mov ax,2509h ; de l'interruption du clavier
;int 21h
;lea dx,hood
;mov cl,4
;shr dx,cl
;inc dx
mov ax,4c00h
int 2h
;== Données=============================================================
Good :
int9_ptr equ this dword ;Ancien vecteur d'interruption 9h
int9_ofs dw 0 ;Offset de l'ancien gestionnaire
int9_seg dw 0 ;Segment de l'ancien gestionnaire
cmpt dw 0
bafferVide db '* LE BAFFER EST VIDE *',0ah,0dh,24h
copyr db '* PROGRAMME RESIDANT *',0ah,0dh,24h
baffere db 60 dup(?)
se db 0
un db 1
;== Constantes et structures ===========================================
INT_CTR = 20h ;Port du contrôleur d'interruption
EOI = 20h ;Fin d'interruption
KB_PORT = 60h ;Port du clavier
;== Gestionnaire de l'interruption 09h (Clavier) =======================
nouvi9 proc far
assume cs:code, ds:nothing, es:nothing, ss:nothing
sti
;cmp un,0
;je finzz
push ax
push di
;========================================================================
in al,KB_PORT ;Lit le scan code sur port clavier
cmp al,128 ;Est-ce un code Release ?
jnb find ;Non ---> en prend note
cas: cmp al,28 ; scan code de Entrer
jne NonEntrer
mov bx,cmpt
cmp bx,0
jne bafferNonVide
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
inc se
jmp finzz
bafferNonVide:
mov cx,bx
dec bx
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
boucle :
mov dl,baffere[bx]
add dl,49
mov ah,02h
int 21h
dec bx
loop boucle
xor ax,ax
mov cmpt,ax
jmp finzz
NonEntrer:
mov bx,cmpt
mov baffere[bx],al
inc cmpt
finzz:
cmp se,3
jne nonse
mov dx,int9_ofs ;R‚tablit l'ancien gestionnaire -
push int9_seg
pop ds
mov ax,2509h ; de l'interruption du clavier
int 21h
mov ax,4C00h
int 21H
nonse:
;inc se
;xor un,01h
;mov un,bx
;====================================================================
;mov ah,02h ;Message de copyright
;mov dl,66
;int 21h
find:
pop di
pop ax
jmp [int9_ptr] ;du clavier
nouvi9 endp
hood :
;== Fin ================================================================
code ends ;Fin du segment de code
end start
INT_CTR = 20h ;Port du contrôleur d'interruption
EOI = 20h ;Fin d'interruption
KB_PORT = 60h ;Port du clavier
;== Début du programme proprement dit ==============================
code segment para 'CODE' ;Définition du segment de code
org 100h
assume cs:code, ds:code, es:code, ss:code
start: jmp getscan ;Branchement au début du programme
;== Programmcode =======================================================
getscan: mov ah,09h ;Message de copyright
mov dx,offset copyr
int 21h
mov ax,3509h ;Contenu du vecteur d'interruption 09h
int 21h ;Interruption de DOS
mov int9_seg,es ;Mémorise le segment et l'offset
mov int9_ofs,bx ;du vecteur d'interruption 9h
mov dx,offset nouvi9 ;Offset de la nouvelle routine d'int.
mov ax,2509h ;Détourne le vecteur de
int 21h ;l'interruption 09h
;push cs
;pop ds
;lea dx,hood
;mov cl,4
;shr dx,cl
;inc dx
;int 27H
;lds dx,int9_ptr ;Rétablit l'ancien gestionnaire -
;mov ax,2509h ; de l'interruption du clavier
;int 21h
;lea dx,hood
;mov cl,4
;shr dx,cl
;inc dx
mov ax,4c00h
int 2h
;== Données=============================================================
Good :
int9_ptr equ this dword ;Ancien vecteur d'interruption 9h
int9_ofs dw 0 ;Offset de l'ancien gestionnaire
int9_seg dw 0 ;Segment de l'ancien gestionnaire
cmpt dw 0
bafferVide db '* LE BAFFER EST VIDE *',0ah,0dh,24h
copyr db '* PROGRAMME RESIDANT *',0ah,0dh,24h
baffere db 60 dup(?)
se db 0
un db 1
;== Constantes et structures ===========================================
INT_CTR = 20h ;Port du contrôleur d'interruption
EOI = 20h ;Fin d'interruption
KB_PORT = 60h ;Port du clavier
;== Gestionnaire de l'interruption 09h (Clavier) =======================
nouvi9 proc far
assume cs:code, ds:nothing, es:nothing, ss:nothing
sti
;cmp un,0
;je finzz
push ax
push di
;========================================================================
in al,KB_PORT ;Lit le scan code sur port clavier
cmp al,128 ;Est-ce un code Release ?
jnb find ;Non ---> en prend note
cas: cmp al,28 ; scan code de Entrer
jne NonEntrer
mov bx,cmpt
cmp bx,0
jne bafferNonVide
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
inc se
jmp finzz
bafferNonVide:
mov cx,bx
dec bx
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
boucle :
mov dl,baffere[bx]
add dl,49
mov ah,02h
int 21h
dec bx
loop boucle
xor ax,ax
mov cmpt,ax
jmp finzz
NonEntrer:
mov bx,cmpt
mov baffere[bx],al
inc cmpt
finzz:
cmp se,3
jne nonse
mov dx,int9_ofs ;R‚tablit l'ancien gestionnaire -
push int9_seg
pop ds
mov ax,2509h ; de l'interruption du clavier
int 21h
mov ax,4C00h
int 21H
nonse:
;inc se
;xor un,01h
;mov un,bx
;====================================================================
;mov ah,02h ;Message de copyright
;mov dl,66
;int 21h
find:
pop di
pop ax
jmp [int9_ptr] ;du clavier
nouvi9 endp
hood :
;== Fin ================================================================
code ends ;Fin du segment de code
end start
mbzrwt
Messages postés
1
Date d'inscription
vendredi 1 mai 2009
Statut
Membre
Dernière intervention
1 mai 2009
1 mai 2009 à 13:33
1 mai 2009 à 13:33
Paix
comment eliminer la repetition d'un carater, c'est-a-dir on apuiyant sur n'inport qu'elle touche meme maintenu un seul caracter doit etre imprimer.
merci.
comment eliminer la repetition d'un carater, c'est-a-dir on apuiyant sur n'inport qu'elle touche meme maintenu un seul caracter doit etre imprimer.
merci.