Division sur 32 bits

biboucat Messages postés 6 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 11 mai 2005 - 8 mai 2005 à 23:36
biboucat Messages postés 6 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 11 mai 2005 - 9 mai 2005 à 21:31
Bonsoir tout le monde, je suis à la recherche dans le cadre d'un projet d'un algorithme permettant de faire des divisions avec un diviseur et dividende eux meme sur 32 bits. Je pense que beaucoup de gens ont été confronté à ce probleme, donc quelqu'un aura peut etre la solution.

Merci bcp ca me permettra d avancer dans mon projet.

4 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
9 mai 2005 à 18:13
salut,

ben, il faut utiliser l'instruction DIV...sinon, il existe un bouquin
http://www.dunod.com/pages/ouvrages/ficheouvrage.asp?Pro_Code_GPE=581689

ShareVB
0
biboucat Messages postés 6 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 11 mai 2005
9 mai 2005 à 19:55
Oui mais le pb est que le motorola 68000 gere que des registres 32 bits max donc pour l instruction div, il est spécifié que ca marche uniquement sur un word: le diviseur doit avoir au maximum 16 bits et la valeur a diviser peut elle etre sur 32 bits
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 mai 2005 à 20:21
Si le but est seulement pédagogique tu as un algorithme très simple:



on calcule a / b:



quotient := 0;

ttq(a > b) faire

quotient++;

a := a-b;

fait

le reste de la division est dans a



Par contre au niveau de la performance c'est bien entendu médiocre
0
biboucat Messages postés 6 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 11 mai 2005
9 mai 2005 à 21:31
Bon pour la multiplication j'ai trouvé comment faire. En fait comme je sais qu'on va multipler par 100 le registre de 32 bits, je decompose en puissance de 2, je fais les décalages correspondants(100 = 64 +32 +4) de 6 5 et 2 et j additionne le tout.
On obtient donc :

Ici la valeur a multiplier par 100 est dans D1

MOVE.L D1,D2
MOVE.L D2,D3
MOVE.L D3,D4
LSL
.L #
6,D2 *multiplication par 64
LSL
.L #
5,D3 *multiplication par 32
LSL
.L #
2,D4 *multiplication par 4
ADD.L D4,D3
ADD.L D3,D2 *D2 contient le resultat de la multiplication par 100

Ca m a l'air assez efficace car on fait la multiplication en 8 instructions mais sans doute peut on mieux faire... Quant a la division j ai pensé a la soustraction mais c vraiment trop barbare comme methode, je vais voir si je peux trouver un truc un peu plus optimisé. J'espere que cette technique pour la multiplication pourra aider des gens ^^
0
Rejoignez-nous