Prob simple en assembleur
mimi
-
Bouddha Messages postés 4 Statut Membre -
Bouddha Messages postés 4 Statut Membre -
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
A voir également:
- Prob simple en assembleur
- Iphone 14 simple - Guide
- Simple pdf - Télécharger - PDF
- Simple ocr - Télécharger - Bureautique
- Simple file locker - Télécharger - Sécurité
- Simple comic - Télécharger - Vie quotidienne
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.
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.
Mais on me demande une sortie en 32 bits...
Comment agencer ces instructions et quel en est le nbre pour que le prog soit optimisé ?
- 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
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