Così mi sono insegnato x86 Assembly poco fa e stavo solo giocando con l'assembly inline in C++.Modifica dei valori dell'array nella funzione - Assemblaggio in linea
Quindi, quello che voglio fare è un parametro di funzioni, passare un array, un indice (unsigned int) e un numero. Con l'assembly verrà quindi modificato il valore in quella posizione di memoria dell'array sul valore passato. Quindi il codice sembra così.
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;
}
Così il codice deve caricare l'inizio dell'indirizzo matrice, ottenere l'indice e moltiplicarlo per 4 quindi la posizione di memoria è mosso da quel numero di byte, e cambia al valore passato. Tuttavia, quando lo faccio, il valore rimane lo stesso. Perché? Cosa sta andando storto?
Probabilmente si desidera 'mov edi, pArray' altrimenti si potrebbe caricare l'indirizzo della variabile argomento, non dove si sta puntando. Potresti anche insegnare a te stesso usando un debugger :) – Jester
Sì. Questo era il problema Ho scritto questo fuori da una funzione originariamente in cui l'array poteva essere utilizzato nell'ambito di esso in modo che funzionasse allora, ma quando incapsulato nella funzione ha smesso di funzionare, quindi ha molto senso perché avrei dovuto usare "mov" e non "lea". Grazie :-) – CMilby