FPU : multiplier par 2

Pour discuter de l'assembleur
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

FPU : multiplier par 2

Message par ker2x »

J'ai le code suivant :

Code : Tout sélectionner

        EnableASM
         ;xnew = (x2) - (y2) + x0
        	FLD	 x2
        	FSUB y2
	        FADD x0
	        FSTP xnew
	        ;ynew = 2 * (x*y) + y0
	        FLD x
	        FMUL y
	        FLD 2
	        FMULP
	        FADD y0
	        FSTP ynew
	      DisableASM
FLD 2 est invalide.
Remplacer "FLD 2 FMULP" par "FMUL 2" est invalide aussi.
Je ne trouve pas comment faire ...

Comme dans ce cas la je multiplie que par 2, j'ai fait simple :

Code : Tout sélectionner

        EnableASM
         ;xnew = (x2) - (y2) + x0
        	FLD	 x2
        	FSUB y2
	        FADD x0
	        FSTP xnew
	        ;ynew = (x+x) * y + y0
	        FLD x
	        FADD x
	        FMUL y
	        FADD y0
	        FSTP ynew
	      DisableASM
        
Mais je je voulais multiplier par 10... ou plus ... ca deviendrait vite chiant :)
Une idée ?
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Re: FPU : multiplier par 2

Message par ker2x »

Tiens au passage j'ai trouvé une optimisation, un peu casse tete mais ca marche
Je me dis qu'on pourrai faire mieux par contre ...

Le code PB :

Code : Tout sélectionner

xnew = (x2) - (y2) + x0
ynew = 2 * (x*y) + y0
x = xnew
y = ynew
Deja je peux le remplacer par :

Code : Tout sélectionner

xnew = (x2) - (y2) + x0
y = 2 * (x*y) + y0
x = xnew
Il me restai a zapper le "x = xnew"
Et je ne pouvais bien sur pas faire

Code : Tout sélectionner

x = (x2) - (y2) + x0
y = 2 * (x*y) + y0
car j'ai besoin de l'ancien x pour calculer y.
Ce qui au final fut simple, j'ai empilé x 2 fois avant de commencer mes calculs :)

Le code ASM :

Code : Tout sélectionner

FLD   x     ; empiler x sur st0 -> st0 = x
FLD   st0  ; rempiler st0 -> st1 = st0 = x
FLD	x2   ; empiler x2 sur st0
FSUB y2   ; st0 = x2 - y2
FADD x0   ; st0 = (x2 - y2) + x0
FSTP x     ; x = st0 et depile st0
; A ce point la st0 et st1 = ancienne valeur de x que j'ai empilé au debut
FADDP     ; st0 = st0 + st1 (soit ancienX + ancienX)
FMUL y    ; st0 = ancienX + ancienX * y
FADD y0  ; st0 = ancienX + ancienX * y + y0
FSTP y    ; y = st0
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: FPU : multiplier par 2

Message par djes »

L'assembleur utilisé par Pure est FASM; il y a de la doc un peu partout sur le net, dont bien sûr sur le site officiel : http://flatassembler.net/docs.php?article=manual#2.1.13
Bon courage à toi en tous cas, tu as l'air bien parti :)
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Re: FPU : multiplier par 2

Message par ker2x »

djes a écrit :L'assembleur utilisé par Pure est FASM; il y a de la doc un peu partout sur le net, dont bien sûr sur le site officiel : http://flatassembler.net/docs.php?article=manual#2.1.13
Bon courage à toi en tous cas, tu as l'air bien parti :)
Oui, et j'utilise ce site en reference des instructions : http://siyobik.info/index.php?module=x86
C'est p'tet pas le complet (j'en sais rien), mais il est lisible :)
Répondre