Subversion Repositories Kolibri OS

Rev

Rev 4213 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; by ManHunter / PCL
  2. ; http://www.manhunter.ru
  3. ;-----------------------------------------------------
  4. ; ”ã­ªæ¨ï ¯®«ã祭¨ï ¤«¨­ë áâப¨ (Fast)
  5. ;-----------------------------------------------------
  6. ; lpStr - 㪠§ â¥«ì ­  áâபã ASCIIZ
  7. ;   ¢ë室¥: EAX - ¤«¨­  áâப¨ ¡¥§ ãç¥â  § ¢¥àè î饣®
  8. ; ­ã«¥¢®£® ¡ ©â 
  9. ;-----------------------------------------------------
  10. ;proc    _lstrlen lpStr:DWORD
  11. ;        mov     eax, [lpStr]
  12. ;        sub     eax, 4
  13. ;@@:
  14. ;        add     eax, 4
  15. ;        cmp     byte [eax], 0
  16. ;        je      .szlen_lb1
  17. ;        cmp     byte [eax+1], 0
  18. ;        je      .szlen_lb2
  19. ;        cmp     byte [eax+2], 0
  20. ;        je      .szlen_lb3
  21. ;        cmp     byte [eax+3], 0
  22. ;        jne     @b
  23. ;        sub     eax, [lpStr]
  24. ;        add     eax, 3
  25. ;        ret
  26. ;.szlen_lb3:
  27. ;        sub     eax, [lpStr]
  28. ;        add     eax, 2
  29. ;        ret
  30. ;.szlen_lb2:
  31. ;        sub     eax, [lpStr]
  32. ;        add     eax, 1
  33. ;        ret
  34. ;.szlen_lb1:
  35. ;        sub     eax, [lpStr]
  36. ;        ret
  37. ;endp
  38.  
  39. ;-----------------------------------------------------
  40. ; ”ã­ªæ¨ï ¯®«ã祭¨ï ¤«¨­ë áâப¨
  41. ;-----------------------------------------------------
  42. ; lpStr - 㪠§ â¥«ì ­  áâபã ASCIIZ
  43. ;   ¢ë室¥: EAX - ¤«¨­  áâப¨ ¡¥§ ãç¥â  § ¢¥àè î饣®
  44. ; ­ã«¥¢®£® ¡ ©â 
  45. ;-----------------------------------------------------
  46. ;proc    _lstrlen lpStr:DWORD
  47. ;        push    edi ecx
  48. ;  
  49. ;        cld
  50. ;        mov     edi,[lpStr]
  51. ;        xor     ecx,ecx
  52. ;        dec     ecx
  53. ;        xor     eax,eax
  54. ;        repne   scasb
  55. ;        not     ecx
  56. ;        dec     ecx
  57. ;        mov     eax,ecx
  58. ;  
  59. ;        pop     ecx edi
  60. ;        ret
  61. ;endp
  62.  
  63. ;-----------------------------------------------------
  64. ; ”ã­ªæ¨ï ¯®«ã祭¨ï ¤«¨­ë áâப¨
  65. ;-----------------------------------------------------
  66. ; lpStr - 㪠§ â¥«ì ­  áâபã ASCIIZ
  67. ;   ¢ë室¥: EAX - ¤«¨­  áâப¨ ¡¥§ ãç¥â  § ¢¥àè î饣®
  68. ; ­ã«¥¢®£® ¡ ©â 
  69. ;-----------------------------------------------------
  70. proc _lstrlen lpStr:DWORD
  71.         push    ebx
  72.         mov     ebx,[lpStr]
  73.         xor     eax,eax
  74.     @@: cmp     byte[ebx+eax],0
  75.         je      @f
  76.         inc     eax
  77.         jmp     @b
  78.     @@: pop     ebx
  79.         ret
  80. endp
  81.  
  82. ;-----------------------------------------------------
  83. ; ”ã­ªæ¨ï ¡ëáâண® á«¨ï­¨ï ¤¢ãå áâப
  84. ; ¨á¯®«ì§ãîâáï ä㭪樨 _lstrlen, _lstrcpy
  85. ;-----------------------------------------------------
  86. ; lpDst - 㪠§ â¥«ì ­  ¨á室­ãî áâபã ASCIIZ
  87. ; lpSrc - 㪠§ â¥«ì ­  ¤®¡ ¢«ï¥¬ãî áâபã ASCIIZ
  88. ;-----------------------------------------------------
  89. proc    _lstrcat lpDst:DWORD, lpSrc:DWORD
  90.         pusha
  91.  
  92.         stdcall _lstrlen,[lpDst]
  93.         add     eax,[lpDst]
  94.  
  95.         stdcall _lstrcpy,eax,[lpSrc]
  96.  
  97.         popa
  98.         ret
  99. endp
  100.  
  101. ;-----------------------------------------------------
  102. ; ”ã­ªæ¨ï ¡ëáâண® ª®¯¨à®¢ ­¨ï áâப¨
  103. ; ¨á¯®«ì§ãîâáï ä㭪樨 _lstrlen, _memcopy
  104. ;-----------------------------------------------------
  105. ; lpDst - 㪠§ â¥«ì ­  ¯à¨¥¬­¨ª
  106. ; lpSrc - 㪠§ â¥«ì ­  áâபã ASCIIZ
  107. ;-----------------------------------------------------
  108. proc    _lstrcpy lpDst:DWORD, lpSrc:DWORD
  109.         pusha
  110.  
  111.         stdcall _lstrlen,[lpSrc]
  112.         inc     eax
  113.         stdcall _memcopy,[lpDst],[lpSrc],eax
  114.  
  115.         popa
  116.         ret
  117. endp
  118.  
  119. ;-----------------------------------------------------
  120. ; ”ã­ªæ¨ï ¡ëáâண® ª®¯¨à®¢ ­¨ï ãç á⪠ ¯ ¬ïâ¨
  121. ;-----------------------------------------------------
  122. ; lpDst - 㪠§ â¥«ì ­  ¯à¨¥¬­¨ª
  123. ; lpSrc - 㪠§ â¥«ì ­  ¨áâ®ç­¨ª
  124. ; dSize - à §¬¥à ª®¯¨à㥬®£® ¡«®ª 
  125. ;-----------------------------------------------------
  126. proc    _memcopy lpDst:DWORD, lpSrc:DWORD, dSize:DWORD
  127.         pusha
  128.  
  129.         ; “áâ ­®¢¨âì 㪠§ â¥«¨ ­  ¨áâ®ç­¨ª ¨ ¯à¨¥¬­¨ª
  130.         cld
  131.         mov     edi,[lpDst]
  132.         mov     esi,[lpSrc]
  133.  
  134.         mov     ecx,[dSize]
  135.         push    ecx
  136.         ;  §¤¥«¨âì ­  4 ¨ ¯®«ãç¨âì ¤«¨­ã ¢ DWORD
  137.         shr     ecx,2
  138.         ; ‘ª®¯¨à®¢ âì ®á­®¢­ãî ç áâì áâப¨ DWORD' ¬¨
  139.         rep     movsd
  140.         pop     ecx
  141.         ; ®«ãç¨âì ®áâ â®ª ®â ¤¥«¥­¨ï ­  4
  142.         and     ecx,3
  143.         ; ‘ª®¯¨à®¢ âì ®áâ â®ª áâப¨ ¡ ©â ¬¨
  144.         rep     movsb
  145.  
  146.         popa
  147.         ret
  148. endp
  149.