Uebersetze C++ in Assembler



  • Hallo,

    ich kann mich noch ans Studium erinnern da mussten wir mal C++ in Assembler uebersetzen. Da ging es umso einfache Sachen wie for Schleife if statement usw.

    Aber wie sieht es bei komplizierteren Sachen aus. Ich denke da mal an Thread , dependency injection hmm mehr faellt mir dummerweise grad nicht ein. Wie wird das in Assembler uebersetzt ?

    Und mir hat mal einer gesagt er musste was in Assembler machen weil es in C++ nicht gegangen waere. Koennte da mal einer ein beispiel bringen ?


  • Mod

    blurry333 schrieb:

    Ich denke da mal an Thread

    Call entsprechender OS-Funktionen, so wie man Threads in C++ machte, bevor sie ein eingebautes Feature der Sprache wurden.

    , dependency injection

    Ist ja kein Sprachfeature, sondern wird in C++ manuell über ganz normale Funktionen/Methoden programmiert. Entsprechende Funktionen also einfach nach Assembler übersetzen. Nichts besonderes.

    Und mir hat mal einer gesagt er musste was in Assembler machen weil es in C++ nicht gegangen waere. Koennte da mal einer ein beispiel bringen ?

    NOP
    


  • Schau dir doch einfach mal an welchen Assemblycode dein C++ Compiler erzeugt, einfacher gehts doch nicht. 🙂



  • ähm 30 Zeilen c++ Code sind mehrere tausend zeilen assemlber code . Was soll ich mir da noch anschauen 🙂



  • blurry333 schrieb:

    ähm 30 Zeilen c++ Code sind mehrere tausend zeilen assemlber code . Was soll ich mir da noch anschauen 🙂

    Na, das wäre ja die Antwort auf:

    blurry333 schrieb:

    Aber wie sieht es bei komplizierteren Sachen aus.

    Du kannst ja in einem Text-Editor nach bekannten Namen suchen, z.B. "main". Besser ist, du machst eine kleine Funktion und suchst nach deren Namen. Vergiss nicht, die Optimierung auszuschalten, sonst findest Du Dich wahrscheinlich überhaupt nicht zurecht.

    viele grüße
    ralph



  • Und mir hat mal einer gesagt er musste was in Assembler machen weil es in C++ nicht gegangen waere. Koennte da mal einer ein beispiel bringen ?

    Ich wüsste z.B. nicht, wie man eine Funktion in C/C++ schreibt, die den kompletten Stack auf einen bestimmten Wert (oder Zufallswert) initialisiert.



  • SeppJ schrieb:

    Und mir hat mal einer gesagt er musste was in Assembler machen weil es in C++ nicht gegangen waere. Koennte da mal einer ein beispiel bringen ?

    NOP
    
    ;
    


  • Es ist aber nicht garantiert, dass der Compiler überschüssige ";" nicht einfach wegoptimiert.



  • cpuid ; üblicherweise wird eine System-Funktion anstelle des mnemonics verwendet
    
    syscall ; unter Linux üblicherweise durch wrapper Funktionen aufgerufen
    int 0x80 ; generell kann man mit C++ Sprachmitteln keine Interrupts auslösen
    
    pushf
    popf ; afaik kann man in C++ nicht am Flag register rumspielen...
    

    Möglicherweise generiert ein C++ Compiler zwar trotzdem in gewissen Fällen diese Mnemonics, allerdings kann man das nicht standardisiert erzwingen.



  • blurry333 schrieb:

    ...ich kann mich noch ans Studium erinnern...

    Ist ja wohl nicht dein Ernst. Ich will sofort den numerus clausus zurück.

    SeppJ schrieb:

    NOP
    

    LOL.

    Assembler: RCL http://www.i8086.de/asm/8086-88-asm-rcl.html
    Schwer sowas in C++ zu implementieren.

    Genauso: ROR und andere Bitoperationen.

    Hab aber schon über 20 Jahre nix mehr mit Assembler gemacht.



  • blurry333 schrieb:

    ähm 30 Zeilen c++ Code sind mehrere tausend zeilen assemlber code . Was soll ich mir da noch anschauen 🙂

    Tja, Assembly ist halt nicht unbedingt die Sprache mit dem schönsten Source Code :p
    Aber ich denke nicht, dass es eine einfachere Möglichkeit gibt.


Anmelden zum Antworten