1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| // Procedure de saisie d'un caractere au clavier :
// _ Appel procedure en c 5.1 Microsoft
int saisie_car (unsigned int *ptr_car )
{
// _ le retour se fait dans le registre AL
// _ AX = 0 , pas de caractere recu
// - AX = 1 , un caractre recu
// _ Definition du caractere envoye
// _ 0 < car < 0x100 : codes ascii standart + codes ascii
// etendu
// _ 0xFF < car < 0x1FF : codes des cles IBM etendu ,
// code de la cles + 0x100
// PUBLIC _saisie_car
//_saisie_car proc near
// sauvegarde du contexte
asm {
push bp
mov bp,sp
push si
//pointe l'adresse du caractere a metre a jour
mov si,4[bp]
//saisie du caractere
mov ah,6
mov dl,0x0ff
int 0x21
jz err //pas de caractere recu
//un caractere est recu test si sequence escape(code cles IBM etendu)
cmp al,0
jz etendu //sequence caractere escape
//mise a jour du carractere recu : codes standarts et etendu ascii
xor ah,ah
mov [si],ax
mov al,byte ptr 1
jmp fin
//saisie du second caractere
etendu:
mov ah,6
mov dl,0x0ff
int 0x21
jz err //pas de second caractere
//pointe le caractere
mov ah,al
xor al,al
mov [si],ax
mov al,byte ptr 1
jmp fin
//pas de caractere recu , retourne faux et code nul
err: xor al,al
xor ah,ah
mov [si],ax
//restitution du contexte
fin: pop si
pop bp
ret
}
}
//_saisie_car endp
main()
{unsigned int ptr_car;int n;
n= saisie_car (&ptr_car ) ; } |
Partager