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

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

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++?

8
задан Benjamin 17 June 2014 в 11:25
поделиться

1 ответ

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

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

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

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

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

5
ответ дан 5 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: