home *** CD-ROM | disk | FTP | other *** search
/ ftp.sberbank.sumy.ua / 2014.11.ftp.sberbank.sumy.ua.tar / ftp.sberbank.sumy.ua / incoming / 1 / helloLib2.asm < prev    next >
Assembly Source File  |  2014-02-08  |  3KB  |  189 lines

  1.     .386
  2.     .model flat, stdcall
  3.     option casemap :none                  ; case sensitive
  4.  
  5.     include \masm32\include\windows.inc
  6.     include \masm32\include\kernel32.inc
  7.     include \masm32\include\user32.inc
  8.     include \masm32\macros\macros.asm
  9.  
  10.     includelib \masm32\lib\kernel32.lib
  11.     includelib \masm32\lib\user32.lib
  12.  
  13.     SetMemoryLoc PROTO :DWORD, :DWORD, :DWORD 
  14.     GetStringLengthLoc PROTO :DWORD
  15.     IntToString PROTO :DWORD, :DWORD, :DWORD
  16.     CreateCurrentDateDirectoryLoc PROTO 
  17.  
  18.     
  19.  
  20. .data
  21.  EVK           db "Evgeney Victorovich Kupin 27 April 1982",0
  22.  
  23. .code
  24.  
  25. start:
  26.  
  27.    invoke CreateCurrentDateDirectoryLoc
  28.  
  29.     exit
  30.  
  31.    
  32. GetStringLengthLoc proc lpStr:DWORD
  33.  
  34.  push edi
  35.  pushf 
  36.  
  37.  cld
  38.  xor eax,eax
  39.  mov ecx, 65536 
  40.  mov edi, lpStr
  41.  repne scasb
  42.  
  43.  mov eax,65536-1 
  44.  sub eax, ecx  
  45.  
  46.  popf
  47.  pop edi 
  48.  
  49.  ret
  50. GetStringLengthLoc endp
  51.  
  52.  
  53. CatStringsLoc:                     ; [esp+0] ret, [esp]
  54.   push ebp
  55.   mov ebp, esp
  56.      
  57.   push edi
  58.   push esi
  59.   pushf
  60.  
  61.   cld
  62.   mov eax, 12
  63.   mov edx,[ebp+8]
  64.   dec edx
  65.   mov edi, [ebp+12]
  66.  
  67. CatStringsLoc_cat_strings:
  68.   add eax,4
  69.   mov esi, [ebp+eax]
  70.   push eax
  71.   invoke GetStringLengthLoc, [ebp+eax]
  72.   mov ecx, eax
  73.   pop eax
  74.   rep movsb
  75.   dec edx
  76.   jnz CatStringsLoc_cat_strings
  77.  
  78.   popf
  79.   pop esi
  80.   pop edi
  81.  
  82.   mov ecx, [ebp+8]
  83.   mov edx,[esp+4]
  84.   pop ebp
  85.   inc ecx
  86.   shl ecx, 2
  87.   add esp, ecx          ;  CatStringsLoc_clear_stack:
  88.                         ;  pop eax
  89.                         ;  loop CatStringsLoc_clear_stack 
  90.  
  91.   mov [esp], edx    
  92.   ret
  93.  
  94. IntToString proc lpBuff:DWORD, Val:DWORD, Zero:DWORD
  95.      push ebx
  96.      push edi  
  97.      push esi
  98.  
  99.      dec Zero
  100.      mov ebx,10
  101.      mov edi, lpBuff
  102.      mov esi, edi 
  103.      mov eax, Val
  104.  
  105. IntToString_div:
  106.      mov esi,edi
  107.      add esi,10
  108.      dec esi
  109.      mov ecx,10     
  110.  
  111. IntToString_div_shift:
  112.      mov  dl,BYTE PTR[esi]
  113.      mov BYTE PTR [esi+1],dl 
  114.      dec esi
  115.      loop IntToString_div_shift
  116.  
  117.      xor edx,edx 
  118.      div ebx
  119.      add dl,"0"
  120.      mov [edi],dl 
  121.      dec Zero 
  122.      test eax,eax
  123.      jnz IntToString_div
  124.      cmp Zero, 0
  125.      jnl IntToString_div 
  126.  
  127.      pop esi 
  128.      pop edi
  129.      pop ebx
  130.      ret 
  131. IntToString endp
  132.  
  133. SetMemoryLoc proc lpMem:DWORD, Val:DWORD, Count:DWORD 
  134.  
  135.       pushf
  136.       push edi 
  137.  
  138.       cld
  139.       mov edi, lpMem
  140.       mov eax, Val
  141.       mov ecx, Count
  142.       rep stosb
  143.  
  144.       pop edi
  145.       popf
  146.       ret 
  147. SetMemoryLoc endp
  148.  
  149. CreateCurrentDateDirectoryLoc proc
  150.  LOCAL cBuffer[100]:BYTE
  151.  LOCAL sysTime:SYSTEMTIME
  152.  LOCAL Date[50]:BYTE
  153.  
  154.        
  155.         invoke SetMemoryLoc, addr cBuffer, 0, 100
  156.  
  157.         invoke GetLocalTime, addr sysTime 
  158.  
  159.         invoke SetMemoryLoc, addr Date, 0, 50
  160.  
  161.         mov eax,0
  162.         mov ax, sysTime.wDay 
  163.         invoke IntToString, addr Date[0], eax,2
  164.  
  165.         and eax, 0 
  166.         mov ax, sysTime.wMonth
  167.         invoke IntToString, addr Date[15], eax,2
  168.  
  169.         xor ecx, ecx
  170.         mov cx, sysTime.wYear
  171.         invoke IntToString, addr Date[30], ecx,0    
  172.  
  173.  
  174.         lea eax, Date[30]
  175.         push eax 
  176.         lea eax, Date[15]
  177.         push eax
  178.         lea eax, Date[0]
  179.         push eax
  180.         lea eax, cBuffer
  181.         push eax
  182.         push 4 
  183.         call CatStringsLoc 
  184.    
  185.         invoke CreateDirectory, addr cBuffer, 0
  186.  
  187.         ret 
  188. CreateCurrentDateDirectoryLoc endp
  189. end start