首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

for循环竟然先执行递增,后执行判断,懂汇编的看下咋回事!

2012-04-17 
for循环竟然先执行递增,后执行判断,懂汇编的看下怎么回事!!for ( itRequest ! vecRequest.end() ++itRe

for循环竟然先执行递增,后执行判断,懂汇编的看下怎么回事!!
for (; itRequest != vecRequest.end(); ++itRequest)
011B78D9 lea ecx,[itRequest] 
011B78DC call std::_Vector_const_iterator<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > >::operator++ (11B9E30h) 
011B78E1 lea edx,[ebp-5Ch] 
011B78E4 push edx  
011B78E5 lea ecx,[ebp-28h] 
011B78E8 call std::vector<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > >::end (11B9D20h) 
011B78ED mov dword ptr [ebp-6Ch],eax 
011B78F0 mov eax,dword ptr [ebp-6Ch] 
011B78F3 mov dword ptr [ebp-70h],eax 
011B78F6 mov byte ptr [ebp-4],4 
011B78FA mov ecx,dword ptr [ebp-70h] 
011B78FD push ecx  
011B78FE lea ecx,[itRequest] 
011B7901 call std::_Vector_const_iterator<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > >::operator!= (11B9F70h) 
011B7906 mov byte ptr [ebp-4Dh],al 
011B7909 mov byte ptr [ebp-4],3 
011B790D lea ecx,[ebp-5Ch] 
011B7910 call std::_Vector_iterator<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > >::~_Vector_iterator<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > > (11B8180h) 
011B7915 movzx edx,byte ptr [ebp-4Dh] 
011B7919 test edx,edx 
011B791B je unm::manager::CmdSender<boost::shared_ptr<otnmudp::OTNMCommunicationData> >::Run+0FEh (11B793Eh)

[解决办法]
你这什么编译器,太奇怪了
[解决办法]
你写成itRequest++试试看
[解决办法]
boost, 代码不懂啊,呵呵

写了个简单的测试代码

Assembly code
    int i=0;003E136E  mov         dword ptr [i],0      int j=1;003E1375  mov         dword ptr [j],1  003E137C  jmp         main+37h (3E1387h)      for(; i<5;i++)003E137E  mov         eax,dword ptr [i]  003E1381  add         eax,1  003E1384  mov         dword ptr [i],eax  003E1387  cmp         dword ptr [i],5  003E138B  jge         main+46h (3E1396h)      {        j=0; //test而已003E138D  mov         dword ptr [j],0      }003E1394  jmp         main+2Eh (3E137Eh)      return 0;003E1396  xor         eax,eax  }
[解决办法]
一般习惯for和while循环写成汇编的时候都会处理成类似这样的模式,所以你会看到递增在前面

for (; a > b; ++a) { 循环体 }

跳转到[判断]

[递增]:++a

循环体

[判断]: 如果a > b跳转到[递增]

热点排行