Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ;
  2. ; ” ©« ¤«ï à ¡®âë á® áâப®¢ë¬¨ äã­ªæ¨ï¬¨
  3. ;
  4.  
  5. ; str_len (str1)
  6. ;   „«¨­  áâப¨ (¢®§¢à é ¥âáï ¢ eax)
  7.  
  8. ; str_cat (str1, str2)
  9. ;   „®¡ ¢«¥­¨¥ ª áâப¥ st1 áâப¨ str2
  10.  
  11. ; str_n_cat (str1, str2, n_len)
  12. ;   „®¡ ¢«¥­¨¥ ª áâப¥ st1 áâப¨ str2. …᫨ áâப  str2 ¤«¨­­¥¥ 祬 n_len, â® ¤®¡ ¢«ïîâáï ¯¥à¢ë¥ n_len ᨬ¢®«®¢.
  13.  
  14. ; conv_str_to_int (buf)
  15. ;   à¥®¡à §®¢ ­¨¥ áâப¨ buf ¢ ç¨á«® (¢®§¢à é ¥âáï ¢ eax)
  16.  
  17. ; convert_int_to_str (len)
  18. ;   à¥®¡à §®¢ ­¨¥ ç¨á«  (eax) ¢ áâபã (edi). len - ¤«¨­­  áâப¨ edi, ª®â®àãî ¬®¦­® ¨á¯®«ì§®¢ âì ¤«ï ¯à¥®¡à §®¢ ­¨ï.
  19.  
  20.  
  21. ;output:
  22. ; eax = strlen
  23. align 4
  24. proc str_len, str1:dword
  25.         mov eax,[str1]
  26.         @@:
  27.                 cmp byte[eax],0
  28.                 je @f
  29.                 inc eax
  30.                 jmp @b
  31.         @@:
  32.         sub eax,[str1]
  33.         ret
  34. endp
  35.  
  36. align 4
  37. proc str_cat uses eax ecx edi esi, str1:dword, str2:dword
  38.         mov esi,[str2]
  39.         stdcall str_len,esi
  40.         mov ecx,eax
  41.         inc ecx
  42.         mov edi,[str1]
  43.         stdcall str_len,edi
  44.         add edi,eax
  45.         cld
  46.         repne movsb
  47.         ret
  48. endp
  49.  
  50. align 4
  51. proc str_n_cat uses eax ecx edi esi, str1:dword, str2:dword, n_len:dword
  52.         mov esi,[str2]
  53.         mov ecx,[n_len]
  54.         mov edi,[str1]
  55.         stdcall str_len,edi
  56.         add edi,eax
  57.         cld
  58.         repne movsb
  59.         mov byte[edi],0
  60.         ret
  61. endp
  62.  
  63. ;input:
  64. ; buf - 㪠§ â¥«ì ­  áâபã, ç¨á«® ¤®«¦­® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç­®¬ ¢¨¤¥
  65. ;output:
  66. ; eax - ç¨á«®
  67. align 4
  68. proc conv_str_to_int uses ebx ecx esi, buf:dword
  69.         xor eax,eax
  70.         xor ebx,ebx
  71.         mov esi,[buf]
  72.         ;®¯à¥¤¥«¥­¨¥ ®âà¨æ â¥«ì­ëå ç¨á¥«
  73.         xor ecx,ecx
  74.         inc ecx
  75.         cmp byte[esi],'-'
  76.         jne @f
  77.                 dec ecx
  78.                 inc esi
  79.         @@:
  80.  
  81.         cmp word[esi],'0x'
  82.         je .load_digit_16
  83.  
  84.         .load_digit_10: ;áç¨â뢠­¨¥ 10-â¨ç­ëå æ¨äà
  85.                 mov bl,byte[esi]
  86.                 cmp bl,'0'
  87.                 jl @f
  88.                 cmp bl,'9'
  89.                 jg @f
  90.                         sub bl,'0'
  91.                         imul eax,10
  92.                         add eax,ebx
  93.                         inc esi
  94.                         jmp .load_digit_10
  95.         jmp @f
  96.  
  97.         .load_digit_16: ;áç¨â뢠­¨¥ 16-à¨ç­ëå æ¨äà
  98.                 add esi,2
  99.         .cycle_16:
  100.                 mov bl,byte[esi]
  101.                 cmp bl,'0'
  102.                 jl @f
  103.                 cmp bl,'f'
  104.                 jg @f
  105.                 cmp bl,'9'
  106.                 jle .us1
  107.                         cmp bl,'A'
  108.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
  109.                 .us1: ;á®áâ ¢­®¥ ãá«®¢¨¥
  110.                 cmp bl,'F'
  111.                 jle .us2
  112.                         cmp bl,'a'
  113.                         jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
  114.                         sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥àå­¨© ॣ¨áâà, ¤«ï ã¯à®é¥­¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
  115.                 .us2: ;á®áâ ¢­®¥ ãá«®¢¨¥
  116.                         sub bl,'0'
  117.                         cmp bl,9
  118.                         jle .cor1
  119.                                 sub bl,7 ;convert 'A' to '10'
  120.                         .cor1:
  121.                         shl eax,4
  122.                         add eax,ebx
  123.                         inc esi
  124.                         jmp .cycle_16
  125.         @@:
  126.         or ecx,ecx ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
  127.         jnz @f
  128.                 neg eax
  129.                 inc eax
  130.         @@:
  131.         ret
  132. endp
  133.  
  134. ;input:
  135. ; eax - ç¨á«®
  136. ; edi - ¡ãä¥à ¤«ï áâப¨
  137. ; len - ¤«¨­­  ¡ãä¥à 
  138. ;output:
  139. align 4
  140. proc convert_int_to_str, len:dword
  141. pushad
  142.         mov esi,[len]
  143.         add esi,edi
  144.         dec esi
  145.         bt eax,31
  146.         jae @f
  147.                 ;¥á«¨ ç¨á«® ®âà¨æ â¥«ì­®¥
  148.                 neg eax
  149.                 ;inc eax ;???
  150.                 mov byte[edi],'-'
  151.                 inc edi
  152.         @@:
  153.         call .str
  154. popad
  155.         ret
  156. endp
  157.  
  158. align 4
  159. .str:
  160.         mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
  161.         ;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
  162.         cmp eax,ecx ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
  163.         jb @f
  164.                 xor edx,edx ;®ç¨áâ¨âì edx
  165.                 div ecx   ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
  166.                 push edx  ;¯®«®¦¨âì ¢ á⥪
  167.                 ;dec edi  ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
  168.                 call .str ;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
  169.                 pop eax
  170.         @@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
  171.         cmp edi,esi
  172.         jge @f
  173.                 or al,0x30 ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥  ç¥¬ ¤¢¥ ¢ëè¥
  174.                 stosb      ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
  175.                 mov byte[edi],0 ;¢ ª®­¥æ áâப¨ áâ ¢¨¬ 0, çâ®-¡ë ­¥ ¢ë« §¨« ¬ãá®à
  176.         @@:
  177.         ret        ;¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
  178.