zoukankan      html  css  js  c++  java
  • 快速FastPosChar算法(修改完善版) by codegame

    SSE优化算法:
    function CGPosCharSSE(SubChar: Char ; SrcString: PChar; Len: Integer; Order:Boolean=True): Integer;
                    
    // SubChar -> AL; SrcString -> EDX; Len -> ECX  Order -> [ebp+8]
    asm
          push   esi
          push   ebx
          test   ecx, ecx
          jz     @NotFound
          test   edx, edx
          jz     @NotFound
          xor    esi,esi
          mov    ah,al
          movd     xmm1, eax
          pshuflw  xmm1, xmm1, 
    0
          pshufd   xmm1, xmm1, 
    0
          mov eax, [ebp
    +8]
          test  eax,eax   
    //为0则表示Order =false
          je    @Reverse   
    //为0倒序查找
          
        
    {---------------顺序查找------------------}
        @OrderCmp:
          movups   xmm0,[edx
    +esi]
          pcmpeqb  xmm0, xmm1
          pmovmskb eax, xmm0
          test  eax, eax
          jnz   @OrderFound
          add   esi,$
    10
          cmp   esi,ecx
          jl    @OrderCmp
          jmp   @Notfound
          
        
    {---------------倒序查找------------------}
        @Reverse:
          mov   esi,ecx
          sub   esi,$
    10
        @ReverseCmp:
          movups   xmm0,[edx
    +esi]
          pcmpeqb  xmm0, xmm1
          pmovmskb eax, xmm0
          test  eax, eax
          jnz   @ReverseFound
          sub   esi,$
    10
          cmp   esi,
    -$10
          jl    @ReverseCmp
        @NotFound:
          xor   eax, eax
          jmp   @Exit
        @OrderFound:
          bsf   eax, eax
          jmp   @SetRet
        @ReverseFound:
          bsr   eax, eax
        @SetRet:
          shr   eax, 
    3
          add   eax,esi
          add   eax,
    1
          cmp   eax,ecx
          jg    @Notfound 
    //越界大于长度
          cmp   eax,
    1
          jl    @Notfound 
    //越界小于1
        @Exit:
          pop   ebx
          pop   esi
    end;

    常规优化算法:

    function CGPosChar(SubChar: Char ; SrcString: PChar; Len: Integer; Order:Boolean=True): Integer;
                    
    //  SubChar -> AL; SrcString -> EDX; Len -> ECX  Order -> [ebp+8]
    asm
          push esi
          push ebx
          push edx
          push edi
          test ecx, ecx
          jz   @Notfound
          test edx, edx
          jz   @Notfound
          xor  ebx,ebx
          mov  ah, al
          mov  bx, ax
          shl  eax, $
    10
          
    or   ebx, eax
          xor  esi,esi
          mov eax, [ebp
    +8]
          test eax,eax   
    //为0则表示Order =false
          je  @Reverse   
    //为0倒序查找
          
        
    {---------------顺序查找------------------}
        @OrderCmp:
          mov  eax,[edx
    +esi]
          xor  eax,ebx
          lea  edi, [eax
    -$01010101]
          
    not  eax
          
    and  eax, edi
          
    and  eax, $80808080
          jnz   @OrderFound
          add  esi,
    4
          cmp  esi,ecx
          jl   @OrderCmp
          jmp  @Notfound

        
    {---------------倒序查找------------------}
        @Reverse:
          mov   esi,ecx
          sub   esi,
    4
        @ReverseCmp:
          mov   eax,[edx
    +esi]
          xor   eax,ebx
          lea   edi, [eax
    -$01010101]
          
    not   eax
          
    and   eax, edi
          
    and   eax, $80808080
          jnz   @ReverseFound
          sub   esi,
    4
          cmp   esi,
    -4
          jg    @ReverseCmp
        @Notfound:
          xor   eax, eax
          jmp   @Exit
        @OrderFound:
          bsf   eax, eax
          jmp   @SetRet
        @ReverseFound:
          bsr   eax, eax
        @SetRet:
          shr   eax, 
    3
          add   eax,esi
          add   eax,
    1
          cmp   eax,ecx
          jg    @Notfound 
    //越界大于长度
          cmp   eax,
    1
          jl    @Notfound 
    //越界小于1
        @Exit:
          pop   edi
          pop   edx
          pop   ebx
          pop   esi
    end;


  • 相关阅读:
    ASP.NET MVC 音乐商店 目录
    ASP.NET MVC 音乐商店 9. 注册和结账
    SQL查询入门(下篇)
    【译】Asp.net MVC并不仅仅只是Linq to SQL
    SQL查询入门(中篇)
    【译】利用.LESS来提高CSS
    Silverlight 入门学习笔记(1)Silverlight是什么
    【译】详解Asp.net MVC DropDownLists
    Asp.net缓存简介
    SQL查询入门(上篇)
  • 原文地址:https://www.cnblogs.com/jxgxy/p/1788302.html
Copyright © 2011-2022 走看看