Réponse acceptée !
Bonjour qsdfgh,
Voici une routine qui convertit un octet mis dans al en deux caractères mis dans ax
hexascii: ;convertit la valeur mise dans al en 2 octets al et ah (al=poids fort, ah=poids faible)
aam 16 ;décompose en deux octets ah (division par 16) et al (reste division)
;peut être remplacé par mov ah,al et shr al,4 si pb (MASM)
cmp al,0x9 ;vérifie si numérique
jna num1 ;si <=9
add al,"A"-"0"-10 ;sinon ajoute 7
num1 xchg ah,al ;lit les 4 bits de poids fort
cmp al,0x9
jna num2
add al,"A"-"0"-10
num2 add ax,"00" ;rajoute "0"-0 à chacun des octets
ret
Si tu veux utiliser ta routine afficherUns32, il faut que tu ne mette qu'un octet dans eax. Il faut utiliser l'instruction
movzx eax,byte[bx]
qui va copier un octet dans eax (en faut dans al et mettre ah et les autres bits du registre à 0)
Si la routine afficherUns32 travaille avec 4 octets (ceux de eax) alors il te faut incrémenter bx de 4.
Une question : dans ce dernier cas que se passera-t-il si le nombre de caractères de ta chaine n'est pas un multiple de 4.
Enfin - et le plus grave - la fonction afficherUns32 doit convertir une valeur hexa comprise entre 00 et FF (pour un octet) en deux caractères, ceci nécessite les opérations suivantes :
- division par 16 pour extraire le nibble haut (bits de 4 à 7) et le nibble bas (bit de 0 à 3)
- pour un résultat compris entre 0 et 9 il faut rajouter 30h pour obtenir les codes ascii compris entre 30h ("0") et 39h ("9")
- pour un résultat compris entre A et F il faut rajouter 37h pour obtenir les codes ascii compris entre 41h ("A") et 46h ("F") ou rajouter 57h pour les minuscules
- sortir la chaine de caractères obtenue
Dans le cas de la sortie d'une chaine déjà toute faite, ta chaine bonjour, ta routine n'est pas du tout adaptée.
Sous Windows, utilise plutôt l'API MessageBox qui t'affichera directement ta chaine
A+