Assembler Infos



  • Hallo Leute!
    Ich bin eigentlich ein C++ Programmierer, interresiere mich aber für Assembler, da ich gehört habe es soll sehr schnell sein, und schliesslich ist C/C++ auch in dieser Sprache programmiert worden.
    Macht es aber für mich überhaupt Sinn Assembler zu lernen?
    Was kann ich damit machen?
    Für was wird Assembler benutzt?
    Wo gibts Tuts?
    😕
    m.f.G. Fireface



  • Ob assembler sehr schnell ist ist imemr eine Frage des Programmierers 🙂 Immerhin wird dein C-Code ja auch nur in assembler umgewandelt und dann als maschinencode abgelegt.

    Ich denke Assembler lernen macht für jeden Programmierer sinn, weil man zumindest einen blick hinter die Kulissen bekommt und so eventuell an zeitkritischen Stellen effizienter programmieren kann.
    Assembler wird heute eigentlich nur noch benutzt für Betriebssysteme, Gerätetreiber und in zeitkritischen Programmen (z.B. Spielen o.ä.) wenns darum geht, noch wieder ein paar Prozent mehr Effizienz aus dem Kasten zu holen, denn gerade wenn man Prozessorspezifisch (MMX, SSE, SSE2, 3DNOW!) arbeitet, kann man mit ein paar Zeilen assembelr eventuell mal mehr rausholen als ein noch so optimierender Compiler.

    Für Tutorials etc. solltestdu vielleicht mal runterblättern zur FAQ und da reinschauen 🙂



  • @Fireface

    da ich gehört habe es soll sehr schnell sein

    das kommt drauf an. Als Profi kann man mit Assembler hammer optimieren, aber heutige Compiler können das auch. Deswegen erzeugt man gerade als Anfänger mit Assembler oft langsammere Codes, als mit C(++)!

    schliesslich ist C/C++ auch in dieser Sprache programmiert worden.

    quatsch. Vielleicht ist dein Compiler mit Assembler programmiert worden, aber C/C++ bestimmt nicht und mein Compiler (gcc) ist zB. zum größten Teil mit C Programmiert worden 🙄

    Außerden gibt es nicht einen Assembler! Jeder CPU Typ hat fast einen eigenen!

    Macht es aber für mich überhaupt Sinn Assembler zu lernen?

    sicher, da du viel über deine Platform lernst.

    @Tri

    kann man mit ein paar Zeilen assembelr eventuell mal mehr rausholen als ein noch so optimierender Compiler.

    dann muss man aber ein Assembler Gott sein 🙂



  • Original erstellt von kingruedi:
    dann muss man aber ein Assembler Gott sein

    Also ich denke wenn man mit MMX/3DNOW/SSE2 arbeitet kann man ziemlich s chnell besser sein, zumindest ws arithmetik etc. angeht...ich denke in normalen Prozeduren etc. kann man den COmpiler wohl wirklich nicht übertreffen 🙂



  • Original erstellt von TriPhoenix:
    Also ich denke wenn man mit MMX/3DNOW/SSE2 arbeitet kann man ziemlich s chnell besser sein

    Wenn man einen alten Compiler hat, meinetwegen. Aber ein moderner Compiler sollte das koennen. Die modernen Compiler optimieren wie wahnsinnig, da hat ein durchschnitts Assembler Programmierer keine chanze.



  • jo. Der groesste Vorteil von reinen Asm-Programmen ist da wohl bald wirklich nur noch die Groesse. Da kommt ein c/c++-compiler wirklich nur aeusserst selten ran 😉



  • Wenn man ein Programm komplett in Assembler verfasst, kann man wahrscheinlich doch noch ein bisschen besser optimieren, als die Compiler. Nur das kleine bisschen was man rausholt, dafür lohnt sich die Arbeit nicht (man braucht bestimmt 10 mal solange macht 15 mal so viele Fehler und kann den Code 1000 mal so schlecht warten).

    Es ist besser, dass man im C(++) Code auf Optimierung achtet, da sollte man sich lieber gedanken machen!

    (Außerdem schränkt Assembler die Platformunabhängigkeit eh total ein!)

    [ Dieser Beitrag wurde am 09.08.2002 um 11:40 Uhr von kingruedi editiert. ]



  • Original erstellt von kingruedi:
    Wenn man ein Programm komplett in Assembler verfasst, kann man wahrscheinlich doch noch ein bisschen besser optimieren, als die Compiler.

    Ich würds gerade andersrum behaupten 😃 Im normalen Programmfluss kann man nicht mehr viel mit Assembler reißen, wenn dann an hot-spots im Code, keline Prozeduren oder passagen



  • Ich denke, dass man durch eine komplette sich auf das Programm die Sachen doch besser optimieren kann. Zum Beispiel könnte man den Stack besser ausnutzen oder so



  • Hi,

    nun ja, wenn mal den MAschinencode, den VC++ erzeugt disassembelt, kommt man zu dem Schluss, dass es mit der Optimierung nicht weit her ist. 😉

    Manitu 🕶



  • ich kann es mir schlecht vorstellen das ein compiler im grossen stil von dem ganzen SIMD zeug profitieren kann weil da werden ja mehrere daten simultan verarbeitet... aber beispielsweise kennt c++ keine möglichkeit dem compiler mitzutielen das sich da etwas simultan ausführen lässt...
    bsp:

    char zeugs[8];
    for(int n=0;n<8;n++)
       zeugs[n]=zeugs[n]>=15;
    

    dieser code liesse sich extrem stark per mmx optimieren.

    char zeugs[8];
    for(int n=1;n<8;n++)
       zeugs[n]=zeugs[n-1]>=15;
    

    dieser hier überhaupt nicht....
    ich glaube kaum das compiler sowas gut erkennen können... dazu müssten sie ja den code extrem ausführlich mehrfach "betrachten".



  • SOviel wie ich gehört habe optimiert der INtel COmpiler am besten. Da kommmt man nicht mehr ran!!!

    Dafür ist der auch ein bisschen teurer (ich glaube 40'000€)



  • SOviel wie ich gehört habe optimiert der INtel COmpiler am besten. Da kommmt man nicht mehr ran!!!

    Dafür ist der auch ein bisschen teurer (ich glaube 40'000€)



  • SOviel wie ich gehört habe optimiert der INtel COmpiler am besten. Da kommmt man nicht mehr ran!!!

    Dafür ist der auch ein bisschen teurer (ich glaube 40'000€)



  • einmal hätte gereicht 😃 und für linux ist er frei verfügbar wenn man damit opensource baut...



  • @Japro:
    nochmal zurueck zu den Beiden Codeschnippseln, die Du da gepostet hast: Wie kann man da mit MMX grossartig was optimieren? Ist mir bis jetzt leider noch kein Licht aufgegangen 🙄
    (mal ganz abgesehen davon, dass ich die Zeile in der for-Schleife eh nicht ganz verstehe 😃 )

    [ Dieser Beitrag wurde am 12.08.2002 um 00:22 Uhr von Nobuo T editiert. ]



  • der code ansich macht keinen sinn 😃 aber der gadanke ist der folgende: bei der ersten variante wird der in der regel die forschleife so durchlaufen wie sie dasteht und dann jedem feld false(0) zuweisen wenn sein werte kleiner als 15 ist und sonst true(1+).
    aber in diesem fall könnte er auch gleich alle 8 bytes auf einmal in einse der xmm register laden und mit einem der mmx vergeliche gelichzeitig verarbeiten...
    im zweiten fall geht das nicht mehr weil das ergebnis vom vorigen byte abhängig ist und sie deshalb hintereinander verarbeitet werden müssen.
    das sind nur beispiele. weil mir gerade nix gescheiteres eingefallen ist.


Anmelden zum Antworten