[ negyxo @ 22.09.2006. 21:05 ] @
U C++(2005) imam sledeci kod. Code: #include<iostream> //global variable int g_One=1; //function prototype void func(int& pInt); int main() { int nvar=2; int* pvar=&nvar; func(*pvar); std::cout<<*pvar<<std::endl; return 0; } void func(int& pInt) { pInt=g_One; } U disassembly-u za func funkciju dobijem sledeci assembly code Code: void func(int& pInt) { 004114F0 push ebp 004114F1 mov ebp,esp 004114F3 sub esp,0C0h 004114F9 push ebx 004114FA push esi 004114FB push edi 004114FC lea edi,[ebp-0C0h] 00411502 mov ecx,30h 00411507 mov eax,0CCCCCCCCh 0041150C rep stos dword ptr es:[edi] pInt=g_One; 0041150E mov eax,dword ptr [pInt] 00411511 mov ecx,dword ptr [g_One (417004h)] 00411517 mov dword ptr [eax],ecx } Muci me sledeca linija Code: mov eax,dword ptr [pInt] U mom slucaju adresa pInt je na lokaciji 0x0012ff60 a vrednost sledeca 4 bajta sa te lokacije je 2. Kada se izvrsi mov instrukcija u registru eax se nalazi vrednost 0x0012ff60 a ne 2. Zasto? |