Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .386
- .MODEL flat, STDCALL
- GetStdHandle PROTO :DWORD
- WriteConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
- ReadConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
- ExitProcess PROTO :DWORD
- wsprintfA PROTO C :VARARG ; funny printer lololo
- .data
- ;some funny print call??
- varRESOULT DWORD 0
- resoultScheme BYTE "Wynik: %i-%i*%i/%i = %i", 0
- schemeBuffer BYTE 255 dup(0)
- schemeLength DWORD 0
- ;
- podaj_znaki_str BYTE "Wprowadz liczbe ",13,10
- inH DWORD 0 ;input handle
- outH DWORD 0 ;output handle
- runtimeLength DWORD 0
- varINPUT DWORD 0
- ;zmienne wazne
- varA DWORD 0
- varB DWORD 0
- varC DWORD 0
- varD DWORD 0
- .code
- main proc
- ;configg
- push -11
- call GetStdHandle
- mov outH,EAX
- push -10
- call GetStdHandle
- mov inH,EAX
- ;configg
- ;1
- ;OUT TO CONSOLEEE
- push 0
- push OFFSET runtimeLength
- push 15d
- push OFFSET podaj_znaki_str
- push outH
- call WriteConsoleA
- ;READ FUNCTION
- push 0
- push OFFSET runtimeLength
- push 13
- push OFFSET varINPUT
- push inH
- call ReadConsoleA
- mov ebx, OFFSET varINPUT
- add ebx, runtimeLength
- mov[ebx-2], BYTE PTR 0 ; thanks to it atoi won't calculate whole memory lol
- push OFFSET varINPUT
- call atoi
- mov varA, eax
- ;--
- ;2
- ;OUT TO CONSOLEEE
- push 0
- push OFFSET runtimeLength
- push 15d
- push OFFSET podaj_znaki_str
- push outH
- call WriteConsoleA
- ;READ FUNCTION
- push 0
- push OFFSET runtimeLength
- push 13
- push OFFSET varINPUT
- push inH
- call ReadConsoleA
- mov ebx, OFFSET varINPUT
- add ebx, runtimeLength
- mov[ebx-2], BYTE PTR 0 ; thanks to it atoi won't calculate whole memory lol
- push OFFSET varINPUT
- call atoi
- mov varB, eax
- ;--
- ;3
- ;OUT TO CONSOLEEE
- push 0
- push OFFSET runtimeLength
- push 15d
- push OFFSET podaj_znaki_str
- push outH
- call WriteConsoleA
- ;READ FUNCTION
- push 0
- push OFFSET runtimeLength
- push 13
- push OFFSET varINPUT
- push inH
- call ReadConsoleA
- mov ebx, OFFSET varINPUT
- add ebx, runtimeLength
- mov[ebx-2], BYTE PTR 0 ; thanks to it atoi won't calculate whole memory lol
- push OFFSET varINPUT
- call atoi
- mov varC, eax
- ;--
- ;4
- ;OUT TO CONSOLEEE
- push 0
- push OFFSET runtimeLength
- push 15
- push OFFSET podaj_znaki_str
- push outH
- call WriteConsoleA
- ;READ FUNCTION
- push 0
- push OFFSET runtimeLength
- push 13
- push OFFSET varINPUT
- push inH
- call ReadConsoleA
- mov ebx, OFFSET varINPUT
- add ebx, runtimeLength
- mov[ebx-2], BYTE PTR 0 ; thanks to it atoi won't calculate whole memory lol
- push OFFSET varINPUT
- call atoi
- mov varD, eax
- ;--
- ;SOME CALCULATIONS HAHAHA
- mov eax, varB
- mov ecx, varC
- mul ecx ; = B*C -> EAX
- mov ecx, varD
- div ecx ; = B*C/D -> EAX
- mov ecx, eax ; B*C/D -> EAX -> ECX
- mov eax, varA
- sub eax, ecx ; = A - B*C/D
- ;wypisywankooooooo?????
- mov varRESOULT, eax
- push varRESOULT
- push varD
- push varC
- push varB
- push varA
- push OFFSET resoultScheme
- push OFFSET schemeBuffer
- call wsprintfA
- add ESP, 12 ; clear stackeerererererer
- mov schemeLength, eax
- ;DUDUDUUDUDUDUDUDUDUUDUD
- ;OUT TO CONSOLEEE
- push 0
- push OFFSET runtimeLength
- push 20d
- push OFFSET schemeBuffer ; this to print xd?
- push outH
- call WriteConsoleA
- push 0
- call ExitProcess
- main endp
- ;ATOI...
- atoi proc uses esi edx inputBuffAddr:DWORD
- mov esi, inputBuffAddr
- xor edx, edx
- xor EAX, EAX
- mov AL, BYTE PTR [esi]
- cmp eax, 2dh
- je parseNegative
- .Repeat
- lodsb
- .Break .if !eax
- imul edx, edx, 10
- sub eax, "0"
- add edx, eax
- .Until 0
- mov EAX, EDX
- jmp endatoi
- parseNegative:
- inc esi
- .Repeat
- lodsb
- .Break .if !eax
- imul edx, edx, 10
- sub eax, "0"
- add edx, eax
- .Until 0
- xor EAX,EAX
- sub EAX, EDX
- jmp endatoi
- endatoi:
- ret
- atoi endp
- ;ATOI...
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement