Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. format PE GUI 4.0
  2. entry start
  3.  
  4. include 'win32a.inc'
  5.  
  6. BUFFER_SIZE     = 100
  7.  
  8.  
  9. section '.data' data readable writeable
  10.         num1 db BUFFER_SIZE dup(?)
  11.         num2 db BUFFER_SIZE dup(?)
  12.         res db BUFFER_SIZE dup(?)
  13.  
  14.         num1FileName db 'C:\111\num1.txt',0
  15.         num2FileName db 'C:\111\num2.txt',0
  16.         resFileName db 'C:\111\res.txt',0
  17.  
  18.         lpBytesNum1 dd ?
  19.         lpBytesNum2 dd ?
  20.         lpBytesRes dd ?
  21.         hFile dd ?
  22.  
  23. section '.code' code readable executable
  24.         proc OpenAndRead, fn,buf,bufSize,bytesRead
  25.              push    eax
  26.              invoke CreateFile, [fn], GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
  27.              mov [hFile], eax
  28.  
  29.              ;invoke  GetFileSize, [hFile], 0
  30.              ;mov [fSize], eax
  31.  
  32.              invoke ReadFile, [hFile], [buf], [bufSize], [bytesRead], 0
  33.              invoke CloseHandle, [hFile]
  34.  
  35.              pop     eax
  36.              ret
  37.         endp
  38.  
  39.         proc OpenAndWrite, fn,buf,bufSize,bytesRead
  40.              push    eax
  41.              invoke CreateFile, [fn], GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
  42.              mov [hFile], eax
  43.  
  44.              ;invoke  GetFileSize, [hFile], 0
  45.              ;mov [fSize], eax
  46.  
  47.              invoke WriteFile, [hFile], [buf], [bufSize], [bytesRead], 0
  48.              invoke CloseHandle, [hFile]
  49.  
  50.              pop     eax
  51.              ret
  52.         endp
  53.  
  54.  
  55.         proc ByteMul num1, res, numberLen, mul_byte
  56.              push eax bx edi ecx
  57.              pushf
  58.              xor bx, bx
  59.              cld
  60.  
  61.              mov al,  byte[mul_byte]
  62.              mov ecx, [numberLen]
  63.              mov edi, [num1]
  64.              .loop:
  65.                 push ax
  66.                 mul byte[edi]
  67.                 add al, bl
  68.                 mov bl, ah
  69.                 mov ah, 0
  70.                 stdcall ByteAdd, [res], [numberLen], eax
  71.  
  72.                 jnc .not_over
  73.                 inc bl
  74.                 .not_over:
  75.                   inc [res]
  76.                   inc edi
  77.                   pop ax
  78.              loop .loop
  79.              popf
  80.              pop ecx edi bx eax
  81.              ret
  82.         endp
  83.  
  84.  
  85.         proc ByteAdd, res, numberLen, add_byte
  86.              push eax edi ecx
  87.              pushf
  88.              cld
  89.              clc
  90.              mov ah, byte[add_byte]
  91.  
  92.              mov ecx, [numberLen]
  93.              mov edi, [res]
  94.              .loop:
  95.                 mov al, ah
  96.                 add al, [edi]
  97.                 jc .over
  98.                 stosb
  99.                 jmp .end
  100.              .over:
  101.                 mov ah, 1
  102.                 stosb
  103.              loop .loop
  104.              .end:
  105.                 popf
  106.                 pop ecx edi eax
  107.              ret
  108.         endp
  109.        
  110.  
  111.        proc Mult, number1, number2, result, numberLen
  112.             push eax ecx edi
  113.             cld
  114.             clc
  115.  
  116.             xor eax, eax
  117.             mov ecx, [numberLen]
  118.             .loop:
  119.                 mov edi, [number1]
  120.                 mov al, [edi]
  121.                 mov ah, 0
  122.                 stdcall ByteMul, [number2], [result], [numberLen], eax
  123.                 inc [number1]
  124.                 inc [result]
  125.             loop .loop
  126.             pop edi ecx eax
  127.             ret
  128.        endp
  129.  
  130.  
  131.         proc Sum, number1, number2, result, numberLen
  132.              push ax edi ecx
  133.              cld
  134.              clc
  135.              mov ecx, [numberLen]
  136.              .loop:
  137.                 mov edi, [number1]
  138.                 mov al,  [edi]
  139.                 mov edi, [number2]
  140.                 jc .over
  141.                 add al, [edi]
  142.                 jmp .save_digit
  143.               .over:
  144.                 add al, 1
  145.                 jc .over_again
  146.                 add al, [edi]
  147.                 jmp .save_digit
  148.               .over_again:
  149.                 mov al, [edi]
  150.               .save_digit:
  151.                 mov edi, [result]
  152.                 mov [edi], al
  153.                 inc [number1]
  154.                 inc [number2]
  155.                 inc [result]
  156.              loop .loop
  157.  
  158.  
  159.              pop ecx edi ax
  160.              ret
  161.         endp
  162.  
  163.         start:
  164.              stdcall OpenAndRead, num1FileName, num1, BUFFER_SIZE, lpBytesNum1
  165.              stdcall OpenAndRead, num2FileName, num2, BUFFER_SIZE, lpBytesNum2
  166.  
  167.              stdcall Mult, num1, num2, res, BUFFER_SIZE
  168.              stdcall OpenAndWrite, resFileName, res, BUFFER_SIZE, lpBytesRes
  169.              invoke ExitProcess, 0
  170.  
  171. section '.idata' import data readable writeable
  172.  
  173.         library kernel,'KERNEL32.DLL'
  174.  
  175.         import  kernel,\
  176.                 CreateFile, 'CreateFileA',\
  177.                 WriteFile, 'WriteFile',\
  178.                 ReadFile, 'ReadFile',\
  179.                 CloseHandle, 'CloseHandle',\
  180.                 ExitProcess,'ExitProcess'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement