Entwickler-Ecke
Algorithmen, Optimierung und Assembler - [ASM] Float Compare entsprechungen
Flamefire - Mi 02.09.09 11:00
Titel: [ASM] Float Compare entsprechungen
Ich stoße derzeit häufiger auf Floating point vergleiche.
Die sind immer nach diesem Schema:
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 - 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.
Flamefire - 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 - 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 ;-)
Flamefire - 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 ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!