Assemblercode in DevC++



  • hallo

    ich hab mir den betrag zu inline assembler in dev c++ angesehen und ausprobiert - geht.

    meine frage:

    wie kann ich da zum beispiel schreiben:

    ....

    int a = 0;
    asm("mov a, eax");
    printf("%d\n", a);
    ....

    (so funktionierts nicht, übrigens hab auf "-masm=intel" umgestellt - das AT&T war zu schwer ... *blöd bin*)

    danke schon mal



  • ..::asm - noob::.. schrieb:

    int a = 0;
    asm("mov a, eax");
    printf("%d\n", a);
    (so funktionierts nicht...

    kann es sein,
    - dass in eax auch 0 war?
    - dass als 'a' ein register genommen wird (AL oder sowas)?


  • Mod

    du kannst nicht so direkt auf lokale variablen zugreifen (ich nehme mal an, dass a lokal definiert ist). lokale variablen formen keine eigenständigen symbole, sondern werden direkt durch esp bzw. ebp relative addressierung angesprochen wobei der compiler direkt mit den offsets arbeitet. um also mittels asm darauf zugreifen zu können, musst du das dem compiler über die eingabe-/ausgabelist mitteilen, dieser kreiert dir dann temporäre macros(%0 bis %9) dafür, welches du im asm text verwenden kannst.

    also z.b.:

    int main()
    {
        int a;
        asm volatile
        (
            "mov eax, 1000"
            : "=a" ( a ) : :
        );
        printf("%d\n", a);
    }
    

    keine ahnung ob das so direkt geht, hab die intel syntax damit noch nie verwendet.



  • danke danke danke ...



  • #include <iostream>
    const char NL = '\n';
    
    void wait()
    {
            std::cin.clear();
            std::streambuf * pbuf = std::cin.rdbuf();
            std::streamsize size  = pbuf->in_avail();
            std::cin.ignore(size);
            std::cin.get();
    }
    
    using std::cout;
    
    int main()
    {
        //lokale Variablen    
        int a, b;
    
        asm( "mov eax,    42" :  "=a" ( a ) );
        asm( "mov ebx, -4711" :  "=b" ( b ) );
    
        cout << &a << ": " << a << "\t " << &b << ": " << b  << NL;
        wait();
    }
    

Anmelden zum Antworten