2010-03-02 24 views
8

tengo el siguiente código:¿Cómo almaceno el valor de un registro en una ubicación de memoria apuntada por un puntero?

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); 

Sin embargo, en el código, cuando eliminar la referencia al puntero de almacenamiento (como en *(int *)storage), que no entiendo 1. Por lo tanto, ¿cuál es la forma correcta de almacenar el valor de un registro en la memoria apuntada por un puntero C++?

Respuesta

5

¿Estás seguro de que sabes lo que realmente necesitas? Solicitó el código que almacenaría el valor de registro en la memoria asignada por malloc ("apuntada por un puntero"), es decir, *(int*) storage ubicación, pero aceptó la respuesta que almacena (o al menos intenta almacenar) el valor en el puntero sí mismo, que es una cosa completamente diferente.

Para almacenar en la memoria eax "apuntada por un puntero", es decir, en *(int*) storage como usted pidió, que tendría que hacer algo así

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

(yo uso el "Intel" derecha sintaxis a la izquierda para las instrucciones de ensamblaje, es decir, mov copias desde el operando derecho al operando izquierdo. No sé qué sintaxis - de derecha a izquierda o de izquierda a derecha - su compilador está usando.)

Nota también que en mov edi, dword ptr storage la parte dword ptr es completamente opcional y no dificulta Ference en absoluto.

+0

mi mal, creo que tienes razón. No tuve tiempo de comprobar si funcionaba la primera respuesta. Me recordó que cosas como "dword" existían, así que supuse que eso resolvería el problema. –

Cuestiones relacionadas