kamasazi99

asm lab 5, 4 zad

Nov 25th, 2019
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. .Model flat,STDCALL
  3. ExitProcess PROTO:DWORD
  4. WriteConsoleA PROTO: DWORD,:DWORD,:DWORD,:DWORD,:DWORD
  5. ReadConsoleA PROTO: DWORD,:DWORD,:DWORD,:DWORD,:DWORD
  6. GetStdHandle PROTO:DWORD
  7. GetTickCount PROTO
  8. nseed PROTO :DWORD
  9. nrandom PROTO :DWORD
  10. wsprintfA PROTO C :VARARG
  11. includelib masm32.lib
  12. .data
  13. varLicznik DWORD 0
  14. varRange DWORD 0
  15. varWylosowana DWORD 0
  16. znaki DWORD ?
  17. wypisz DWORD ?
  18. odczyt DWORD ?
  19. varTrafione BYTE "Trafieles za :%i ",0
  20. rinp DWORD 0
  21. buffor BYTE 255 dup(0)
  22. varZakres BYTE "Podaj zakres",0
  23. varLower byte "Nie trafiles, podaj mniejsza liczbe",0
  24. varGreater byte "Nie trafiles, podaj wieksza liczbe",0
  25. varUzytkownik DWORD 0
  26. .code
  27. main proc
  28. push -11
  29. call GetStdHandle
  30. mov wypisz,eax
  31.  
  32. push-10
  33. call GetStdHandle
  34. mov odczyt,eax
  35.  
  36. push 0
  37. push offset znaki
  38. push lengthof varZakres
  39. push offset varZakres
  40. push wypisz
  41. call WriteConsoleA
  42.  
  43.  
  44.  
  45.  
  46. push 0
  47. push offset znaki
  48. push 13
  49. push offset varRange
  50. push odczyt
  51. call ReadConsoleA
  52.  
  53. mov ebx, offset varRange
  54. add ebx,znaki
  55. mov [ebx-2],BYTE PTR 0
  56.  
  57. ;zamiana na normalna
  58. push offset varRange
  59. call atoi
  60. mov varRange,eax
  61.  
  62. call GetTickCount
  63.     push eax  
  64.     call nseed
  65.     push varRange
  66.     call nrandom
  67.     mov varWylosowana,EAX
  68.  
  69.  
  70.     uzytkownik_wartosc:
  71. push 0
  72. push offset znaki
  73. push 13
  74. push offset varUzytkownik
  75. push odczyt
  76. call ReadConsoleA
  77.  
  78. mov ebx, offset varUzytkownik
  79. add ebx,znaki
  80. mov [ebx-2],BYTE PTR 0
  81.  
  82. ;zamiana na normalna
  83. push offset varUzytkownik
  84. call atoi
  85. mov varUzytkownik,eax
  86. mov eax,varWylosowana
  87.  
  88. cmp eax,varUzytkownik
  89. je finisz
  90. jl lower
  91. jg greater
  92.  
  93. lower:
  94. push 0
  95. push offset znaki
  96. push lengthof varLower
  97. push offset varLower
  98. push wypisz
  99. call WriteConsoleA
  100. add varLicznik,1
  101. jmp uzytkownik_wartosc
  102.  
  103. greater:
  104. push 0
  105. push offset znaki
  106. push lengthof varGreater
  107. push offset varGreater
  108. push wypisz
  109. call WriteConsoleA
  110. add varLicznik,1
  111. jmp uzytkownik_wartosc
  112.  
  113. finisz:
  114. ;add varLicznik,48
  115. ;tekst z i
  116. push varLicznik
  117. push offset varTrafione
  118. push offset buffor
  119. call wsprintfA
  120. add ESP,12
  121. mov rinp,eax
  122.  
  123.  
  124.  
  125. push 0
  126. push offset rinp
  127. push 50
  128. push offset buffor
  129. push wypisz
  130. call WriteConsoleA
  131.  
  132.  
  133. push 0
  134. call ExitProcess
  135.  
  136. main endp
  137.  
  138. atoi proc uses esi edx inputBuffAddr:DWORD
  139.     mov esi, inputBuffAddr
  140.     xor edx, edx
  141.     xor EAX, EAX
  142.     mov AL, BYTE PTR [esi]
  143.     cmp eax, 2dh
  144.     je parseNegative
  145.  
  146.     .Repeat
  147.         lodsb
  148.         .Break .if !eax
  149.         imul edx, edx, 10
  150.         sub eax, "0"
  151.         add edx, eax
  152.     .Until 0
  153.     mov EAX, EDX
  154.     jmp endatoi
  155.  
  156.     parseNegative:
  157.     inc esi
  158.     .Repeat
  159.         lodsb
  160.         .Break .if !eax
  161.         imul edx, edx, 10
  162.         sub eax, "0"
  163.         add edx, eax
  164.     .Until 0
  165.  
  166.     xor EAX,EAX
  167.     sub EAX, EDX
  168.     jmp endatoi
  169.  
  170.     endatoi:
  171.     ret
  172. atoi endp
  173. END
Add Comment
Please, Sign In to add comment