home *** CD-ROM | disk | FTP | other *** search
/ ftp.sberbank.sumy.ua / 2014.11.ftp.sberbank.sumy.ua.tar / ftp.sberbank.sumy.ua / incoming / 1 / datedir.asm < prev    next >
Assembly Source File  |  2014-02-08  |  3KB  |  187 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.   mov eax, 12
  62.   mov edx,[ebp+8]
  63.   dec edx
  64.   mov edi, [ebp+12]
  65.  
  66. CatStringsLoc_cat_strings:
  67.   add eax,4
  68.   mov esi, [ebp+eax]
  69.   push eax
  70.   invoke GetStringLengthLoc, [ebp+eax]
  71.   mov ecx, eax
  72.   pop eax
  73.   rep movsb
  74.   dec edx
  75.   jnz CatStringsLoc_cat_strings
  76.  
  77.   popf
  78.   pop esi
  79.   pop edi
  80.  
  81.   mov ecx, [ebp+8]
  82.   mov edx,[esp+4]
  83.   pop ebp
  84.   inc ecx
  85.   CatStringsLoc_clear_stack:
  86.   pop eax
  87.   loop CatStringsLoc_clear_stack 
  88.  
  89.   mov [esp], edx    
  90.   ret
  91.  
  92. IntToString proc lpBuff:DWORD, Val:DWORD, Zero:DWORD
  93.      push ebx
  94.      push edi  
  95.      push esi
  96.  
  97.      dec Zero
  98.      mov ebx,10
  99.      mov edi, lpBuff
  100.      mov esi, edi 
  101.      mov eax, Val
  102.  
  103. IntToString_div:
  104.      mov esi,edi
  105.      add esi,10
  106.      dec esi
  107.      mov ecx,10     
  108.  
  109. IntToString_div_shift:
  110.      mov  dl,BYTE PTR[esi]
  111.      mov BYTE PTR [esi+1],dl 
  112.      dec esi
  113.      loop IntToString_div_shift
  114.  
  115.      xor edx,edx 
  116.      div ebx
  117.      add dl,"0"
  118.      mov [edi],dl 
  119.      dec Zero 
  120.      test eax,eax
  121.      jnz IntToString_div
  122.      cmp Zero, 0
  123.      jnl IntToString_div 
  124.  
  125.      pop esi 
  126.      pop edi
  127.      pop ebx
  128.      ret 
  129. IntToString endp
  130.  
  131. SetMemoryLoc proc lpMem:DWORD, Val:DWORD, Count:DWORD 
  132.  
  133.       pushf
  134.       push edi 
  135.  
  136.       cld
  137.       mov edi, lpMem
  138.       mov eax, Val
  139.       mov ecx, Count
  140.       rep stosb
  141.  
  142.       pop edi
  143.       popf
  144.       ret 
  145. SetMemoryLoc endp
  146.  
  147. CreateCurrentDateDirectoryLoc proc
  148.  LOCAL cBuffer[100]:BYTE
  149.  LOCAL sysTime:SYSTEMTIME
  150.  LOCAL Date[50]:BYTE
  151.  
  152.        
  153.         invoke SetMemoryLoc, addr cBuffer, 0, 100
  154.  
  155.         invoke GetLocalTime, addr sysTime 
  156.  
  157.         invoke SetMemoryLoc, addr Date, 0, 50
  158.  
  159.         mov eax,0
  160.         mov ax, sysTime.wDay 
  161.         invoke IntToString, addr Date[0], eax,2
  162.  
  163.         and eax, 0 
  164.         mov ax, sysTime.wMonth
  165.         invoke IntToString, addr Date[15], eax,2
  166.  
  167.         xor ecx, ecx
  168.         mov cx, sysTime.wYear
  169.         invoke IntToString, addr Date[30], ecx,0    
  170.  
  171.  
  172.         lea eax, Date[30]
  173.         push eax 
  174.         lea eax, Date[15]
  175.         push eax
  176.         lea eax, Date[0]
  177.         push eax
  178.         lea eax, cBuffer
  179.         push eax
  180.         push 4 
  181.         call CatStringsLoc 
  182.    
  183.         invoke CreateDirectory, addr cBuffer, 0
  184.  
  185.         ret 
  186. CreateCurrentDateDirectoryLoc endp
  187. end start