|
发表于 2012-3-17 18:20:43
|
显示全部楼层
4: int i=5,j=5,p,q;
0041139E C7 45 F8 05 00 00 00 mov dword ptr [i],5 ;把5放进4字节内存单元[i],这里[i]存储的就是变量i的值
004113A5 C7 45 EC 05 00 00 00 mov dword ptr [j],5 ;把5放进4字节内存单元[j][i],这里[j]存储的就是变量j的值
5: p=(i++)+(i++)+(i++); ;p=(i++)+(i++)+(i++) 执行的步骤其实是这样的 p=i+i+i; 再执行3次i++;
004113AC 8B 45 F8 mov eax,dword ptr [i] ;从这里
004113AF 03 45 F8 add eax,dword ptr [i] ;
004113B2 03 45 F8 add eax,dword ptr [i] ;到这里就是 i+i+i 运算
004113B5 89 45 E0 mov dword ptr [p],eax ;将 i + i + i 运算的结果保存到,4字节内存单元[p],[p]就是变量p,所以打印出p的值是15
004113B8 8B 4D F8 mov ecx,dword ptr [i] ;从这里
004113BB 83 C1 01 add ecx,1
004113BE 89 4D F8 mov dword ptr [i],ecx
004113C1 8B 55 F8 mov edx,dword ptr [i]
004113C4 83 C2 01 add edx,1
004113C7 89 55 F8 mov dword ptr [i],edx
004113CA 8B 45 F8 mov eax,dword ptr [i]
004113CD 83 C0 01 add eax,1 ;到这里,执行3次 i++; 所以i的值输出后为8
004113D0 89 45 F8 mov dword ptr [i],eax
6: q=(++j)+(++j)+(++j);
004113D3 8B 45 EC mov eax,dword ptr [j] ;++j 表现的的行为和 i++ 是不同的
004113D6 83 C0 01 add eax,1 ;先把[j]存到eax,再把eax的值+1,然后再把eax的值放入[j]
004113D9 89 45 EC mov dword ptr [j],eax ;执行到这里的时候j 已经等于6
004113DC 8B 4D EC mov ecx,dword ptr [j] ;[j]放入ecx,你需要明白[j]已经等于6
004113DF 83 C1 01 add ecx,1 ;然后ecx+1,
004113E2 89 4D EC mov dword ptr [j],ecx ;再把ecx放到[j],这是[j]已经等于7
004113E5 8B 55 EC mov edx,dword ptr [j] ;[j]放入edx,你需要明白[j]已经等于7
004113E8 83 C2 01 add edx,1 ;然后edx+1,
004113EB 89 55 EC mov dword ptr [j],edx ;再把edx放到[j],这是[j]已经等于8
004113EE 8B 45 EC mov eax,dword ptr [j] ;从这里
004113F1 03 45 EC add eax,dword ptr [j] ;
004113F4 03 45 EC add eax,dword ptr [j] ; 到这里就是 q =j+j+j,由于这时候j已经等于8,所以q =24
004113F7 89 45 D4 mov dword ptr [q],eax
总结:
p=(i++)+(i++)+(i++); 其实相当于 p = i+i+i; i++;i++;i++;
q=(++j)+(++j)+(++j); 其实相当于 j++;j++;j++; p=j+j+j; |
|