ASM mit VB.NET/managed C++?!



  • Hi.
    Ich suche eine Möglichkeit Assembler Code in VB.NET einzubinden.
    Hab mich schon belesen wie Sau 😉 und bin zu dem Ergebnis gekommen dass es wohl nicht (nativ) geht.
    So bin ich halt auf die Idee gekommen das ganze in C# zu machen -> selbes Problem -> wird nicht unterstützt.
    Also letzter Strohhalm ums doch noch mit .NET hinzubekommen: Managed C++.
    Damit soll das ja Problemlos möglich sein.
    Leider habe ich wirklich 0 C++ Kenntnisse und ehrlich gesagt auch nicht viel Lust bzw. Zeit mich in noch eine neue Sprache vollständig einzuarbeiten.
    Nun habe ich aber meine, im Studium (auf Mikrocontrollern) reingeprügelten ASM Fähigkeiten und würde die natürlich auch gern einsetzen...

    Deshalb die Frage: Wie baue ich ASM-Code in Managed C++ ein und vor allem: wie übergebe ich einfach Werte an den Code.

    Die FAQ zu dem Thema war leider nicht sehr hilfreich, ganz einfach weil ich sie nich wirklich verstanden hab 😉

    Im Grunde suche ich ein "Gerüst" in das ich einfach nur meinen ASM Code einbaue und das ich halt je nach Anforderung verändern kann.
    Das ganze dann compiliert und als DLL gepackt und von VB.NET aus aufgerufen 🙂

    Sorry, wenn der Post vielleicht im falschen Froum liegt; ich war mir nich sicher ob das nun 'ne C++ oder ASM Frage ist 🙂

    Mfg, BeatJunkie



  • Hi

    .Net = MangedCode (platform unabhängig), ASM = unmanaged code ( platform abhängig )

    das wird also nicht direckt gehen. also bleibt nichts andes übrig als ein .Net interface für unmanaged code zu implementieren.

    gruss



  • Beat_Junkie schrieb:

    Wie baue ich ASM-Code in Managed C++ ein und vor allem: wie übergebe ich einfach Werte an den Code.

    ein mehr oder weniger sinnvolles beispiel:

    void init(unsigned int *,
              unsigned int)
    {
        __asm
        {
            mov eax, 01h
            mov ecx, dword ptr [ebp + 0ch]
            mov edx, dword ptr [ebp + 08h]
    repeat: mov dword ptr [ecx * 4 + edx], eax
            shl eax, 01h
            loop repeat
        }
    }
    
    unsigned int sum(unsigned int *,
                     unsigned int)
    {
        __asm
        {
            xor eax, eax
            mov ecx, dword ptr [ebp + 0ch]
            mov edx, dword ptr [ebp + 08h]
    repeat: add eax, dword ptr [ecx * 4 + edx]
            loop repeat
        }
    }
    
    int main()
    {
        using namespace cli;
        using namespace System;
    
        array<unsigned int> ^v = gcnew array<unsigned int>(16);
        pin_ptr<unsigned int> p = &v[0];
    
        init(p,
             v->Length);
    
        Console::WriteLine(sum(p,
                               v->Length).ToString());
    }
    

    ps: ich weiss, dass ich kein asm-guru bin :p



  • Kewl! Danke, genau was ich gesucht hab... *freu* 😃



  • Hab sogar noch was besseres gefunden: http://msdn2.microsoft.com/en-us/library/5sds75we(VS.80).aspx

    Funzt jetzt sogar alles soweit wei ich mir das dachte... 🙂
    Also thx nochma.


Anmelden zum Antworten