Не знаю почему так работает. Почему Код (Text): mov ecx, [iVal] в ECX грузится адрес??? Может в Visual C++ синтаксис другой??? Код (Text): DWORD Val __asm { mov Val, esp; mov eax, Val; mov ecx, [eax]; // в ECX загружает данные по адресу EAX mov ecx, [iVal]; // а вот тут в ECX загружает адрес, а мне надо данные. mov ecx, [iVal+4]; }
Прогони это под отладчиком или задай в настройках генерацию ассемблерного листинга и посмотри, как именно у тебя ассемблируется этот код. И что за значение у тебя в iVal? И какой тип у этой переменной? Если iVal локальная, то ставь скобки, не ставь, пиши DWORD PTR, не пиши - она как была, к примеру DWORD PTR [ebp-0Ch] - так её и останется
Vilco Я вижу DWORD Val, а DWORD iVal почемуто у меня не отображается. Насколько я знаю, [] на локальные переменные не влияют. Я предполагаю, что iVal может быть указателем на массив, естественно после mov ecx, [iVal]; в ecx будет адрес массива. Может я чего-то туплю, но в mov ecx, [iVal] должно загружаться значение, и если грузиться не оно, интересно, почему так происходит, вот я и спрашиваю, какое там находиться значение и какой у неё тип. Вот пример, корректно собирается под VC 8, везде получаются значения Код (Text): // testasm.cpp : Defines the entry point for the console application. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int iVal, Val, Val1; iVal=10; Val=0; Val1=0; __asm{ mov ecx, [iVal] mov Val, ecx mov ecx, iVal mov Val1, ecx } printf("Val=%d Val1=%d", Val, Val1); return 0; }