2010-03-02 4 views
8

Ho il seguente codice:Come si memorizza il valore di un registro in una posizione di memoria puntata da un puntatore?

void * storage = malloc(4); 

__asm 
{ 
    //assume the integer 1 is stored in eax 
    mov eax, storage //I've tried *storage as well but apparently it's illegal syntax 
} 
/* other code here */ 
free(storage); 

Tuttavia, nel codice, quando ho dereference il puntatore di memorizzazione (come in *(int *)storage), non ottengo 1. Quindi, qual è il modo corretto di memorizzare il valore di un registro nella memoria puntato da un puntatore C++?

risposta

5

Sei sicuro di sapere di cosa hai veramente bisogno? Hai richiesto il codice che memorizzerebbe il valore del registro nella memoria allocata da malloc ("puntato da un puntatore"), ovvero *(int*) storage posizione, ma hai accettato la risposta che memorizza (o almeno tenta di memorizzare) il valore nel puntatore stesso, che è una cosa completamente diversa.

Per memorizzare eax nella memoria "puntata da un puntatore", vale a dire in *(int*) storage come da voi richiesto, che avrebbe dovuto fare qualcosa di simile

mov edi, dword ptr storage 
mov dword ptr [edi], eax 

(io uso il "Intel" destra sintassi sinistra-sinistra per istruzioni di assemblaggio, ovvero mov copie da operando destro a operando sinistro.Non so quale sintassi - da destra a sinistra o da sinistra a destra - il compilatore sta usando.)

Nota anche quello in mov edi, dword ptr storage la parte dword ptr è completamente facoltativa e non fa dif ference qualunque.

+0

il mio male, penso che tu abbia ragione. Non ho avuto il tempo di controllare se la prima risposta ha funzionato. Mi ha ricordato che esistevano cose come "dword", quindi ho pensato che avrebbe risolto il problema. –

Problemi correlati