帮助

三土二园-readyu三土二园 http://readyu.blog.edu.cn[订阅]

三土二园 - by readyu  科学,历史

搜索

正文

VC2008(VC9)的代码优化

 (2007-11-07 23:19)
  • 标签: -  分类: code
BCB与VC6的优化差不多,只是调用约定不同,平衡堆栈方式,BCB是__stdcall,而VC6是__cdecl。
VC9的优化,爽的厉害,内循环完全展开,4个寄存器用的恰到好处,一气呵成,流畅舒服。

C代码:
unsigned int calc_our_crc(unsigned int crc_head, const void * buf, int lenth)
{
    unsigned int crc;
    unsigned char * p = (unsigned char *)buf;
    int j;

    crc = crc_head;
    while(lenth --) {
        crc ^= ((* p) << 0x10);
        p++;
        for(j = 0; j<8; j++) {
            crc += crc;
            if (crc & 0x80000000)
                crc ^= unsigned int(0x11864CFB);
        }
    }
    return crc;
}


C++ Builder

::1006DAC8::  55                       PUSH EBP                                :BYCALL
::1006DAC9::  8BEC                     MOV EBP,ESP                             
::1006DACB::  53                       PUSH EBX                                
::1006DACC::  8B5D 10                  MOV EBX,[EBP+10]                        
::1006DACF::  8B45 08                  MOV EAX,[EBP+8]                         
::1006DAD2::  8B4D 0C                  MOV ECX,[EBP+C]                         
::1006DAD5::  EB 20                    JMP SHORT 1006DAF7                      :JMPDOWN
::1006DAD7::  33D2                     XOR EDX,EDX                             :BYJMP JmpBy:1006DAFE,
::1006DAD9::  8A11                     MOV DL,[ECX]                            
::1006DADB::  C1E2 10                  SHL EDX,10                              
::1006DADE::  33C2                     XOR EAX,EDX                             
::1006DAE0::  41                       INC ECX                                 
::1006DAE1::  33D2                     XOR EDX,EDX                             
::1006DAE3::  03C0                     ADD EAX,EAX                             :BYJMP JmpBy:1006DAF5,
::1006DAE5::  A9 00000080              TEST EAX,80000000                       
::1006DAEA::  74 05                    JE SHORT 1006DAF1                       :JMPDOWN
::1006DAEC::  35 FB4C8611              XOR EAX,11864CFB                        
::1006DAF1::  42                       INC EDX                                 :BYJMP JmpBy:1006DAEA,
::1006DAF2::  83FA 08                  CMP EDX,8                               
::1006DAF5::  7C EC                    JL SHORT 1006DAE3                       :JMPUP
::1006DAF7::  8BD3                     MOV EDX,EBX                             :BYJMP JmpBy:1006DAD5,
::1006DAF9::  83C3 FF                  ADD EBX,-1                              
::1006DAFC::  85D2                     TEST EDX,EDX                            
::1006DAFE::  75 D7                    JNZ SHORT 1006DAD7                      :JMPUP
::1006DB00::  5B                       POP EBX                                 
::1006DB01::  5D                       POP EBP                                 
::1006DB02::  C2 0C00                  RETN C     

VC6
::10001F20::  8B4C24 0C                MOV     ECX, DWORD PTR [ESP+C]          :BYCALL CallBy:10001C1A,
::10001F24::  8B5424 08                MOV     EDX, DWORD PTR [ESP+8]          
::10001F28::  8B4424 04                MOV     EAX, DWORD PTR [ESP+4]          
::10001F2C::  56                       PUSH    ESI                             
::10001F2D::  8BF1                     MOV     ESI, ECX                        
::10001F2F::  49                       DEC     ECX                             
::10001F30::  85F6                     TEST    ESI, ESI                        
::10001F32::  74 26                    JE      SHORT 10001F5A                  :JMPDOWN
::10001F34::  8D71 01                  LEA     ESI, DWORD PTR [ECX+1]          
::10001F37::  33C9                     XOR     ECX, ECX                        :BYJMP JmpBy:10001F58,
::10001F39::  8A0A                     MOV     CL, BYTE PTR [EDX]              
::10001F3B::  C1E1 10                  SHL     ECX, 10                         
::10001F3E::  33C1                     XOR     EAX, ECX                        
::10001F40::  42                       INC     EDX                             
::10001F41::  B9 08000000              MOV     ECX, 8                          
::10001F46::  03C0                     ADD     EAX, EAX                        :BYJMP JmpBy:10001F55,
::10001F48::  A9 00000080              TEST    EAX, 80000000                   
::10001F4D::  74 05                    JE      SHORT 10001F54                  :JMPDOWN
::10001F4F::  35 FB4C8611              XOR     EAX, 11864CFB                   
::10001F54::  49                       DEC     ECX                             :BYJMP JmpBy:10001F4D,
::10001F55::  75 EF                    JNZ     SHORT 10001F46                  :JMPUP
::10001F57::  4E                       DEC     ESI                             
::10001F58::  75 DD                    JNZ     SHORT 10001F37                  :JMPUP
::10001F5A::  5E                       POP     ESI                             :BYJMP JmpBy:10001F32,
::10001F5B::  C3                       RETN

VC2008(VC9)的优化
::00401000::  8B5424 0C                MOV EDX,[ESP+C]                         :BYCALL CallBy:00402B1E,
::00401004::  8B4C24 08                MOV ECX,[ESP+8]                         
::00401008::  8B4424 04                MOV EAX,[ESP+4]                         
::0040100C::  85D2                     TEST EDX,EDX                            
::0040100E::  74 68                    JE SHORT 00401078                       :JMPDOWN
::00401010::  56                       PUSH ESI                                
::00401011::  0FB631                   MOVZX ESI,BYTE PTR [ECX]                :BYJMP JmpBy:00401075,
::00401014::  C1E6 10                  SHL ESI,10                              
::00401017::  33C6                     XOR EAX,ESI                             
::00401019::  03C0                     ADD EAX,EAX                             
::0040101B::  4A                       DEC EDX                                 
::0040101C::  41                       INC ECX                                 
::0040101D::  85C0                     TEST EAX,EAX                            
::0040101F::  79 05                    JNS SHORT 00401026                      :JMPDOWN
::00401021::  35 FB4C8611              XOR EAX,11864CFB                        
::00401026::  03C0                     ADD EAX,EAX                             :BYJMP JmpBy:0040101F,
::00401028::  85C0                     TEST EAX,EAX                            
::0040102A::  79 05                    JNS SHORT 00401031                      :JMPDOWN
::0040102C::  35 FB4C8611              XOR EAX,11864CFB                        
::00401031::  03C0                     ADD EAX,EAX                             :BYJMP JmpBy:0040102A,
::00401033::  85C0                     TEST EAX,EAX                            
::00401035::  79 05                    JNS SHORT 0040103C                      :JMPDOWN
::00401037::  35 FB4C8611              XOR EAX,11864CFB                        
::0040103C::  03C0                     ADD EAX,EAX                             :BYJMP JmpBy:00401035,
::0040103E::  85C0                     TEST EAX,EAX                            
::00401040::  79 05                    JNS SHORT 00401047                      :JMPDOWN
::00401042::  35 FB4C8611              XOR EAX,11864CFB                        
::00401047::  03C0                     ADD EAX,EAX                             :BYJMP JmpBy:00401040,
::00401049::  85C0                     TEST EAX,EAX                            
::0040104B::  79 05                    JNS SHORT 00401052                      :JMPDOWN
::0040104D::  35 FB4C8611              XOR EAX,11864CFB                        
::00401052::  03C0                     ADD EAX,EAX                             :BYJMP JmpBy:0040104B,
::00401054::  85C0                     TEST EAX,EAX                            
::00401056::  79 05                    JNS SHORT 0040105D                      :JMPDOWN
::00401058::  35 FB4C8611              XOR EAX,11864CFB                        
::0040105D::  03C0                     ADD EAX,EAX                             :BYJMP JmpBy:00401056,
::0040105F::  85C0                     TEST EAX,EAX                            
::00401061::  79 05                    JNS SHORT 00401068           
::00401063::  35 FB4C8611              XOR EAX,11864CFB                        
::00401068::  03C0                     ADD EAX,EAX                             :BYJMP JmpBy:00401061,
::0040106A::  85C0                     TEST EAX,EAX                            
::0040106C::  79 05                    JNS SHORT 00401073                      :JMPDOWN
::0040106E::  35 FB4C8611              XOR EAX,11864CFB                        
::00401073::  85D2                     TEST EDX,EDX                            :BYJMP JmpBy:0040106C,
::00401075::  75 9A                    JNZ SHORT 00401011                      :JMPUP
::00401077::  5E                       POP ESI                                 
::00401078::  C3                       RETN                                    :BYJMP JmpBy:0040100E,



0
0
分享到:
评论 (2) | 阅读 (821) | 收藏 (0)

内容读取中…
发表评论
你还没有登录,现在登录 插入表情
共可输入600个汉字

个人档案

推荐博文

    内容读取中…