Advertisement
kamasazi99

asm3 lab 4 wariant 1 (prawie dziala)

Nov 13th, 2019
287
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.89 KB | None | 0 0
  1. .386
  2. .MODEL flat, STDCALL
  3.  
  4. ExitProcess PROTO :DWORD
  5. ReadConsoleA PROTO: DWORD,:DWORD,:DWORD,:DWORD,:DWORD
  6. GetStdHandle PROTO:DWORD
  7. wsprintfA PROTO C:VARARG
  8. WriteConsoleA PROTO: DWORD,:DWORD,:DWORD,:DWORD,:DWORD
  9. .data
  10.  
  11. varA DWORD 0
  12. varOne DWORD 0
  13. varTwo DWORD 0
  14. varThree DWORD 0
  15. varFour DWORD 0
  16. odczyt DWORD ?
  17. odczytane_znaki DWORD ?
  18. varPOMOC DWORD 0
  19. tekst_do_wypisania BYTE "Wynik obliczen dla funkcji y=(a+b)*c/d to:%i",0
  20. format BYTE "%i",0
  21. buffor_pomocy byte 255 dup(0)
  22. rinp DWORD 0
  23. wpis DWORD ?
  24. .code
  25. main proc
  26. push -11
  27. call GetStdHandle
  28. mov wpis,eax
  29.  
  30.  
  31. push -10
  32. call GetStdHandle
  33. mov odczyt,eax
  34.  
  35. push 0
  36. push offset odczytane_znaki
  37. push 13
  38. push offset varOne
  39. push odczyt
  40. call ReadConsoleA
  41.  
  42. mov ebx,offset varOne
  43. add ebx,odczytane_znaki
  44. mov [ebx-2],BYTE PTR 0
  45.  
  46.  
  47. mov eax, offset varOne
  48. push offset varOne
  49. call atoi
  50. mov varOne, EAX
  51.  
  52.  
  53. push 0
  54. push offset odczytane_znaki
  55. push 13
  56. push offset varTwo
  57. push odczyt
  58. call ReadConsoleA
  59.  
  60. mov ebx,offset varTwo
  61. add ebx,odczytane_znaki
  62. mov [ebx-2],BYTE PTR 0
  63.  
  64. mov eax, offset varTwo
  65. push offset varTwo
  66. call atoi
  67. mov varTwo, EAX
  68.  
  69. push 0
  70. push offset odczytane_znaki
  71. push 13
  72. push offset varThree
  73. push odczyt
  74. call ReadConsoleA
  75.  
  76. mov ebx,offset varThree
  77. add ebx,odczytane_znaki
  78. mov [ebx-2],BYTE PTR 0
  79.  
  80. mov eax, offset varThree
  81. push offset varThree
  82. call atoi
  83. mov varThree, EAX
  84.  
  85. push 0
  86. push offset odczytane_znaki
  87. push 13
  88. push offset varFour
  89. push odczyt
  90. call ReadConsoleA
  91.  
  92. mov ebx,offset varFour
  93. add ebx,odczytane_znaki
  94. mov [ebx-2],BYTE PTR 0
  95.  
  96. mov eax, offset varFour
  97. push offset varFour
  98. call atoi
  99. mov varFour, EAX
  100.  
  101. ;po zdobyciu wartosci obliczam sobie wariant tak o
  102. mov eax,varOne
  103. add eax,varTwo ; JEDYNKA + DWOJKA => EAX
  104. mov varPOMOC,eax ; JEDYNKA + DWOJKA => POMOC
  105. mov eax,varThree
  106. mul varPOMOC ; (JEDYNKA + DWOJKA)*TROJKA => eax
  107. mov ebx, varFour
  108. div ebx ;(JEDYNKA + DWOJKA)*TROJKA/CZWORKA => eax
  109. mov varPomoc,eax ;tak dla mnie
  110.  
  111.  
  112. ; ”Wynik obliczeń dla funkcji y=<wariant>to: <wynik>”
  113.  
  114. push varPomoc
  115. push offset tekst_do_wypisania
  116. push offset buffor_pomocy
  117. call wsprintfA
  118. add ESP,12
  119. mov rinp,eax
  120.  
  121.  
  122. push 0
  123. push offset rinp
  124. push 100 ;dziala ale cos tu jest źle bo dopiero przy drugim wypisaniu jest wynik wiec do poprawy
  125. push offset varPomoc
  126. push wpis
  127. call WriteConsoleA
  128.  
  129. push 0
  130. call ExitProcess
  131.  
  132. main endp
  133.  
  134. atoi proc uses esi edx inputBuffAddr:DWORD
  135. mov esi, inputBuffAddr
  136. xor edx, edx
  137. xor EAX, EAX
  138. mov AL, BYTE PTR [esi]
  139. cmp eax, 2dh
  140. je parseNegative
  141.  
  142. .Repeat
  143. lodsb
  144. .Break .if !eax
  145. imul edx, edx, 10
  146. sub eax, "0"
  147. add edx, eax
  148. .Until 0
  149. mov EAX, EDX
  150. jmp endatoi
  151.  
  152. parseNegative:
  153. inc esi
  154. .Repeat
  155. lodsb
  156. .Break .if !eax
  157. imul edx, edx, 10
  158. sub eax, "0"
  159. add edx, eax
  160. .Until 0
  161.  
  162. xor EAX,EAX
  163. sub EAX, EDX
  164. jmp endatoi
  165.  
  166. endatoi:
  167. ret
  168. atoi endp
  169. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement