Визуальная студия C ++ Assembly |Значение скобок? - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь сравнить сборку для двух частей кода, и они выглядят так, как показано ниже.Мой вопрос заключается в том, выполняются ли добавления в [esp+4] [esp+8] [esp+0Ch] во время выполнения или как-то разрешаются до этого.

Версия 1

00FE104D  mov         eax,dword ptr [esp+4]  
00FE1051  imul        eax,dword ptr [esp+8]  
00FE1056  mov         esi,dword ptr [esp+0Ch]  

Версия 2

00FE104D  mov         eax,dword ptr [x]  
00FE1051  imul        eax,dword ptr [y]  
00FE1056  mov         esi,dword ptr [z]  

1 Ответ

0 голосов
/ 21 февраля 2019

Это, конечно, выполняется во время выполнения.«разрешать» его раньше было бы бессмысленно.

mov eax,dword ptr [x]

означает: взять все, что DWORD указано x и поместить в eax.В C это будет примерно так:

   DWORD x;
   ...
   eax = *((DWORD*)x);

   mov eax,dword ptr [x + 4]

будет примерно так в C

   DWORD x;
   ...
   eax = *((DWORD*)(x + 4));
...