Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Coprozessor verwenden (asm)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 30.04.2006, 20:23    Titel: Coprozessor verwenden (asm) Antworten mit Zitat

Hallo,
wie können Berechnungen mit dem Coprozessor durchgeführt werden? Ich versuchte es mit den üblichen Befehlen; es erschien keine Fehlermeldung aber funktionierte auch nicht. Wie muss man da vorgehen?

Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 30.04.2006, 21:36    Titel: Antworten mit Zitat

Hi,
erste Versuche eines Tuts habe ich hier:
http://volta.freebasic.de/asku_fpu.html

eine Referenz:
http://volta.freebasic.de/asm_ref/FPUBefehle.html

alles noch nicht fertig, aber evtl. hilft es dir.
Gruß Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 30.04.2006, 22:12    Titel: Antworten mit Zitat

Genial, danke! lächeln
Werde mich damit mal weiter beschäftigen. Ausgerechnet auch ein Zinsprogramm, das musste ich ja kürzlich machen lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 01.05.2006, 10:09    Titel: Antworten mit Zitat

Hilfee... Habe das mal versucht, doch es kommt immer etwas Unmögliches raus:

Code:

dim A as double
dim B as double
input "Zahl"; A
input "Zahl"; B
dim C as double

asm
    fld dword ptr [A]
    fld dword ptr[B]
    fdiv st(0), st(1)
    fst dword ptr[C]
   
end asm

print C

sleep


Ich versuchte auch mit dword, qword und double/single usw. aber es geht nicht traurig Ich möchte ganz einfach dividieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 01.05.2006, 10:21    Titel: Antworten mit Zitat

Code:
dim A as single
dim B as single
dim C as single

input "Zahl"; A
input "Zahl"; B

ASM
    fld dword ptr [_A]
    fdiv dword ptr [_B]
    fstp dword ptr [_C]
END ASM

print C

sleep

Den Quellcode habe ich bekommen, als ich Freebasic das Parameter "-r" übergeben habe und den Asmebler Code vereinfacht habe.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 01.05.2006, 10:34    Titel: Antworten mit Zitat

Super! Ach so, fstp...
aber wieso [_A]?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 01.05.2006, 12:06    Titel: Antworten mit Zitat

Hi,
Single - Variable haben 32Bit (4 - Byte) werden über dword Ptr geladen,
Double - Variable haben 64Bit (8 - Byte) werden über qword Ptr adressiert.
Code:
dim A as double
dim B as double
input "Zahl"; A
input "Zahl"; B
dim C as double

asm
    fld qword Ptr [A]
    fld qword Ptr [B]
    fdiv st(0), st(1)
    fst qword ptr[C]
end asm

print C


[_A] so kennzeichnet FB Variable die du im Quelltext verwendest (so nicht in den Asm-Befehlen verwenden!)
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 01.05.2006, 12:34    Titel: Antworten mit Zitat

Zur Infomation:
Ich bin so frei und verwendete diesen Code für Wikibooks:
http://de.wikibooks.org/wiki/FreeBasic:_ASM_Beispiele
Die Struktur lässt noch zu wünschen übrig, wer will kann das aber gerne ändern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 01.05.2006, 13:39    Titel: Antworten mit Zitat

Ist mein Beispiel sogar dort verewigt lächeln

Zu den Variablennamen, das muss eine Eigenschaft sein die nur für denCoprozessor gilt, oder? Ansonsten in asm funktioniert bei mir immer das nach dem Beispiel mov eax, [A] (nicht [_A]. Darum wäre ich auch nie auf das gekommen lächeln Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 01.05.2006, 15:09    Titel: Antworten mit Zitat

Hi,
Das ist ja interessant:
Code:
'$include: "vbCompat.bi"
Function Pi1 As Double
   Function=4*Atn(1)
End Function

Function Pi2 As Double
   Function=4#*Atn(1#)
End Function

Sub ShowIt(byVal Titel As String, byVal Wert As Double)
  Const el=21
  ?String$(el-Len(Titel), " "); Titel; Format$(Wert, "0." &String$(25, "0"))
End Sub

Function PI As Double
  asm  fldpi                     'pi -> st(0)
  asm  fstp qword ptr [function] 'St(0) -> PI
End Function

#Define Pi3 4*Atn(1)
#Define Pi4 4#*Atn(1#)
Const Pi5=4*Atn(1)
Const Pi6=4#*Atn(1#)
ShowIt("Function 4*Atn(1)=", Pi1)
ShowIt("Function 4#*Atn(1#)=", Pi2)
ShowIt("Define 4*Atn(1)=", Pi3)
ShowIt("Define 4#*Atn(1#)=", Pi4)
ShowIt("Const 4*Atn(1)=", Pi5)
ShowIt("Const 4#*Atn(1#)=", Pi6)
ShowIt("Pi=", Pi)
Sleep
Obwohl es eigentlich nicht viel Sinn macht, Zahlen unterschiedlicher
Genauigkeit miteinander zu vermischen, ist das Ergebnis erstaunlich..
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 01.05.2006, 15:53    Titel: Antworten mit Zitat

Zitat:
... Zahlen unterschiedlicher Genauigkeit miteinander zu vermischen , ist das Ergebnis erstaunlich.
?? alle Zahlen sind doch als double angelegt, also gleich.

ergänze einmal mit:
Code:
....

Function Pi7 As Single
  asm  fldpi                     'pi -> st(0)
  asm  fstp dword ptr [function] 'St(0) -> PI
End Function
ShowIt("Pi7=", Pi7)
?pi
?pi7
Sleep

Gruß Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 01.05.2006, 15:58    Titel: Antworten mit Zitat

Hi volta,
du hast mich falsch verstanden|ich habe mich falsch ausgedrückt:
Die FPU-Function liefert offensichtlich noch zwei Stellen hinter dem Komma mehr, als die Double-Berechnungen.
Damit liefert sie als einzige mehr Stellen und das meinte ich mit unterschiedlicher Genauigkeit
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 01.05.2006, 16:25    Titel: Antworten mit Zitat

ach so, ok! zwinkern
Mir ist aufgefallen, das einfaches ?pi eine 2 Stellen kürzere Ausgabe macht, aber alle Werte sind, wie auch immer berechnet, als double gleich.
Gruß Vota
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz