Diverse Assemblerinstruktionen gesucht!



  • hm,viel einfacher gehts mit CPUID ;), damit kann sehr viel herausfinden.
    Dazu entweder auf die Seiten der Hersteller nach spezifikationen schauen oder diese Seite angucken:
    http://www.sandpile.org/ia32/cpuid.htm
    Anstandshalber sollte man auch testen ob die CPU CPUID unterstützt, imho aber gibts die CPUID seit Pentium I Zeiten (und ja, es ist auch für AMD verfügbar und noch ein paar Prozesooren mehr 😉 )



  • @audacia
    Ich code nur für Windows, auf Linux und co pfeife ich mit genuss, das steht aber nicht zur debatte.

    @CDW
    Die CPU habe ich vorher mit CPUID abgetastet um den vendor-name zu bekommen sowie die zusatzspezifikationen wie unterstützte SIMD-Techniken.

    Aber wenn die CPU dies unterstützt bedeutet es noch lange nicht, das Windows95 SSE2 unterstützt 😉 Deshalb muss ich das vorher abfragen ob auch das Betriebssystem diese SIMD-Technik unterstützt!

    Kurz: CPU und OS muss diese SIMD-Technik unterstützen, wenn die CPU das unterstützt aber das OS nicht, haste den Salat.



  • Der Willi, Der Chef! schrieb:

    @audacia
    Ich code nur für Windows, auf Linux und co pfeife ich mit genuss, das steht aber nicht zur debatte.

    Auch auf Windows gibt es andere Compiler als MSVC.

    Der Willi, Der Chef! schrieb:

    Aber wenn die CPU dies unterstützt bedeutet es noch lange nicht, das Windows95 SSE2 unterstützt 😉

    Bist du sicher, daß das OS da überhaupt eine Rolle spielt? Außerdem glaube ich nicht, daß, wenn der Opcode nicht unterstützt wird, eine Exception geschmissen wird, eher schmeißt Windows dein Programm aus dem Speicher.

    Moritz



  • audacia schrieb:

    Bist du sicher, daß das OS da überhaupt eine Rolle spielt? Außerdem glaube ich nicht, daß, wenn der Opcode nicht unterstützt wird, eine Exception geschmissen wird, eher schmeißt Windows dein Programm aus dem Speicher.

    Ja, unter Win98SE wird SSE unterstützt aber unter Win98 nicht, hab ich dort schon getestet, exceptions werden immer geworfen wenn was nicht läuft.

    Zum thema andere Compiler: Wayne? benutz nur VC++



  • @audacia:
    Zitat aus der FAQ des http://deinmeister.de

    * Benötigen neue Befehle wie MMX und SSE spezielle Unterstützung durch das Betriebssystem?
    * Befehle, die schon existierende Register verwenden wie RDTSC und CMOVxx/FCMOVxx können uneingeschränkt verwendet werden. Dies trifft auch auf MMX und 3DNow zu, da die MMX/3DNow-Register auf die FPU-Register abgebildet werden und deshalb vom Betriebssystem während eines Taskwechsels automatisch gesichert werden. Befehlssätze, die neue Register verwenden wie SSE und SSE2 benötigen jedoch Betriebssysteme, die auch diese Register sichern können. Aus diesem Grund läßt sich SSE und SSE2 nicht unter Windows95 und älteren NT-Versionen verwenden.

    @Der Willi, Der Chef! :
    ich habe die Referenz "Assembler ge-packt" von Joachim Rohde, da finde ich aber nichts über AMD Erweiterung der MMX Befehle. Zugegeben, das Buch ist schon 2 Jahre alt, allerdings müsste es da schon stehen, da ja auch SSE2 beschrieben wird.



  • @CDW:
    WIe sieht denn so eine SSE2 instruktion aus damit ich testen kann ob das jeweilige Windows auch SSE2 unterstützt?



  • hm, die SIMD:
    XORPD (exclusive OR for double precision fliating point data)
    und natürlich der Opcode dazu (weil imho nur die wenigsten compiler es beherrschen)
    XORPD XMM0,XMM0:

    660F57C0

    Habe gerade "manuell" übersetzt und da es schon recht spät ist gebe ich keine Garantie darauf ;)..
    PS: da OllyDbg v 1.10 SSE2 nicht kennt (was mich persönlich gewundert hat), schreibts es als Menmonic XORPS hin (wahrscheinlich weil der Opcode für XORPS 0f57 ist).Mein XP Home SP2 auf P4 schluckt das jedenfalls ohne zu mekern 😃



  • CDW schrieb:

    ich habe die Referenz "Assembler ge-packt" von Joachim Rohde, da finde ich aber nichts über AMD Erweiterung der MMX Befehle. Zugegeben, das Buch ist schon 2 Jahre alt, allerdings müsste es da schon stehen, da ja auch SSE2 beschrieben wird.

    Auf Seite 384, Kapitel 7.2, hab' ich was dazu gesagt.
    Nur beim CPUID-Befehl findet man tatsächlich nichts. Aber dafür gibt es ja dieses Dokument: http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22466.pdf



  • Auf Seite 384, Kapitel 7.2, hab' ich was dazu gesagt.

    ist es das was ich denke 🙄 ?
    Tatsächlich, da stehts - habe eher nach "Amd/MMX-Extension" ausschau gehalten und es nicht bei SSE vermutet sondern bei MMX ;). Wenn man dann die CPUID ergebnisse damit kombiniert kommt man wohl zum Ziel des Threaderstellers.
    Zum Thema: MMX-Erweiterung gibts seit AMD-Athlon, beispiele für Befehle:
    MASKMOVQ,MOVNTQ,PAVGB,PREFETCHT0,PSADBW

    PS: das Buch ist toll *schleim*... nun im ernst, als Refererenz möchte ich es nicht missen, auch wenn ich inzwischen nicht mehr so viel Assembly mache.



  • CDW schrieb:

    Auf Seite 384, Kapitel 7.2, hab' ich was dazu gesagt.

    ist es das was ich denke 🙄 ?

    Ich weiß ja nicht, was du denkst 😉 Aber im ernst: ist doch nichts ungewöhnliches, gibt ja schließlich noch ein paar mehr Autoren, die hier sind.
    (Und danke für's schleimen :- )


Anmelden zum Antworten