Logicielsmoto.com

Nous sommes le 26 Aoû 2019, 05:50

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 104 messages ]  Aller à la page Précédente  1 ... 3, 4, 5, 6, 7
Auteur Message
 Sujet du message:
MessagePosté: 01 Sep 2006, 09:24 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1111
Localisation: Brest
Prehisto a écrit:
Petit indice: On opère bien avec l'accumulateur A et non l'accumulateur B, car une des instructions utilisées n'existe pas pour B.


Ah j'avais pas bien tout lu.. il n'y a pas bcp d'instruction ne s'executant que sur A et donc vu le contexte il faut forcement utiliser le DAA.. mais je vois pas comment car si A=#12 (decimal) en entree, apres le DAA on a A=#$12 (hexa) = #18 (decimal) et ca fait pas un truc proche du code ASCII du 'C' = $43..

sam (...il doit y avoir un truc)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Sep 2006, 10:11 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 205
Localisation: Planete Zorg (31)
Je pense qu'il utile DAA couplé avec un INC sous condition. Par contre, je ne sait pas si ADD est utilisé pour ajouter $#30. :roll:



Jasz qui cherche aussi. ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Sep 2006, 10:36 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1111
Localisation: Brest
jasz a écrit:
Je pense qu'il utile DAA couplé avec un INC sous condition. Par contre, je ne sait pas si ADD est utilisé pour ajouter $#30.


A mon avis le ADD apparait au debut car pour que DAA marche il faut que l'instruction precedente positionne H est inc je ne suis pas certain qu'il le fait.. Bon alors que donne
Code:
    ADDA #$30
    DAA   * A = $3x ou $4x suivant qu'au debut il est>10
    BITA  #$40
    BEQ   *+1
    INCA

Mais je ne vois pas de gain a priori: il y a un saut et le "BITA #$40" ne me plait pas.

sam.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Sep 2006, 10:56 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
Vous êtes sur la bonne voie avec le DAA et le ADDA. Mais il n'y a pas de branchement au final.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Sep 2006, 11:12 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 205
Localisation: Planete Zorg (31)
Prehisto a écrit:
Mais il n'y a pas de branchement au final.

Oui, parce que, soit j'ai bon pour des valeurs comprises entre 0 et 9 soit pour des valeurs comprises entre A et F. Mais pas les deux :(

Donc, il n'y a pas de CMP ni de branchement sous condition.

Excellent ton trip, ça nous fait courrir un peu. ;)


Dernière édition par jasz le 01 Sep 2006, 11:18, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Sep 2006, 11:18 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
Indice: le programme commence bien par un ADDA et l'instruction DAA est utilisée deux fois.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Sep 2006, 11:35 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
Je vous donne la réponse? Parce que c'est vrai que celle-là est un peu trop casse-tête. Et c'est comme les mots croisés, on aime bien, mais on ne va pas non plus y passer la journée...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Sep 2006, 13:19 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 205
Localisation: Planete Zorg (31)
Ok, j'ai pas mieux :(


on devrait avoir un truc comme ça non?!

Code:
ADDA #$30
DAA
xxx
DAA


Mais je doute sur le #$30 du ADD et je pense à une opération logique AND, OR, EOR car je voie mal autre chose en deux octets. ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Sep 2006, 14:07 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
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?...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 01 Sep 2006, 14:39 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1111
Localisation: Brest
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 02 Sep 2006, 08:20 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 205
Localisation: Planete Zorg (31)
Bien vu effectivement.

Il fallait aussi connaitre la particularité conditionnelle de ADCA. Sympa! :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 02 Sep 2006, 12:03 
Hors ligne

Inscription: 27 Avr 2006, 09:04
Messages: 101
L'astuce est tres sympa. Merci Prehisto.
Ca permet de se passer d'une table et ca coute tres peu de cycles en plus.

a+
Seg.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: gagner des cycles machines
MessagePosté: 03 Avr 2019, 14:32 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1111
Localisation: Brest
Et hop, un petit déterrage sur ce sujet car en creusant des trucs pour CoCo et OS9 je suis tombé sur >>ce blog<< qui me semble contenir des infos utiles, donc j'en fait part. La plupart des codeurs habitués connaissent déjà ces trucs, mais si un débutant ou un codeur rouillé passe par là, il sera heureux de relire ce blog je pense. :bien:

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: gagner des cycles machines
MessagePosté: 03 Avr 2019, 16:46 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
Il est toujours bon de rappeler les principes d'optimisation ;)

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 104 messages ]  Aller à la page Précédente  1 ... 3, 4, 5, 6, 7

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com