[ASM[ Problème de conversion - ASM - Programmation
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
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 :
|
pourrait être évité en utilisant CX à la place de BX et en utilisant l'instruction LOOP
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
|
snul loop, cmp/jxx smieux
Marsh Posté le 14-12-2003 à 22:40:08
chrisbk a écrit : |
toi t'as trop lu l'optimization guide d'AMD
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
Marsh Posté le 14-12-2003 à 23:19:37
Harkonnen a écrit : |
bah c'est aussi valable pour le 386, il me semble.... (cycles loop > cycles cmp/jxx)
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