|
发表于 2014-1-14 10:44:01
|
显示全部楼层
int a=2,b=4,c=6,x,y;
00CD162E mov dword ptr [a],2
00CD1635 mov dword ptr [b],4
00CD163C mov dword ptr [c],6
y=(x=a+b),(b+c);
00CD1643 mov eax,dword ptr [a]
00CD1646 add eax,dword ptr [b]
00CD1649 mov dword ptr [x],eax
00CD164C mov ecx,dword ptr [x]
00CD164F mov dword ptr [y],ecx
printf("y=%d,x=%d",y,x);
00CD1652 mov esi,esp
00CD1654 mov eax,dword ptr [x]
00CD1657 push eax
00CD1658 mov ecx,dword ptr [y]
00CD165B push ecx
printf("y=%d,x=%d",y,x);
00CD165C push 0CD6910h
00CD1661 call dword ptr ds:[0CDA2E8h]
00CD1667 add esp,0Ch
00CD166A cmp esi,esp
00CD166C call __RTC_CheckEsp (0CD1163h)
return 0;
00CD1671 xor eax,eax
看了下汇编,好像b+c 编译器没去理会哦
我的是vs2012 ,同学在vc6下去试试看,看下反汇编
编译器理解b+c相当于是个空语句了
也确实是啊,b+c的结果都不需要了,如果编译器编译进去了,那这个发明编译器的人就是有点问题了
只是让cpu做了下b+c然后,啥都没干 |
|