Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mi 02.09.09 11:00 
Ich stoße derzeit häufiger auf Floating point vergleiche.
Die sind immer nach diesem Schema:
ausblenden Quelltext
1:
2:
3:
4:
FCOMP ST(1)
FSTSW AX
TEST AH,41//oder anderer Wert
JE XXX/JNZ XXX

Kann mir jemand sagen, bei welchen Bedingungen das AH Register welchen Wert annimmt
oder ne art Liste, wie:

JPE 44 : X<>Y (heißt also bei TEST AH,44 und anschließendem JPE wird bei X<>Y gesprungen)

bräuchte es für die häufigsten vergleiche: >,<,>=,<=,=
Danke, falls sich jemand die Zeit nimmt
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 03.09.09 23:18 
IIRC sind die Flags der FPU identisch den Flags der CPU im Flagregister angeordnet. Ein SAHF sollte also IIRC den Trick tun, damit man wie bei normalen Vergleichen arbeiten kann.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Do 03.09.09 23:42 
nja aber bei den vergleich die ich gesehen hab kommt immer so eine o.g. anweisungsfolge

also immer
TEST AX,Z
JY XXX

das was ich weiß ist, dass ein
Test AX,41
JPE XXX
gesprungen wird, wenn die flps <> sind
enyaw_ecurb
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 16



BeitragVerfasst: Fr 04.09.09 00:23 
Verstehe ich das richtig: Es geht dir nicht darum die Vergleiche selbst zu schreiben (dann könntest du nämlich wie BenBe meinte, einfach die normalen Conditional-Jumps benutzen), sondern du hast sie als wahrscheinlich disassemblierten Code vorliegen und willst sie einfach nur lesen?

In erstem Fall kann ich dir die normalen Manuals der Hersteller (Intel, Amd) empfehlen. Dort wirst du auch schnell auf die Anweisung "fcomip" stoßen, die dir das lästige "fstsw ax, sahf..." erspart - je nach Anwendung kann das einiges an Laufzeit ausmachen.

Im zweiten Fall kann ich dich auch nur auf die Manuals verweisen. Dort steht drin, welche Bits gesetzt sind, du musst dir jetzt nur noch ausrechnen, welchem Wert sie entsprechen. Sorry, auch wenn das fies klingt, die Arbeit nehme ich dir trotz deiner Bitte nicht ab ;-)

_________________
--> lostindiversity.junetz.de <--
Flamefire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Fr 04.09.09 00:30 
also es ist der 2. fall
ich will einfach nur wissen, was da gemacht wird
und klar könnte ich das aus irgendwelchen manuals entnehmen...
aber z.b. das JPE ist da doch schon etwas komplizierter zu erkennen.

darum wäre es schön gewesen, wenn jmd da ne liste hat/kennt/machen kann
wenn nicht auch nicht so schlimm...mach ich halt weiter wie bisher: bei nem neuen vergleich gucken was wann passiert ;-)