Assemblercode mit Dev-C++ in Intel-Syntax



  • Hier wird öfters nach Einbau von Assemblercode gefragt.

    Beispiel mit AT&T-Syntax und globalen Variablen:

    #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;
    
    //globale Variablen
    int a = 1; 
    int b = 2;
    
    int main()
    { 
        cout << "Ausgangssituation: " << NL;
        cout << &a << ": " << a << "\t " << &b << ": " << b  << NL << NL;
    
        cout << "Tausch mittels Register eax und ebx: " << NL;         
    
        asm("mov _b, %eax"); //AT&T Syntax bei Dev-C++ 
        asm("mov _a, %ebx"); 
        asm("mov %eax, _a"); 
        asm("mov %ebx, _b"); 
    
        cout << &a << ": " << a << "\t " << &b << ": " << b  << NL;
        wait();
    }
    

    Um die einfachere Intel-Syntax anstelle AT&T-Syntax verwenden zu können, muss man unter Werkzeuge - Compiler-Optionen beim Compiler-Aufruf folgenden Parameter hinzufügen:

    -masm=intel
    
    #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;
    
    //globale Variablen
    int a = 1; 
    int b = 2;
    
    int main()
    { 
        cout << "Ausgangssituation: " << NL;
        cout << &a << ": " << a << "\t " << &b << ": " << b  << NL << NL;
    
        cout << "Tausch mittels Register eax und ebx: " << NL;         
    
        asm("mov eax, _b"); //Intel Syntax bei Dev-C++ mit -masm=intel
        asm("mov ebx, _a"); 
        asm("mov _a, eax"); 
        asm("mov _b, ebx"); 
    
        cout << &a << ": " << a << "\t " << &b << ": " << b  << NL;
        wait();
    }
    

    Lokale Variablen können z.B. wie folgt angesprochen werden:

    #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();
    }
    


  • -> faq ?



  • Super, und wieder tendiere ich mehr für MinGW 😃

    MfG RoaN;



  • Super, und wieder tendiere ich mehr für MinGW

    Begründung?



  • KP wie ich darauf gekommen bin. 🙄


Anmelden zum Antworten