14年5个月前IP:未同步
434990
9楼
回 8楼(john667096) 的帖子
编译好反汇编,运算完了下个断点。

a=3;
000D13BE C7 45 F8 03 00 00 00 mov         dword ptr [a],3  
b=(a++)+(++a)+(a++);
000D13C5 8B 45 F8             mov         eax,dword ptr [a]  
000D13C8 83 C0 01             add         eax,1  
000D13CB 89 45 F8             mov         dword ptr [a],eax  
000D13CE 8B 4D F8             mov         ecx,dword ptr [a]  
000D13D1 03 4D F8             add         ecx,dword ptr [a]  
000D13D4 03 4D F8             add         ecx,dword ptr [a]  
000D13D7 89 4D EC             mov         dword ptr [b],ecx  
000D13DA 8B 55 F8             mov         edx,dword ptr [a]  
000D13DD 83 C2 01             add         edx,1  
000D13E0 89 55 F8             mov         dword ptr [a],edx  
000D13E3 8B 45 F8             mov         eax,dword ptr [a]  
000D13E6 83 C0 01             add         eax,1  
000D13E9 89 45 F8             mov         dword ptr [a],eax  

可以看到,首先给a赋值为3。
随后送进寄存器+1再送回来
然后:传给ecx,并两次加上自己,最后赋值给b(相当于b = a*3),最后又用老办法给a+1两次
最后b = (a+1)*3  =12
a = a+1+1+1 = 6
//===================================================================================
同时可以看到,这样效率低下。
a+1可以直接inc DWord ptr[a]
而不是送进寄存器加完再送出来
评论
文号 / 434990

万流景仰
名片发私信
学术分 8
总主题 412 帖总回复 4593 楼拥有证书:专家 老干部 学者 机友 笔友
注册于 2009/03/15 21:53:00最后登录 2026/01/31 04:21:35
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:0

个人简介

CV

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的