Posté le 20/02/2008 à 18:46 Membre depuis le 15/03/2005, 3470 messages
Yep,

J'essai de multiplier deux registres entre eux ou un registre par lui mais sans passer par les OP ou les rom calls, mais c'est bien lent et long... Quelqu'un aurai une routine ?
Posté le 20/02/2008 à 19:45 Membre depuis le 01/12/2005, 413 messages
Hum, peut etre que ceci pourra t'aider, mais ca doit etre a peu pres ce que tu as fais:

multhl:
       ld e,l
multhe:
       ld l,0
       ld d,l
       ld b,8
multheLoop:
       add hl,hl
       jr nc,$F
       add hl,de
$$:    djnz multheLoop
       ret


C'est tire de la source de mirage os
Posté le 20/02/2008 à 19:58 Membre depuis le 15/03/2005, 3470 messages
Mouais j'vais voir, c'est à peu près ce que je fait et c'est un peu long je trouve.
Posté le 22/02/2008 à 22:07 Membre depuis le 23/08/2001, 664 messages
J'avais récupéré quelques routines d'Hideaki Omuro, de multiplication, division, etc. dont certaines sont optimisées en taille et d'autres en vitesse. Je vous les partage --> http://progg.free.fr/z80/

Par contre je n'ai pas retrouvé d'où elles venaient confus
Posté le 22/02/2008 à 22:47 Membre depuis le 15/03/2005, 3470 messages
happy Merci ! Avec ça je vais pouvoir bien avancer dans mon p'tit projet smile
Posté le 24/02/2008 à 12:09Edité par Davy8x le 24/02/2008 à 23:32 Membre depuis le 11/10/2004, 75 messages
Tu peux utiliser la parité aussi, par exemple pour a = b*c :
- a initialiser à 0;
- faire un échange pour que b > c;
Tant que c est différent de 0 :
- Si le bit de poids faible de c est non nul, tu ajoutes b à a, tu décrément c;
- Tu divise c par 2 et tu multiplies b par 2.

Ça donne une complexité en O(log2(c)).
Par contre ce qui est embêtant c'est qu'il faut faire attention à ce que le b ne déborde pas...
Posté le 24/02/2008 à 12:21 Membre depuis le 11/04/2007, 1076 messages
Ouais, ça c'est la multiplication Alexandrine, et normalement ça va très vite...
Il y a aussi un algo similaire pour l'opération puissance...
Posté le 29/05/2008 à 21:56 Membre depuis le 09/07/2003, 21783 messages
./6> en pratique quand c'est borné c'est plus rapide de faire un multiplication posée (comme à l'école primaire, tu multiplies le premier nombre par chaque bit du multiplieur (ou le tester avec du binaire...), du mets des 0 derrière, et après (pendant) t'additionnes tout ), non ? [ en binaire, ça a exactement la même complexité car tu fais un boucle sur les bits du plus petit, donc en log2(c). Enfin en vérité on va plutôt jusqu'à la borne ]

D'ailleurs je viens de lire un peu les routine du ./4, il fait comme ça