(i++)+(i++)+(i++); (++j)+(++j)+(++j); 求指点

blues_angle 2013-02-21 11:44:40
#include<stdio.h>
int main()
{
int i,j,a,b=0;
i=3;
j=3;
a=(i++)+(i++)+(i++);
b=(++j)+(++j)+(++j);
printf("a=%d b=%d i=%d j=%d",a,b,i,j);

return 0;
} //a=9 b=16 i=6 j=6 (这是我用vc6.0编译后的结果)

vc里面的汇编代码如下: (我想请问大家的是这些汇编代码是怎么个原理,看不太懂)
7: a=(i++)+(i++)+(i++);
0040103D mov eax,dword ptr [ebp-4]
00401040 add eax,dword ptr [ebp-4]
00401043 add eax,dword ptr [ebp-4]
00401046 mov dword ptr [ebp-0Ch],eax
00401049 mov ecx,dword ptr [ebp-4]
0040104C add ecx,1
0040104F mov dword ptr [ebp-4],ecx
00401052 mov edx,dword ptr [ebp-4]
00401055 add edx,1
00401058 mov dword ptr [ebp-4],edx
0040105B mov eax,dword ptr [ebp-4]
0040105E add eax,1
00401061 mov dword ptr [ebp-4],eax
8: b=(++j)+(++j)+(++j);
00401064 mov ecx,dword ptr [ebp-8]
00401067 add ecx,1
0040106A mov dword ptr [ebp-8],ecx
0040106D mov edx,dword ptr [ebp-8]
00401070 add edx,1
00401073 mov dword ptr [ebp-8],edx
00401076 mov eax,dword ptr [ebp-8]
00401079 add eax,dword ptr [ebp-8]
0040107C mov ecx,dword ptr [ebp-8]
0040107F add ecx,1
00401082 mov dword ptr [ebp-8],ecx
00401085 add eax,dword ptr [ebp-8]
00401088 mov dword ptr [ebp-10h],eax
//希望大家帮我解答一下这些汇编代码,谢谢大家。有满意答案一定给分
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
blues_angle 2013-02-21
  • 打赏
  • 举报
回复
在线等 , 请大侠们指点
专业路人甲 2013-02-21
  • 打赏
  • 举报
回复
PS:eax,ecx,edx为寄存器(不知道就简单将其理解为临时变量吧)
专业路人甲 2013-02-21
  • 打赏
  • 举报
回复

7:        a=(i++)+(i++)+(i++);
0040103D   mov         eax,dword ptr [ebp-4]       ;eax=i
00401040   add         eax,dword ptr [ebp-4]       ;eax+=i
00401043   add         eax,dword ptr [ebp-4]       ;eax+=i
00401046   mov         dword ptr [ebp-0Ch],eax     ;a=eax
00401049   mov         ecx,dword ptr [ebp-4]       ;ecx=i
0040104C   add         ecx,1                       ;ecx+=1
0040104F   mov         dword ptr [ebp-4],ecx       ;i=ecx
00401052   mov         edx,dword ptr [ebp-4]       ;edx=i
00401055   add         edx,1                       ;edx+=1
00401058   mov         dword ptr [ebp-4],edx       ;i=edx
0040105B   mov         eax,dword ptr [ebp-4]       ;eax=i
0040105E   add         eax,1                       ;eax+=1
00401061   mov         dword ptr [ebp-4],eax       ;i=eax
8:        b=(++j)+(++j)+(++j);
00401064   mov         ecx,dword ptr [ebp-8]       ;ecx=j
00401067   add         ecx,1                       ;ecx+=1
0040106A   mov         dword ptr [ebp-8],ecx       ;j=ecx
0040106D   mov         edx,dword ptr [ebp-8]       ;edx=j
00401070   add         edx,1                       ;edx+=1
00401073   mov         dword ptr [ebp-8],edx       ;j=edx
00401076   mov         eax,dword ptr [ebp-8]       ;eax=j
00401079   add         eax,dword ptr [ebp-8]       ;eax+=j
0040107C   mov         ecx,dword ptr [ebp-8]       ;ecx=j
0040107F   add         ecx,1                       ;ecx+=1
00401082   mov         dword ptr [ebp-8],ecx       ;j=ecx
00401085   add         eax,dword ptr [ebp-8]       ;eax=j
00401088   mov         dword ptr [ebp-10h],eax     ;b=j
blues_angle 2013-02-21
  • 打赏
  • 举报
回复
心都等碎了。。。结贴了

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧