Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- format PE GUI 4.0
- entry start
- include 'win32a.inc'
- BUFFER_SIZE = 100
- section '.data' data readable writeable
- num1 db BUFFER_SIZE dup(?)
- num2 db BUFFER_SIZE dup(?)
- res db BUFFER_SIZE dup(?)
- num1FileName db 'C:\111\num1.txt',0
- num2FileName db 'C:\111\num2.txt',0
- resFileName db 'C:\111\res.txt',0
- lpBytesNum1 dd ?
- lpBytesNum2 dd ?
- lpBytesRes dd ?
- hFile dd ?
- section '.code' code readable executable
- proc OpenAndRead, fn,buf,bufSize,bytesRead
- push eax
- invoke CreateFile, [fn], GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
- mov [hFile], eax
- ;invoke GetFileSize, [hFile], 0
- ;mov [fSize], eax
- invoke ReadFile, [hFile], [buf], [bufSize], [bytesRead], 0
- invoke CloseHandle, [hFile]
- pop eax
- ret
- endp
- proc OpenAndWrite, fn,buf,bufSize,bytesRead
- push eax
- invoke CreateFile, [fn], GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
- mov [hFile], eax
- ;invoke GetFileSize, [hFile], 0
- ;mov [fSize], eax
- invoke WriteFile, [hFile], [buf], [bufSize], [bytesRead], 0
- invoke CloseHandle, [hFile]
- pop eax
- ret
- endp
- proc ByteMul num1, res, numberLen, mul_byte
- push eax bx edi ecx
- pushf
- xor bx, bx
- cld
- mov al, byte[mul_byte]
- mov ecx, [numberLen]
- mov edi, [num1]
- .loop:
- push ax
- mul byte[edi]
- add al, bl
- mov bl, ah
- mov ah, 0
- stdcall ByteAdd, [res], [numberLen], eax
- jnc .not_over
- inc bl
- .not_over:
- inc [res]
- inc edi
- pop ax
- loop .loop
- popf
- pop ecx edi bx eax
- ret
- endp
- proc ByteAdd, res, numberLen, add_byte
- push eax edi ecx
- pushf
- cld
- clc
- mov ah, byte[add_byte]
- mov ecx, [numberLen]
- mov edi, [res]
- .loop:
- mov al, ah
- add al, [edi]
- jc .over
- stosb
- jmp .end
- .over:
- mov ah, 1
- stosb
- loop .loop
- .end:
- popf
- pop ecx edi eax
- ret
- endp
- proc Mult, number1, number2, result, numberLen
- push eax ecx edi
- cld
- clc
- xor eax, eax
- mov ecx, [numberLen]
- .loop:
- mov edi, [number1]
- mov al, [edi]
- mov ah, 0
- stdcall ByteMul, [number2], [result], [numberLen], eax
- inc [number1]
- inc [result]
- loop .loop
- pop edi ecx eax
- ret
- endp
- proc Sum, number1, number2, result, numberLen
- push ax edi ecx
- cld
- clc
- mov ecx, [numberLen]
- .loop:
- mov edi, [number1]
- mov al, [edi]
- mov edi, [number2]
- jc .over
- add al, [edi]
- jmp .save_digit
- .over:
- add al, 1
- jc .over_again
- add al, [edi]
- jmp .save_digit
- .over_again:
- mov al, [edi]
- .save_digit:
- mov edi, [result]
- mov [edi], al
- inc [number1]
- inc [number2]
- inc [result]
- loop .loop
- pop ecx edi ax
- ret
- endp
- start:
- stdcall OpenAndRead, num1FileName, num1, BUFFER_SIZE, lpBytesNum1
- stdcall OpenAndRead, num2FileName, num2, BUFFER_SIZE, lpBytesNum2
- stdcall Mult, num1, num2, res, BUFFER_SIZE
- stdcall OpenAndWrite, resFileName, res, BUFFER_SIZE, lpBytesRes
- invoke ExitProcess, 0
- section '.idata' import data readable writeable
- library kernel,'KERNEL32.DLL'
- import kernel,\
- CreateFile, 'CreateFileA',\
- WriteFile, 'WriteFile',\
- ReadFile, 'ReadFile',\
- CloseHandle, 'CloseHandle',\
- ExitProcess,'ExitProcess'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement