Как сохранить значение регистра в ячейке памяти, на которую указывает указатель? - PullRequest
8 голосов
/ 02 марта 2010

У меня есть следующий код:

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

Однако в коде, когда я разыменовываю указатель хранилища (как в *(int *)storage), я не получаю 1. Итак, каков правильный способ хранения значения регистра в памяти, на которую указывает Указатель C ++?

1 Ответ

5 голосов
/ 02 марта 2010

Вы уверены, что знаете, что вам действительно нужно? Вы запросили код, который будет хранить значение регистра в памяти, выделенной malloc («указатель указывается указателем»), то есть местоположением *(int*) storage, но вы приняли ответ, который хранит (или, по крайней мере, пытается сохранить) значение в самом указателе, что совершенно другое.

Чтобы сохранить eax в памяти, "на которую указывает указатель", т. Е. В *(int*) storage, как вы и просили, вам нужно будет сделать что-то подобное

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

(Я использую синтаксис «Intel» справа налево для инструкций по сборке, т.е. mov копирует из правого операнда в левый операнд. Я не знаю, какой синтаксис - справа налево или слева направо верно - ваш компилятор использует.)

Обратите внимание, что в mov edi, dword ptr storage часть dword ptr является полностью необязательной и не имеет никакого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...