Prehisto a écrit:
La réponse est:
Code:
ADDA #$90 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F
DAA 90 91 92 93 94 95 96 97 98 99 00 01 02 03 04 05
ADCA #$40 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 41 42 43 44 45 46
DAA 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46
.. mais peut-être est-il possible de mieux faire?...
Cool !! Le ADCA fait le truc du +1 conditionnel de ma version. Donc si je comprends bien le 1er DAA possede la particularite de mettre C=1 pour les 6 dernieres valeurs ce qui evite le test et l'increment +1. C'est tout l'interret de l'addition de $90 au debut, avec un valeur moindre C serait toujours 0.. C'est super bien vu!
Et apres, vu qu'on est en BCD, on remarque qu'en decimal 90+40 = (1)30 et 01+40=41, cad que si on traite le 40 en $40 dans une addition BCD, on obtient le bon resulat. L'addition BCD est precisement ce que fabrique le 2eme DAA a partir de l'addition binaire du ADCA. Je vois mal comment faire plus court sans table.
Et si on voulait faire pareil mais pour extraire les deux denier digits decimaux d'un entier 8bits, on ferait comment: 45==>$45, 99==>$99, 100==>$00 (avec carry=1), 101==>$01 (carry=1), 199==>$99 (carry=1), 200==>$00 (carry=2 ?!? ya comme un bug). C'est peut-etre a rapprocher de l'algo de div par 8 de tomix car finalement c'est le reste code en BCD d'une division par 100, division dans laquelle les ROL sont remplaces par des addition avec carry BCD. Donc si on met des DAA, qu'on remplace les ROL par des ADC dans l'algo de tomix ca le fait, non ? quoi ? trop naif.. sans doute
sam.