Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 30.04.2006, 20:23 Titel: Coprozessor verwenden (asm) |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 30.04.2006, 22:12 Titel: |
|
|
Genial, danke!
Werde mich damit mal weiter beschäftigen. Ausgerechnet auch ein Zinsprogramm, das musste ich ja kürzlich machen  |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 01.05.2006, 10:09 Titel: |
|
|
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 Ich möchte ganz einfach dividieren. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 01.05.2006, 10:21 Titel: |
|
|
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 |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 01.05.2006, 10:34 Titel: |
|
|
Super! Ach so, fstp...
aber wieso [_A]? |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.05.2006, 12:06 Titel: |
|
|
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 |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 01.05.2006, 13:39 Titel: |
|
|
Ist mein Beispiel sogar dort verewigt
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 Danke! |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 01.05.2006, 15:09 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.05.2006, 15:53 Titel: |
|
|
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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 01.05.2006, 15:58 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.05.2006, 16:25 Titel: |
|
|
ach so, ok!
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 |
|
 |
|