Multiplication sans MULU motorola 68000

sliks Messages postés 1 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 23 mai 2009 - 23 mai 2009 à 15:44
Arnaud.f123 Messages postés 23 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 13 novembre 2013 - 26 août 2009 à 23:51
salut voila ma question comment faire
la Multiplication de deux chiffres de 16 bits le résultat sur 32 bits (non signé) sans l’instruction MULU
pouvez vous m'aidez a écrire un programme pour le motorola 68000 qui fait ca
merci d'avance

3 réponses

Arnaud.f123 Messages postés 23 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 13 novembre 2013
20 août 2009 à 08:42
Salut,

Me voila revenu 20 ans en arrière lorsque je programmais mon Amiga.
Il va donc falloir que je creuse dans ma petite tête.


Pour multiplier x par y sans utiliser MULU, tu peux peut-être faire une boucle de type :

z=y
x=x-1
Deb:
x=x-1
y=y+z
si x<>0 alors aller en deb

Je te laisse le soin de transformer ça en instructions 60xxx.


Mais au fait pourquoi ne veux-tu pas utiliser MULU ?
Sur quoi programmes-tu ?


A+


Arnaud
0
Arnaud.f123 Messages postés 23 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 13 novembre 2013
21 août 2009 à 17:15
Re-Bonjour,

Voici une autre méthode plus optimisée.

On cherche à multipliser D1 avec D2 résultat dans D3

D3=0
bcl :
si (bit0 de D1)=1 alors
D3=D3+D2
fin si
Decaler d'un bit vers la droite D1
Decaler d'un bit vers la gauche D2
si D1 non nul alors goto Bcl
fin:

Si tu le codes en 68000 je veux bien voir le source.
A+

Arnaud
0
Arnaud.f123 Messages postés 23 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 13 novembre 2013
26 août 2009 à 23:51
Et enfin en 68000
d3 = d1 * d2




run:

'on charge des valeurs 
move.w	#10,d1
move.w	#20,d2

'on s'assure qu'on travaille que sur des 16 bits
and.l	#$0000FFFF,d1
and.l	#$0000FFFF,d2
'on met a 0 le registre de resultat
clr.l	d3

Boucle:
btst	#0,d1
beq	Suivant
'le bit0 de d1 n'est pas a 0 donc on ajoute d2 a d3
add.l	d2,d3

Suivant:
'et on decale d1 de 1 bit vers la droite
lsr.l	#1,d1
'on multiplie d2 par 2 en le decalant d'1 bit vers la gauche
lsl.l	#1,d2


cmpi	#0,d1
'on recommence tant que d1 n'est pas a 0
bne	Boucle

rts


Arnaud
0
Rejoignez-nous