Also habe ich mir vor einiger Zeit selbst x86 Assembly beigebracht und spielte gerade mit Inline Assembly in C++.Ändern von Array-Werten in Funktion - Inline Assembly
Also, was ich tun möchte, ist in einer Funktion Parameter übergeben in einem Array, einem Index (unsigned int) und einer Zahl. Mit Assembly wird dann der Wert in diesem Speicherplatz des Arrays auf den übergebenen Wert geändert. Also sieht der Code so aus.
inline void Set(int pArray[], unsigned int pIndex, int pNum) {
__asm {
mov ebx, pIndex
mov eax, 4
mul ebx
mov ebx, pNum
lea edi, pArray
mov [ edi + eax ], ebx
}
}
int main() {
int myArray[ 5 ] = { 1, 2, 3, 4, 5 };
Set(myArray, 2, 7);
std::cout << myArray[ 2 ] << std::endl;
}
So sollte der Code den Start der Array-Adresse geladen hat, den Index erhalten und es um 4 multiplizieren, so wird der Speicherplatz, dass viele Bytes bewegt wird, und es ändert sich auf den Wert übergeben. Allerdings Wenn ich das tue, bleibt der Wert gleich. Warum das? Was läuft falsch?
Wahrscheinlich wollen Sie 'mov edi, pArray', sonst könnten Sie die Adresse Ihrer Argumentvariablen laden, nicht wo sie hinzeigt. Vielleicht möchten Sie sich selbst auch einen Debugger beibringen :) – Jester
Yup. Das war das Problem. Ich habe dies ursprünglich aus einer Funktion heraus geschrieben, wo das Array im Rahmen von ihm zugegriffen werden konnte, also funktionierte es dann, aber wenn es in der Funktion eingekapselt ist, hat es aufgehört zu arbeiten, so dass es sehr sinnvoll ist, warum ich "mov" benutzt habe "lea". Danke :-) – CMilby