Difficulté à vérifier le caractère qui a été lu au clavier dans une chaine de ca
moukengue
-
10 déc. 2012 à 16:04
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
11 déc. 2012 à 16:09
Bonsoir à tous,
J'ai un petit souci. En fait j'aimerais savoir quel est le caractère que j'ai lu au clavier en comparant la valeur du caractère courant avec les codes ascii correspondants aux caractères. Dans le cas de ce code je teste si c'est le caractère 'a' qui est lu au clavier.
Vous trouverez ci-dessous le code que j'ai pu écrire en ASM
.intel_syntax noprefix
.data
buffer:.space 30,'0'
desc:.asciz "%d\n"
nbcar:.int 0
.global main
main:
# Lecture de la chaine de caractère
push offset nbcar
call lirechaine
add esp,4
push offset buffer
push nbcar
# Traitement de la chaine de caractère
call affichechaine
add esp,8
push 0
call exit
# fonction permettant de lire une chaine de caractère au clavier
lirechaine:
push ebp
mov ebp,esp
mov eax,3
mov ebx,0
mov ecx,offset buffer
mov edx,30
int 0x80
mov esi,[ebp+8]
dec eax
mov [esi],eax
pop ebp
ret
# fonction permettant de traiter caractère par caractère de la chaine lue
affichechaine:
push ebp
mov ebp,esp
mov esi,[ebp+8]
mov edx,0
tque: cmp edx,esi
je ftque
mov ecx,[ebp+12]
add ecx,edx
push ecx
call code_caractere
add esp,4
inc edx
jmp tque
ftque: pop ebp
ret
affichecar:
push ebp
mov ebp,esp
pusha
mov eax,4
mov ebx,1
mov ecx,[ebp+8]
mov edx,1
int 0x80
popa
pop ebp
ret
print_int:
push ebp
mov ebp,esp
pusha
push [ebp+8]
push offset desc
call printf
add esp,8
popa
pop ebp
ret
code_caractere:
push ebp
mov ebp,esp
pusha
mov eax,[ebp+8]
#Ici je veux me rassurer de la valeur entière du caractère en cour de traitement
push eax
call print_int
add esp,4
cmp eax,98
je fin
#Ici je veux me rassurer du caractère en cour de traitement
push eax
call affichecar
add esp,4
fin: popa
pop ebp
ret
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 déc. 2012 à 16:09
"lu au clavier", je pense que "tapé sur la console" serait plus proche de la réalité.
admettons que tu as dans EAX le carac en cours, on veut vérifier que est numerique:
sub eax, 48
cmp eax, 9
ja lblNONNUM
ToutEnMasm:
C'est surement un devoir scolaire, on ne va tout de meme pas demander a un prof de suivre l'evolution des technos. Deja que c'est du 32 bits et en syntaxe Intel, suffira jusqu'a sa retraite.