Probleme de conversation de hexa en ascii

cs_wapiti Messages postés 1 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 11 décembre 2003 - 11 déc. 2003 à 19:12
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 5 janv. 2004 à 15:46
voici le programme qui converti du binaire en ascii

.model small
.stack
;------------------------------------------------------------------------------------------
.data
acnbre db "oooooooo$"
;------------------------------------------------------------------------------------------
.code
main:
; init DS
mov ax,@data
mov ds,ax
xor ax,ax
;------------------------------------------------------------------------------------------
mov al,00001101b ; nombre binaire à convertir
mov bx,0 ; compteur

bcl_debut:
cmp bx,8 ; si compteur = 8 (car 8 bits) :
je bcl_fin ; alors on arrete
mov cl,al ; sinon on sauve al dans cl
and cl,10000000b ; on isole le b7 (MSB)

jz pas_ajout ; si le résultat est !=0 -> ZF=0
inc acnbre[bx] ; -> on met 1 dans acnbre sinon on effectue le saut

pas_ajout:
rol al,1 ; on décale d'1 bit vers la gauche
inc bx ; incrémentation du compteur
jmp bcl_debut ; on continue

bcl_fin:
lea dx,acnbre ; affichage du nombre
mov ah,9
int 21h
;------------------------------------------------------------------------------------------
; DOS RETURN
mov ax,4c00h ; retour au dos avec le code exit 0
int 21h
end main

je sais que dans al lorsque je fais mon rol al,1 pour transformer cette exemple en hexadecimal,je dois faire al,4.
je sais egalement que dans ma boucle de debut quand j'isole le dernier bit pour le binaire en hexadecimale, il faudrait isoler 4 bit en hexadecimal.
ma question est : faut il que le nombre hexadecimal que l'utilisateur entrera sera converti par la suite en binaire pour finalement l'afficher en ascii ou puis je directement convertir de l'hexadecimale en ascii dans mon programme??
Ma logique est elle bonne???
pourriez vous m'aider et m'expliquer en detaille les differentes modifications a faire???
merci d'avance de concacrer un peu de temps a mon probleme :)

2 réponses

hitchhikr Messages postés 36 Date d'inscription dimanche 8 décembre 2002 Statut Membre Dernière intervention 8 avril 2005
22 déc. 2003 à 10:49
Puis je directement convertir de l'hexadecimale en ascii dans mon programme??

Oui. L'hexadécimal n'est qu'une representation d'un nombre binaire en base 16. C'est purement fictif.

Ma logique est elle bonne???

Oui. Il faut juste remplacer tout le code de conversion par:

movzx bx,al ; bx = 00xy
and bl,0fh ; bl = 0y
mov bl,[HexTbl+bx]
mov [acnbre+1],bl
mov bl,al ; bl = xy
shr bl,4 ; bl = 0x
mov bl,[HexTbl+bx]
mov [acnbre],bl


et HexTbl ressemble à ceci:

HexTbl db "0123456789ABCDEF"


Ce qui est beaucoup plus simple à comprendre et plus rapide à l'execution pour convertir un octet.
(Le même principe peut être appliqué aux conversions de nombres binaires).

Voila,
f.
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
5 janv. 2004 à 15:46
HexTbl db "0123456789ABCDEF"

lea ebx,HexTbl
mov ah,al
shr al,4
and ah,0fh
xlat ; = ebx[al] exemple: si al=2 alors ebx[2] = '2' = 32h
mov [result],al
mov al,ah
xlat
mov [result+1],al

meme chose que hitchhikr mais avec utilisation xlat
sous nasm (xlatb)
0
Rejoignez-nous