ASM mit VB.NET/managed C++?!
-
Hi.
Ich suche eine Möglichkeit Assembler Code in VB.NET einzubinden.
Hab mich schon belesen wie Sauund 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 aufgerufenSorry, 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.