Seite 1 von 1

Assembler Fehler: FIMUL - invalid operand

Verfasst: 15.12.2006 11:39
von NicTheQuick
Bin eben auf keinen wirklichen Bug gestoßen, aber vielleicht will man es ja
ändern.
Folgender Code:

Code: Alles auswählen

Structure RTP3D ;Struktur für 3D-Vektoren oder Punkte im 3D-Raum
  x.d
  y.d
  z.d
EndStructure

Macro RT_SMul(a, s)
  a\x * s : a\y * s : a\z * s
EndMacro

Define Ray.RTP3D, Light.RTP3D

Ray\x = 1
Ray\y = 1
Ray\z = 1

Light\x = -1
Light\y = -1
Light\z = -1

RT_SMul(Ray, Light)
Lässt bei mir folgendes Fensterchen aufpoppen:
Assembler Fehler
PureBasic.asm [67]:
FIMUL dword v_Light
error: invalid operand.
Eigentlich hab ich nur aus Versehen das falsche Makro verwendet, aber
danach dachte ich, dass dann eher ein Fehler von PB und nicht von FASM
kommen müsste.
Wenn man statt dem Light ein @Light schreibt, sollte es ja eigentlich auch
funktionieren, auch wenn das ziemlich unsinnig wäre und man nichts mit
dem Ergebnis anfangen könnte. Und wenn man in der RTP3D-Struktur
überall Longs statt Doubles einsetzt, funktioniert auch alles. Mit Doubles
allerdings nicht.

Als Bug kann man es wohl nicht richtig bezeichnet, weil es durch einen
Fehler von mir entstanden ist, aber vielleicht ist es eine Sache, die Fred
trotzdem ändern will.

Verfasst: 15.12.2006 13:44
von RSBasic
Sry dass ich keine Antwort geben kann, aber warum ist mein Name im Source vorhanden? Gibt es einen bestimmten Grund dafür? :mrgreen:

Re: Assembler Fehler: FIMUL - invalid operand

Verfasst: 15.12.2006 13:46
von DrShrek
NicTheQuick hat geschrieben:....t, aber vielleicht ist es eine Sache, die Fred
trotzdem ändern will.
@NicTheQuick, schreibst Du bitte den Bug im englischen Board?

Verfasst: 15.12.2006 13:49
von Kaeru Gaman

Verfasst: 15.12.2006 14:27
von Helle
Ich würde es schon als richtigen Bug bezeichnen; verwunderlich ist nur, das bisher niemand ihn bemerkt hat (oder doch, und derjenige sucht heute noch :mrgreen: ).
Auswertung des Assembler-Outputs:
Grund für die Fehlermeldung sind die fehlenden Brackets [], die bei Befehlen ohne Register-Beteiligung von FAsm zwingend erwartet werden:

Code: Alles auswählen

Light.d

!fimul dword [v_Light]   ;Richtig
!fimul dword v_Light     ;Falsch

;siehe auch:
!imul ebx,dword v_Light        ;Richtig; ich würde trotzdem [v_Light] schreiben!
!imul dword v_Light            ;Falsch 
!imul dword [v_Light]          ;Richtig
Das "imul ebx,v_Light" stammt übrigens aus der Version mit Light als Long.

Gruss
Helle

Verfasst: 15.12.2006 14:35
von DrShrek
Ich habs als BUG reported!