Prob simple en assembleur
Soient 2 nbres entiers non-signés sur 16 bits. Pour effectuer leur multiplication, il n'est pas nécesaire d'utiliser l'instruction MUL, a condition de décomposer un des 2 facteurs en puissances de 2.
Ex : 147 * 73 = 128 * 73 + 16 * 73 + 2* 73 + 1 * 73
La question est : Comment faire un prog en assembleur qui effectue ce type de multiplication (sans utiliser MUL !), et qui donnera en résultat un entier en 32 bits
Ex : 147 * 73 = 128 * 73 + 16 * 73 + 2* 73 + 1 * 73
La question est : Comment faire un prog en assembleur qui effectue ce type de multiplication (sans utiliser MUL !), et qui donnera en résultat un entier en 32 bits
1 réponse
-
La multiplication en binaire s'effectue comme en décimal, et d'autant plus simple que les chiffres possibles du multiplicateur sont "1" (on tient compte de la valeur) et "0" (on n'en tient pas compte, et on décale à gauche du nombre de "0" ; en décimal, on met des ".").
Application :
---------------- 1 0 0 1 0 0 1 1 = 147
---------------- 0 1 0 0 1 0 0 1 = 73
----------------------------------
---------------- 1 0 0 1 0 0 1 1 (a)
-------- + 1 0 0 1 0 0 1 1 - - - <== shift gauche 3 positions
----------------------------------
---------- 1 0 1 0 0 1 0 1 0 1 1 (b)
-+ 1 0 0 1 0 0 1 1 - - - - - - <== shift gauche 6 positions
----------------------------------
---- 1 0 1 0 0 1 1 1 1 0 1 0 1 1 (c) = 10731
Les résultats (a), (b), (c) sont les cumuls (accumulateur initialisé à 0) obtenus à chaque "1" du multiplicateur).
C'est de cette manière que fonctionne le circuit "hard" pour la multiplication d'entiers.
-
-
@BouddhaDésolé, mes connaissances en assembleur(s) sont des plus réduites. Il est toutefois évident que le résultat de la multiplication de 2 nombres de 16 bits peut donner un nombre de 32 bits (2 registres consécutifs). L'algorithme est de la forme :
- faire A = 0
- boucle i de 0 à 15
si bit_multiplicateur[0] = 1 alors
décaler à gauche de "i" positions le multiplicande
cumuler dans A
fin_si
- fin_boucle
-
@MardenUn grand merci
-
@BouddhaJ'ai lu le tutoriel disponible sur ce site et il est très bien fait !
Maintenant, quand je regarde ton algorithme, je comprends mieux mais je ne sais pas quelles instructions utiliser en pratique.
C'est la boucle qui me dérange surtout...
C'est la mise en forme qui me pose des problèmes également
Si toi ou qqn d'autre ^pourrait m'en dire encore plus, ce serait vraiment sympa
-