Advertisement
slawekssj4

asm lab 4 zad 3

Nov 17th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. .MODEL flat, STDCALL
  3.  
  4. GetStdHandle PROTO :DWORD
  5. WriteConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
  6. ReadConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
  7. ExitProcess PROTO :DWORD
  8.  
  9. wsprintfA PROTO C :VARARG ; funny printer lololo
  10. .data
  11. ;some funny print call??
  12.     varRESOULT DWORD 0
  13.     resoultScheme BYTE "Wynik: %i-%i*%i/%i = %i", 0
  14.     schemeBuffer BYTE 255 dup(0)
  15.     schemeLength DWORD 0
  16.  
  17.  
  18. ;
  19.     podaj_znaki_str BYTE "Wprowadz liczbe ",13,10
  20.  
  21.  
  22.     inH DWORD 0 ;input handle
  23.     outH DWORD 0 ;output handle
  24.     runtimeLength DWORD 0
  25.  
  26.     varINPUT DWORD 0
  27.     ;zmienne wazne
  28.     varA DWORD 0
  29.     varB DWORD 0
  30.     varC DWORD 0
  31.     varD DWORD 0
  32.  
  33. .code
  34. main proc
  35. ;configg
  36.     push -11
  37.     call GetStdHandle
  38.     mov outH,EAX
  39.  
  40.     push -10
  41.     call GetStdHandle
  42.     mov inH,EAX
  43. ;configg
  44. ;1
  45.     ;OUT TO CONSOLEEE
  46.     push 0
  47.     push OFFSET runtimeLength
  48.     push 15d
  49.     push OFFSET podaj_znaki_str
  50.     push outH
  51.     call WriteConsoleA
  52.  
  53.     ;READ FUNCTION
  54.     push 0
  55.     push OFFSET runtimeLength
  56.     push 13
  57.     push OFFSET varINPUT
  58.     push inH
  59.     call ReadConsoleA
  60.  
  61.     mov ebx, OFFSET varINPUT
  62.     add ebx, runtimeLength
  63.     mov[ebx-2], BYTE PTR 0  ; thanks to it atoi won't calculate whole memory lol
  64.  
  65.     push OFFSET varINPUT
  66.     call atoi
  67.     mov varA, eax
  68. ;--
  69. ;2
  70.     ;OUT TO CONSOLEEE
  71.     push 0
  72.     push OFFSET runtimeLength
  73.     push 15d
  74.     push OFFSET podaj_znaki_str
  75.     push outH
  76.     call WriteConsoleA
  77.  
  78.     ;READ FUNCTION
  79.     push 0
  80.     push OFFSET runtimeLength
  81.     push 13
  82.     push OFFSET varINPUT
  83.     push inH
  84.     call ReadConsoleA
  85.  
  86.     mov ebx, OFFSET varINPUT
  87.     add ebx, runtimeLength
  88.     mov[ebx-2], BYTE PTR 0  ; thanks to it atoi won't calculate whole memory lol
  89.  
  90.     push OFFSET varINPUT
  91.     call atoi
  92.     mov varB, eax
  93. ;--
  94. ;3
  95.     ;OUT TO CONSOLEEE
  96.     push 0
  97.     push OFFSET runtimeLength
  98.     push 15d
  99.     push OFFSET podaj_znaki_str
  100.     push outH
  101.     call WriteConsoleA
  102.  
  103.     ;READ FUNCTION
  104.     push 0
  105.     push OFFSET runtimeLength
  106.     push 13
  107.     push OFFSET varINPUT
  108.     push inH
  109.     call ReadConsoleA
  110.  
  111.     mov ebx, OFFSET varINPUT
  112.     add ebx, runtimeLength
  113.     mov[ebx-2], BYTE PTR 0  ; thanks to it atoi won't calculate whole memory lol
  114.  
  115.     push OFFSET varINPUT
  116.     call atoi
  117.     mov varC, eax
  118. ;--
  119. ;4
  120.     ;OUT TO CONSOLEEE
  121.     push 0
  122.     push OFFSET runtimeLength
  123.     push 15
  124.     push OFFSET podaj_znaki_str
  125.     push outH
  126.     call WriteConsoleA
  127.  
  128.     ;READ FUNCTION
  129.     push 0
  130.     push OFFSET runtimeLength
  131.     push 13
  132.     push OFFSET varINPUT
  133.     push inH
  134.     call ReadConsoleA
  135.  
  136.     mov ebx, OFFSET varINPUT
  137.     add ebx, runtimeLength
  138.     mov[ebx-2], BYTE PTR 0  ; thanks to it atoi won't calculate whole memory lol
  139.  
  140.     push OFFSET varINPUT
  141.     call atoi
  142.     mov varD, eax
  143. ;--
  144.  
  145. ;SOME CALCULATIONS HAHAHA
  146.  
  147. mov eax, varB
  148. mov ecx, varC
  149. mul ecx ; = B*C -> EAX
  150. mov ecx, varD
  151. div ecx ; = B*C/D -> EAX
  152. mov ecx, eax ; B*C/D -> EAX -> ECX
  153. mov eax, varA
  154. sub eax, ecx ; = A - B*C/D
  155. ;wypisywankooooooo?????
  156.  
  157.    
  158.     mov varRESOULT, eax
  159.  
  160.     push varRESOULT
  161.     push varD
  162.     push varC
  163.     push varB
  164.     push varA
  165.    
  166.     push OFFSET resoultScheme
  167.     push OFFSET schemeBuffer
  168.     call wsprintfA
  169.     add ESP, 12 ; clear stackeerererererer
  170.     mov schemeLength, eax
  171.  
  172. ;DUDUDUUDUDUDUDUDUDUUDUD
  173.  
  174.     ;OUT TO CONSOLEEE
  175.     push 0
  176.     push OFFSET runtimeLength
  177.     push 20d
  178.     push OFFSET schemeBuffer ; this to print xd?
  179.     push outH
  180.     call WriteConsoleA
  181.  
  182.     push 0
  183.     call ExitProcess
  184. main endp
  185. ;ATOI...
  186.  
  187. atoi proc uses esi edx inputBuffAddr:DWORD
  188.     mov esi, inputBuffAddr
  189.     xor edx, edx
  190.     xor EAX, EAX
  191.     mov AL, BYTE PTR [esi]
  192.     cmp eax, 2dh
  193.     je parseNegative
  194.  
  195.     .Repeat
  196.         lodsb
  197.         .Break .if !eax
  198.         imul edx, edx, 10
  199.         sub eax, "0"
  200.         add edx, eax
  201.     .Until 0
  202.     mov EAX, EDX
  203.     jmp endatoi
  204.  
  205.     parseNegative:
  206.     inc esi
  207.     .Repeat
  208.         lodsb
  209.         .Break .if !eax
  210.         imul edx, edx, 10
  211.         sub eax, "0"
  212.         add edx, eax
  213.     .Until 0
  214.  
  215.     xor EAX,EAX
  216.     sub EAX, EDX
  217.     jmp endatoi
  218.  
  219.     endatoi:
  220.     ret
  221. atoi endp
  222. ;ATOI...
  223. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement