Inline-Assembler: C++ Variable in Register und int



  • Moin Moin,
    hoffe erstmal das ich hier richtig bin (wusste nicht ob das zu C++ oder Assembler gehört).
    Ich möchte eine Variable

    unsigned int temp;
    

    in das Register ES packen, wie macht man so was? Habe nur mit Assembler(Intel/MS Syntax) gearbeitet und nicht mit AT&T Syntax oder Inline-Assembler. Und wie nutzt man denn Befehl int (in Inline-Assembler)? Mein Compiler ist der "clang LLVM compiler" aka GCC/G++.

    BD


  • Mod

    Und wie nutzt man denn Befehl int (in Inline-Assembler)?

    Es macht einen interrupt. Unter Linux nutzt man bspw. int 0x80 für einen Syscall.

    So sähe der Code aus:

    unsigned temp = 752;
    	asm("movl %0, %%eax;" ::"r"(temp) :"%eax" );
    


  • Inline schrieb:

    Mein Compiler ist der "clang LLVM compiler" aka GCC/G++.

    Ähm, das sind zwei unterschiedliche Compiler.



  • Kann ich auch noch gleich was zu Inline-Assembler fragen? 🙂
    Ja? Cool!
    Also:

    Wie funktioniert eigentlich das ansprechen der Segemntregister?
    Nach lowlevel.eu heißt es:

    [i]Register werden in der Ausgabe- und Eingabeliste folgendermaßen bezeichnet: a, b, c, d stehen für eax, ebx, ecx, edx (bzw. die entsprechenden Word- und Byte-Varianten, je nach Größe der übergebenen Variablen), D für edi und S für esi[/i]
    

    Was ist dann der Buchstabe für die Segmentregister?

    LG



  • Auf x86: cs, ds, ss, es, fs und gs.


Log in to reply