ca ne marche nickel QUE si le résultat tient dans un word (ce qui ne sera pas le cas si tu veux diviser un nombre 32 bits quelconque par 100)
mais si t'as pas du tout besoin de vitesse, tu peux utiliser _du32u32 (ou un truc comme ca)
|========================================================================= |Func_IntToStr |------------------------------------------------------------------------- |Convertie un entier en chaîne de caractères |------------------------------------------------------------------------- |input: | dc.l %d0 = Entier. | dc.l %a0 = Chaîne de caractères de destination. | |output: | dc.l %a3 = Chaîne de caractères. | |destroy: %a3, %d3 |========================================================================= _Func_IntToStr_zero: move.b #'0',-(%a3) rts Func_IntToStr: lea.l 12(%a0),%a3 clr.b -(%a3) moveq.l #0,%d7 |Signe négatif move.l %d0,%d1 jbeq _Func_IntToStr_zero jbge _Func_IntToStr_next moveq.l #-1,%d7 neg.l %d1 _Func_IntToStr_next: move.l %d1,%d3 _Func_IntToStr_loop: moveq.l #10,%d0 ROM_CALL _mu32u32 addi.b #'0',%d1 move.b %d1,-(%a3) move.l %d3,%d1 moveq.l #10,%d0 ROM_CALL _du32u32 move.l %d1,%d3 jbne _Func_IntToStr_loop _Func_IntToStr_end_loop: tst.w %d7 jbeq _Func_IntToStr_exit move.b #'-',-(%a3) _Func_IntToStr_exit: rts
Afficher_Chiffre lea buffer(pc),a0 move.b #0,(a0)+ move.l #1000,d1 moveq #1,d3 divu.l d1,d0 clr.l d2 swap d0 move.w d0,d2 clr.w d0 swap d0 \loop: divu.w d1,d0 move.b d0,(a0)+ clr.w d0 swap d0 divu.w #10,d1 tst.w d1 bne \loop move.w d2,d0 moveq #100,d1 dbra d3,\loop lea buffer(pc),a0 moveq #6,d1 \loop1: move.b #$ff,(a0)+ tst.b (a0) dbne d1,\loop1 rts
Sasume :
movea.l %a0,%a3 ; lea.l 12(%a3),%a3 => lea.l 12(%a0),%a3
Et il n'y a pas une erreur quand le nombre est nul (il faut mettre a3 au lieu de a0) ?
Et on peut optimiser le test du signe (avec sCC) à mon avis.
Par contre, il faut que la chaine de destination contienne des espaces, et les données seront alignées à droite ; et ta routine détruit aussi d0,d1,d7.
nan, y a une fonction pour la division (_dmachin) et une autre pour le modulo (_mmachin), faut faire 2 appels...
et :
- c'est tout sauf fast pour les gros nombres, ca fait 2 appels des fonctions lentes de TI a chaque chiffre, donc a moins que fastitoa soit franchement lent, c vite vu... - a0 est tout sauf la chaine de destination, c'est plutot un buffer temporaire de 12 caracteres (mais je ne vois marqué ca nulle part dans la spec ), qui sera utilisé pour stocker le résultat
geogeo :
Normal, il faut spécifier soit même dans %a0 la destination donc soit même un buffer temporaire.