intel assembler



  • Hallo,

    mit gcc –S –o test.s test.c kann man den Assemblercode eines C-Programms bekommen. Es gibt z.B.

    pushl %ebp
    movl %esp, %ebp

    Ich habe Intel Assembler auch gelernt, aber nur ‚push’ und ’mov’. Was ist das ‚l’ denn? Vermutlich sind %esp und %ebp Register. Was ist der Zusammenhang zw. diesen und ‚AX’ und ‚BX’, die ich damals gelernt habe?

    Mit freundlichen Grüßen
    campus



  • das "l" steht für "long". das heisst dass 32 bit register benutzt werden. ESP und EBP sind, wie du richtig vermutet hast, register. die sind 32 bit gross und deshalb musst du bei AT&T syntax da ein "l" an den befehl hängen.
    diese register haben keinen zusammenhang zu AX und BX, ausser, dass diese auch register sind. es hat übrigens auch nichts damit zu tun, ob du jetzt mit AT&T syntax programmierst oder mit INTEL syntax. die register bleiben immer die gleichen, da der prozessor immer der gleiche ist, es ist einfach nur eine andere schreibweise. mit intel syntax würden die beiden zeilen zB so aussehen:
    push ebp
    mov ebp, esp



  • Hallo,

    im 8088/8086 Assembler, was ich gelernt habe, sind Register BP (Base Pointer) und SP (Stack Pointer) bekannt. Werden sie hier als %ebp und %esp bezeichnet? Gibt’s vielleicht auch %ecs (Code Segment) und %eip (Instruction Pointer)? Ich benutze einen Intel Pentium 3 Prozessor.

    Mit freundlichen Grüßen
    campus



  • Die Segmentregister cs, ds etc. bleiben bei 16 Bit, nur ax, bx, cx, dx, si, di, bp, ip wurden auf 32 Bit erweitert und damit ein e davorgepackt. Wennd u vom 8086 kommst, dürften allerdings auch ein paar Segmentregister für dich neu sein, es gibt inzwischen cs, ds, es, fs, gs, ss, ich schätze mindestens fs und gs sind neu.



  • sowie die Register :

    gdt = GLOBAL DESCRIPTION TABLE
    ldt = LOCAL DESCRIPTION TABLE
    TSS = TASK STATE SEGMENT



  • idtr nicht zu vergessen
    [Switch to Klugscheiss on sight]
    Und der Vollstaendigkeit halber:
    cr0 bis cr4, dr0 bis dr7 und tr3 bis tr7...
    [Switch back to normal] :p



  • interessant. was ist mit tr0 bis ausschließlich tr3? Finde ich etwas seltsam, dass die nummerierung hier erst ab 3 beginnt.
    Zur Info: ich kenne diese Register nicht (bin ja selber erst anfänger)



  • tr0-tr2 kann man an sich auch adressieren, dabei wird jedoch eine Exception 06h (ungueltiger OpCode) ausgeloest.
    Ist aber eigentlich nicht so wichtig, da diese Register ab 586 (Pentium) eh nur noch ueber die MSRs (Modellspezifische Register) angesprochen werden koennen und das ist ja eine voellig verquere Geschichte - da stecken nochmal x andere Register hinter...
    Und an sich braucht man diesen Registern als kleiner Programmierer eh keine Beachtung schenken. 😉


Anmelden zum Antworten