[ASM[ Problème de conversion

[ASM[ Problème de conversion - ASM - Programmation

Marsh Posté le 14-12-2003 à 15:31:42    

Bonjour voici un code asm qui convertit un nombre binaire vers de l'ascii. Mais je dois modifiier ce code pour qu'il convertisse de l'hexadecimal vers de l'ascii et ce en lieu et place du binaire. Pourriez vous m'aider svp car la je patauge complètement.
 
Merci d'avance
 
 
 
TITLE bin2ascii.asm
 
.MODEL small
.STACK
;-------------------------------------------------------
.DATA
acNbre DB "00000000$"
;-------------------------------------------------------
.CODE
MAIN:
;--------DS INITIALISATION--------
 
mov ax,@DATA
mov ds,ax
xor ax,ax
;---------------------------------
mov al,00001101b ;Nombre binaire a convertir
mov bx,0 ;compteur
 
bcl_debut:
cmp bx,8 ;si compteur = 8 (car 8bits) -->
je BCL_FIN ;arreter
mov cl,al ;on sauve al dans cl
and cl,10000000b ;on isole le b7
 
jz pas_ajout ;si le resultat != 0 --> ZF = 0
inc acNbre[bx] ;--> on met 1 dans acNbre
;sinon au effectue le saut
pas_ajout:
rol al,1 ;on decale de 1bit vers la gauche
inc bx ;incrementation 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 code d'exit 0
int 21h
 
;------------------------------------------------------------------
END MAIN
 

 

Reply

Marsh Posté le 14-12-2003 à 15:31:42   

Reply

Marsh Posté le 14-12-2003 à 18:25:57    

tu pourrais expliquer ton algo, parce que là je vois pas du tout la logique que tu emploies ! ça marche surement (j'imagine que tu as testé), mais j'avoue que je me demande comment [:meganne]
 
tu assembles avec quoi et sous quel OS ? parce que là, tu es en train de faire du code 16 bits, avec initialisations de segments et tout (le truc archi dépassé quoi), et en plus, t'as oublié les directives ASSUME pour déclarer les segments
 
enfin ce genre de code

Code :
  1. cmp bx,8 ;si compteur = 8 (car 8bits) -->
  2. je BCL_FIN ;arreter


pourrait être évité en utilisant CX à la place de BX et en utilisant l'instruction LOOP


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-12-2003 à 20:57:18    

Harkonnen a écrit :

tu pourrais expliquer ton algo, parce que là je vois pas du tout la logique que tu emploies ! ça marche surement (j'imagine que tu as testé), mais j'avoue que je me demande comment [:meganne]
 
tu assembles avec quoi et sous quel OS ? parce que là, tu es en train de faire du code 16 bits, avec initialisations de segments et tout (le truc archi dépassé quoi), et en plus, t'as oublié les directives ASSUME pour déclarer les segments
 
enfin ce genre de code

Code :
  1. cmp bx,8 ;si compteur = 8 (car 8bits) -->
  2. je BCL_FIN ;arreter


 
 
pourrait être évité en utilisant CX à la place de BX et en utilisant l'instruction LOOP
 


 
 
snul loop, cmp/jxx smieux


Message édité par chrisbk le 14-12-2003 à 20:57:38
Reply

Marsh Posté le 14-12-2003 à 22:40:08    

chrisbk a écrit :


 
 
snul loop, cmp/jxx smieux


toi t'as trop lu l'optimization guide d'AMD [:ddr555]
clair que 8 cycles pour le loop, c'est lent. mais je lui ai conseillé le loop car comme son code sera surement lancé sous Windows, il est possible que ça pète car (E)BX est utilisé en interne par Windows. et comme nolimites ne l'a pas empilé, vaut mieux prévenir que guérir :/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-12-2003 à 23:19:37    

Harkonnen a écrit :


toi t'as trop lu l'optimization guide d'AMD [:ddr555]
clair que 8 cycles pour le loop, c'est lent. mais je lui ai conseillé le loop car comme son code sera surement lancé sous Windows, il est possible que ça pète car (E)BX est utilisé en interne par Windows. et comme nolimites ne l'a pas empilé, vaut mieux prévenir que guérir :/


 
bah c'est aussi valable pour le 386, il me semble.... (cycles loop > cycles cmp/jxx)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed