Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
4 - Anregungen & Vorschläge

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Vorherige Nachricht  |  Nächste Nachricht 
 02. Inline-Assembler - FPU
Autor: RGH (---.hsi18.kabel-badenwuerttemberg.de)
Datum:   24.05.17 23:53

[s]RULES[/s] 02. Inline-Assembler - FPU

XProfans Inline-Assembler unterstützt nicht nur die wichtigsten CPU-Befehle, sondern auch die wichtigsten Befehle für den integrierten numerischen Coprozessor, die FPU.

Wichtigster Unterschied: Die FPU kann nicht direkt auf die CPU-Register zugreifen, sondern nutzt die 8 FPU-Register ST0 bis ST7, die als Stapel verwendet werden. ST0 ist der oberste Wert. (Eine andere gebräuchliche Schreibweise für die Register ist ST(0) bis ST(7), wobei statt ST(0) auch nur ST geschrieben werden kann. XProfan unterstützt auch diese Schreibweise.)

Beispiel: Mit FLD [nnnn] wird ein Fließkommawert von der angegebenen Adresse auf den Stapel gelegt. Was zuvor auf dem obersten Platz (ST0) lag, rutscht damit auf ST1, etc. Wichtig: Wenn alle 8 Stapelplätze belegt sind kann man keinen neuen Wert hinzufügen. Beim Versuch gibt es einen Fehler und der oberste Wert ist undefiniert.
Beim Verlassen der Routine muss der Stapel sich im gleichen Zustand wie zu Beginn befinden, sonst gibt es die seltsamsten Fehler. Also alles was draufgepackt wird, muss auch wieder heruntergenommen werden.

Schon die letzte XProfan-Version konnte mit dem Datentyp Single (32 Bit) Fließkommawerte an API-Funktionen übergeben. Literale und Float (Double) werden nach Single umgewandelt. XProfan erlaubt nur 32-Bit-Parameter bei API-Aufrufen. ASM-Funktionen werden genauso aufgerufen.
Laut Hilfe sollten auch Ergebnisse mit Fließkommawerten an Single-Variablen direkt übergeben werden können. Wie ich feststellen musste, hat das aber tatsächlich nicht funktioniert. BUGFIX in X4: Jetzt geht es! Will man das Ergebnis direkt an eine Double-Variable zuweisen oder in einer verschachtelten Funktion verwenden, ist weiterhin Double() einzusetzen.

BTW: Wenn auch die Werte als Single übergeben und zurückgegeben werden: Intern nutzt die FPU immer die volle Bitbreite zum Rechnen.

Hier ein erstes Beispiel, eine einfache Multiplikation zweier 32-Bit-Floats (Single):

 CLS
 Set("AsmMode", 2)
 
 ASM "Mul", 2
   JMP Start
 Ergebnis:
   DD 0
 Start:
   FLD Par1          // Par1 nach st0
   FLD Par2          // Par2 nach st0, Par1 verschiebt sich nach st1
   FMUL              // st0 = st1 * st0, beide Werte werden vom Stack genommen und das Ergebnis auf den Stack gelegt
   FSTP [Ergebnis]   // st0 nach Ergebnis und vom Stack entfernt
   MOV EAX,[Ergebnis]
 ENDASM
 
 Set("Decimals",6)
 Var single A = 2.25
 Var single B = 3.50
 Var single C = Mul(A, B)
 Print C
 WaitInput
 End
 

Man hätte das Ergebnis z.B. also auch mit "Print Double(Mul(A, B))" ausgeben können.

Offizielle Homepage: http://www.xprofan.de
Der neue PROFAN-FAN-SHOP: http://www.spreadshirt.de/shop.php?sid=9330
Das kostenlose Kartenspiel: http://www.rgh-soft.de/sprace/sprace.htm

 Foren-Liste  |  Alle Antworten   Neuerer Beitrag  |  Älteres Thema 

 Beiträge Autor  Datum
 Vorschau auf XProfan X4 - Stand: 25.05.2018  Neu
RGH 23.05.17 23:09 
 01. Inline-Assembler - CPU  Neu
RGH 23.05.17 23:20 
 01.1 Unterstützte Befehle  Neu
RGH 23.05.17 23:34 
 Beispiel: Sprünge und Strings  Neu
RGH 23.05.17 23:56 
 Beispiel: Windows-API  Neu
RGH 24.05.17 00:00 
 Beispiel: Fibonacci  Neu
RGH 24.05.17 00:05 
 Beispiel: Stringbefehl mit REP  Neu
RGH 24.05.17 00:13 
 02. Inline-Assembler - FPU  Neu
RGH 24.05.17 23:53 
 02.1 Unterstützte FPU-Befehle  Neu
RGH 25.05.17 00:03 
 Beispiel: Vergleiche mit Fließkommazahlen  Neu
RGH 25.05.17 00:14 
 Beispiel: Rechnen mit Double-Werten  Neu
RGH 25.05.17 00:17 
 03. JSON  Neu
RGH 25.05.17 00:29 
 Beispiel 1  Neu
RGH 25.05.17 00:37 
 Beispiel 2  Neu
RGH 25.05.17 00:53 
 Beispiel 3: JSON("Hash", ...)  Neu
RGH 23.07.17 21:58 
 04. SQLite  Neu
RGH 25.05.17 23:49 
 Beispiel zum Testen  Neu
RGH 25.05.17 23:51 
 05. Datenbankexport in XML und JSON  Neu
RGH 26.05.17 13:12 
 06. ZIP-Archive mit XProfan  Neu
RGH 26.05.17 14:02 
 07. Containerfunktion COM()  Neu
RGH 26.05.17 21:31 
 97. Erweiterte Funktionen und Befehle  Neu
RGH 27.05.17 00:09 
 99. Bugfixes  Neu
RGH 27.05.17 00:15 
 08: Mailempfang mit SMTP()  Neu
RGH 16.08.17 23:12 
 09: Eigene Containerfunktionen  Neu
RGH 06.09.17 23:40 
 10. CallBack-Prozedur für Move("...ToList", ...)  Neu
RGH 02.11.17 21:01 
 Der neue XProfed  Neu
RGH 11.02.18 23:02 
 XProfan X4 ist fertig  Neu
RGH 25.05.18 22:58 


 Dieses Thema ist geschlossen. 

phorum.org