CodeForum.chCode ForenAssemblyThema: Arbeiten mit Float-Zahlen
Seiten: [1]
AntwortenDrucken
Autor Thema: Arbeiten mit Float-Zahlen  (Gelesen 1319 mal)
Kostja
Gast
« am: 04. Februar 2004, 14:49:02 »
ZitierenZitat Beitrag ändernÄndern Beitrag löschenLöschen

Hi,
kann vielleicht einer ein Stück Assembler-Programmcode posten dem man die Handhabung von Float-Zahlen entnehmen kann.
Ich habe nämlich folgendes Problem:
Wenn ich eine Float-Zahl in das EAX-Register schiebe und den Inhalt des Registers sofort wieder ausgebe (d.h. ohne Operationen auf dieses Register angewandt zu haben), dann funktioniert alles. Wenn ich aber z.B. eine Zahl zu dem Register dazu addiere, dann stimmt das Ergebnis nicht mehr.

Ich habe au??erdem irgendwo aufgeschnappt, das, es bei den alten Prozessoren eine FPU speziell für die Arbeit mit Float-Zahlen gab, diese soll bei den neueren Prozessoren in die CPU integriert worden sein. Ist das so richtig? Gibt es dann trotzdem spezielle Register und Operatoren für die FPU?
Moderator informieren   Gespeichert
Micev
oft hier
*
Offline Offline

Beiträge: 121



« Antworten #1 am: 04. Februar 2004, 19:00:21 »
ZitierenZitat

http://groups.google.ch/groups?hl=de&lr=&ie=UTF-8&oe=UTF-8&threadm=6mvrr2%24s4d%40cs1.FTA-Berlin.de&rnum=11&prev=/groups%3Fq%3Dfadd%2Bgroup:de.comp.lang.assembler.x86%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26group%3Dde.comp.lang.assembler.x86%26start%3D10%26sa%3DN
Moderator informieren   Gespeichert

My PC is My Home and I am the Lord of my Home.
Ich suche stets nach dem Guten in mir Selbst.
Niemand ist so Gut das nichts Schlechtes und niemand ist so Schlecht das nicht Gutes in ihm Steckt.
Je besser ich werde desto WERTVOLLER bin ICH.
HL
fast Mitglied
*
Offline Offline

Beiträge: 37


« Antworten #2 am: 09. Februar 2004, 14:38:04 »
ZitierenZitat

floating point zahlen musst du im coprocessor rechnen, da normale cpu register nur ganze zahlen enthalten können. diese befehle sehen etwa so aus: fmul, fidv, fadd, fsub etc..

hier sind ein paar erklärungen in englisch:

Fld real8 ptr [ebx]
This command loads an double real from ds:ebx into the register at wich the TOS points. Before this operation the TOS is decremented. So all registers are moved one position down and the last register (in our example Reg2) comes to position 0. The double real is saved in Reg2.

Fst real8 ptr [ebx]
This command is the contrary to Fld. It saves a double real at address ds:ebx. Only the TOS is not changed.

Fstp real8 ptr [ebx]
This is the same like Fst. But the TOS is incremented (the p stands for "pop"). After this operation the TOS points at the next register. Mostly after a saving of a number we don't need this number in a register again.

Fadd, Fsub, Fmul, Fdiv
It is complete the same like Add, Sub, Mul, Div. But the condition is that one operand must be the TOS (TOS --> ST(0)).
For example: Fadd ST(3),ST(0).

um das ganze in softice anzuschauen gibst du einfach "wf" ein.  TOS bedeutet top of stack.
Moderator informieren   Gespeichert
Seiten: [1]
AntwortenDrucken
CodeForum.chCode ForenAssemblyThema: Arbeiten mit Float-Zahlen
Gehe zu:  

 

Partner Sites

Werbung

TinyPortal v1.0.5 beta 1© Bloc