Division sur 32 bits

Signaler
Messages postés
6
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
11 mai 2005
-
Messages postés
6
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
11 mai 2005
-
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

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
16
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
Messages postés
6
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
11 mai 2005

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
6
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
11 mai 2005

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 ^^