PureBasic

Forums PureBasic
Nous sommes le Mer 26/Juin/2019 5:36

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
 Sujet du message: FPU : multiplier par 2
MessagePosté: Sam 02/Jan/2010 21:45 
Hors ligne

Inscription: Dim 11/Mai/2008 7:27
Messages: 61
J'ai le code suivant :
Code:
        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:
        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 ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: FPU : multiplier par 2
MessagePosté: Sam 02/Jan/2010 22:13 
Hors ligne

Inscription: Dim 11/Mai/2008 7:27
Messages: 61
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:
xnew = (x2) - (y2) + x0
ynew = 2 * (x*y) + y0
x = xnew
y = ynew


Deja je peux le remplacer par :
Code:
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:
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:
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: FPU : multiplier par 2
MessagePosté: Sam 02/Jan/2010 23:14 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4208
Localisation: Arras, France
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 :)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: FPU : multiplier par 2
MessagePosté: Sam 02/Jan/2010 23:23 
Hors ligne

Inscription: Dim 11/Mai/2008 7:27
Messages: 61
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 :)


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye