Guest User

Untitled

a guest
Mar 17th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.69 KB | None | 0 0
  1. square:
  2. .byte 48 ;0
  3. .byte 49 ;1
  4. .byte 50 ;2
  5. .byte 51 ;3
  6. .byte 52 ;4
  7. .byte 53 ;5
  8. .byte 54 ;6
  9. .byte 55 ;7
  10. .byte 56 ;8
  11. .byte 57 ;9
  12. .PytanieOPole:
  13. .string "Gracz %d, wpisz numer pola: "
  14. .FormatLiczby:
  15. .string "%d"
  16. .BladRuchu:
  17. .string "Niewlasciwy ruch."
  18. .Wygrana:
  19. .string " > \007 Gracz %d wygrywa! "
  20. .Remis:
  21. .string " > \007 Remis!"
  22. main:
  23. push rbp
  24. mov rbp, rsp
  25. sub rsp, 16
  26. mov DWORD PTR [rbp-4], 1 ;Gracz 1 rozpoczyna
  27. .PetlaGlownaStart: ;Start petli
  28. call board ;Rysuj plansze
  29. mov eax, DWORD PTR [rbp-4] ;Oblicz gracza
  30. and eax, 1
  31. test eax, eax
  32. je .CzyGracz2
  33. mov eax, 1
  34. jmp .GraczDalej
  35. .CzyGracz2:
  36. mov eax, 2
  37. .GraczDalej:
  38. mov DWORD PTR [rbp-4], eax
  39. mov eax, DWORD PTR [rbp-4]
  40. mov esi, eax
  41. mov edi, OFFSET FLAT:.PytanieOPole
  42. mov eax, 0
  43. call printf ;Wyswietl zapytanie o pole
  44. lea rax, [rbp-16]
  45. mov rsi, rax
  46. mov edi, OFFSET FLAT:.FormatLiczby
  47. mov eax, 0
  48. call scanf ;Wczytaj # pola
  49. cmp DWORD PTR [rbp-4], 1
  50. jne .ZnakX ;Jaki bedzie znak gracza?
  51. mov eax, 88
  52. jmp .PoSprawdzeniuZnaku
  53. .ZnakX:
  54. mov eax, 79
  55. .PoSprawdzeniuZnaku:
  56. mov BYTE PTR [rbp-5], al
  57. mov eax, DWORD PTR [rbp-16]
  58. cmp eax, 1
  59. jne .JakNie1
  60. movzx eax, BYTE PTR square[rip+1]
  61. cmp al, 49
  62. jne .JakNie1
  63. movzx eax, BYTE PTR [rbp-5]
  64. mov BYTE PTR square[rip+1], al
  65. jmp .Dalej
  66. .JakNie1: ;Ten fragment powtarza
  67. mov eax, DWORD PTR [rbp-16] ;sie w nastepnych sekcjach
  68. cmp eax, 2 ;pliku, spokojnie mozesz
  69. jne .JakNie2 ;go pominac, jesli go
  70. movzx eax, BYTE PTR square[rip+2] ;rozumiesz.
  71. cmp al, 50
  72. jne .JakNie2
  73. movzx eax, BYTE PTR [rbp-5]
  74. mov BYTE PTR square[rip+2], al
  75. jmp .Dalej
  76. .JakNie2:
  77. mov eax, DWORD PTR [rbp-16]
  78. cmp eax, 3
  79. jne .JakNie3
  80. movzx eax, BYTE PTR square[rip+3]
  81. cmp al, 51
  82. jne .JakNie3
  83. movzx eax, BYTE PTR [rbp-5]
  84. mov BYTE PTR square[rip+3], al
  85. jmp .Dalej
  86. .JakNie3:
  87. mov eax, DWORD PTR [rbp-16]
  88. cmp eax, 4
  89. jne .JakNie4
  90. movzx eax, BYTE PTR square[rip+4]
  91. cmp al, 52
  92. jne .JakNie4
  93. movzx eax, BYTE PTR [rbp-5]
  94. mov BYTE PTR square[rip+4], al
  95. jmp .Dalej
  96. .JakNie4:
  97. mov eax, DWORD PTR [rbp-16]
  98. cmp eax, 5
  99. jne .JakNie5
  100. movzx eax, BYTE PTR square[rip+5]
  101. cmp al, 53
  102. jne .JakNie5
  103. movzx eax, BYTE PTR [rbp-5]
  104. mov BYTE PTR square[rip+5], al
  105. jmp .Dalej
  106. .JakNie5:
  107. mov eax, DWORD PTR [rbp-16]
  108. cmp eax, 6
  109. jne .JakNie6
  110. movzx eax, BYTE PTR square[rip+6]
  111. cmp al, 54
  112. jne .JakNie6
  113. movzx eax, BYTE PTR [rbp-5]
  114. mov BYTE PTR square[rip+6], al
  115. jmp .Dalej
  116. .JakNie6:
  117. mov eax, DWORD PTR [rbp-16]
  118. cmp eax, 7
  119. jne .JakNie7
  120. movzx eax, BYTE PTR square[rip+7]
  121. cmp al, 55
  122. jne .JakNie7
  123. movzx eax, BYTE PTR [rbp-5]
  124. mov BYTE PTR square[rip+7], al
  125. jmp .Dalej
  126. .JakNie7:
  127. mov eax, DWORD PTR [rbp-16]
  128. cmp eax, 8
  129. jne .JakNie8
  130. movzx eax, BYTE PTR square[rip+8]
  131. cmp al, 56
  132. jne .JakNie8
  133. movzx eax, BYTE PTR [rbp-5]
  134. mov BYTE PTR square[rip+8], al
  135. jmp .Dalej
  136. .JakNie8:
  137. mov eax, DWORD PTR [rbp-16]
  138. cmp eax, 9
  139. jne .JakNie9
  140. movzx eax, BYTE PTR square[rip+9]
  141. cmp al, 57
  142. jne .JakNie9
  143. movzx eax, BYTE PTR [rbp-5]
  144. mov BYTE PTR square[rip+9], al
  145. jmp .Dalej
  146. .JakNie9:
  147. mov edi, OFFSET FLAT:.BladRuchu
  148. mov eax, 0
  149. call printf ;Zly ruch podany
  150. sub DWORD PTR [rbp-4], 1
  151. call getchar ;Zaczekaj
  152. .Dalej:
  153. call checkwin ;Czy wygrano?
  154. mov DWORD PTR [rbp-12], eax
  155. add DWORD PTR [rbp-4], 1
  156. cmp DWORD PTR [rbp-12], -1
  157. jne .Koniec
  158. jmp .PetlaGlownaStart
  159. .Koniec
  160. call board ;Rysuj jeszcze raz
  161. cmp DWORD PTR [rbp-12], 1
  162. jne .KoniecRemis
  163. sub DWORD PTR [rbp-4], 1 ;Odejmij od # gracza 1
  164. mov eax, DWORD PTR [rbp-4]
  165. mov esi, eax
  166. mov edi, OFFSET FLAT:.Wygrana ;Gracz wygral
  167. mov eax, 0
  168. call printf ;Wyswietl tekst
  169. jmp .Zaczekaj
  170. .KoniecRemis:
  171. mov edi, OFFSET FLAT:.Remis ;Remis, nie ma potrzeby
  172. mov eax, 0 ;zadnych obliczen
  173. call printf
  174. .Zaczekaj:
  175. call getchar ;Uruchom getchar dla spowolnienia
  176. mov eax, 0 ;eax = 0
  177. leave ;return eax;
  178. ret
  179. checkwin: ;Czy wygrano
  180. push rbp
  181. mov rbp, rsp
  182. movzx edx, BYTE PTR square[rip+1] ;#1 warunek
  183. movzx eax, BYTE PTR square[rip+2]
  184. cmp dl, al ;Jesli #1 kombinacja ok,
  185. jne .CheckwinJesliNie1
  186. movzx edx, BYTE PTR square[rip+2]
  187. movzx eax, BYTE PTR square[rip+3]
  188. cmp dl, al
  189. jne .CheckwinJesliNie1 ;Ten kod bedzie bardzo repetytywny
  190. mov eax, 1 ;wiec nie bede go komentowal
  191. jmp .Zwracaj1
  192. .CheckwinJesliNie1:
  193. movzx edx, BYTE PTR square[rip+4]
  194. movzx eax, BYTE PTR square[rip+5]
  195. cmp dl, al
  196. jne .CheckwinJesliNie2
  197. movzx edx, BYTE PTR square[rip+5]
  198. movzx eax, BYTE PTR square[rip+6]
  199. cmp dl, al
  200. jne .CheckwinJesliNie2
  201. mov eax, 1
  202. jmp .Zwracaj1
  203. .CheckwinJesliNie2:
  204. movzx edx, BYTE PTR square[rip+7]
  205. movzx eax, BYTE PTR square[rip+8]
  206. cmp dl, al
  207. jne .CheckwinJesliNie3
  208. movzx edx, BYTE PTR square[rip+8]
  209. movzx eax, BYTE PTR square[rip+9]
  210. cmp dl, al
  211. jne .CheckwinJesliNie3
  212. mov eax, 1
  213. jmp .Zwracaj1
  214. .CheckwinJesliNie3:
  215. movzx edx, BYTE PTR square[rip+1]
  216. movzx eax, BYTE PTR square[rip+4]
  217. cmp dl, al
  218. jne .CheckwinJesliNie4
  219. movzx edx, BYTE PTR square[rip+4]
  220. movzx eax, BYTE PTR square[rip+7]
  221. cmp dl, al
  222. jne .CheckwinJesliNie4
  223. mov eax, 1
  224. jmp .Zwracaj1
  225. .CheckwinJesliNie4:
  226. movzx edx, BYTE PTR square[rip+2]
  227. movzx eax, BYTE PTR square[rip+5]
  228. cmp dl, al
  229. jne .CheckwinJesliNie5
  230. movzx edx, BYTE PTR square[rip+5]
  231. movzx eax, BYTE PTR square[rip+8]
  232. cmp dl, al
  233. jne .CheckwinJesliNie5
  234. mov eax, 1
  235. jmp .Zwracaj1
  236. .CheckwinJesliNie5:
  237. movzx edx, BYTE PTR square[rip+3]
  238. movzx eax, BYTE PTR square[rip+6]
  239. cmp dl, al
  240. jne .CheckwinJesliNie6
  241. movzx edx, BYTE PTR square[rip+6]
  242. movzx eax, BYTE PTR square[rip+9]
  243. cmp dl, al
  244. jne .CheckwinJesliNie6
  245. mov eax, 1
  246. jmp .Zwracaj1
  247. .CheckwinJesliNie6:
  248. movzx edx, BYTE PTR square[rip+1]
  249. movzx eax, BYTE PTR square[rip+5]
  250. cmp dl, al
  251. jne .CheckwinJesliNie7
  252. movzx edx, BYTE PTR square[rip+5]
  253. movzx eax, BYTE PTR square[rip+9]
  254. cmp dl, al
  255. jne .CheckwinJesliNie7
  256. mov eax, 1
  257. jmp .Zwracaj1
  258. .CheckwinJesliNie7:
  259. movzx edx, BYTE PTR square[rip+3]
  260. movzx eax, BYTE PTR square[rip+5]
  261. cmp dl, al
  262. jne .CheckwinJesliNie8
  263. movzx edx, BYTE PTR square[rip+5]
  264. movzx eax, BYTE PTR square[rip+7]
  265. cmp dl, al
  266. jne .CheckwinJesliNie8
  267. mov eax, 1
  268. jmp .Zwracaj1
  269. .CheckwinJesliNie8: ;Ciekawszy fragment
  270. movzx eax, BYTE PTR square[rip+1] ;sprawdzanie czy zawartosc
  271. cmp al, 49 ;komorki to liczba
  272. je .ZwracajMinus1 ;(tak jak jest na starcie)
  273. movzx eax, BYTE PTR square[rip+2]
  274. cmp al, 50
  275. je .ZwracajMinus1
  276. movzx eax, BYTE PTR square[rip+3]
  277. cmp al, 51
  278. je .ZwracajMinus1
  279. movzx eax, BYTE PTR square[rip+4]
  280. cmp al, 52
  281. je .ZwracajMinus1
  282. movzx eax, BYTE PTR square[rip+5]
  283. cmp al, 53
  284. je .ZwracajMinus1
  285. movzx eax, BYTE PTR square[rip+6]
  286. cmp al, 54
  287. je .ZwracajMinus1
  288. movzx eax, BYTE PTR square[rip+7]
  289. cmp al, 55
  290. je .ZwracajMinus1
  291. movzx eax, BYTE PTR square[rip+8]
  292. cmp al, 56
  293. je .ZwracajMinus1
  294. movzx eax, BYTE PTR square[rip+9]
  295. cmp al, 57
  296. je .ZwracajMinus1
  297. mov eax, 0
  298. jmp .Zwracaj1
  299. .ZwracajMinus1:
  300. mov eax, -1
  301. .Zwracaj1:
  302. pop rbp
  303. ret
  304. .NazwaGry:
  305. .string "\n\tKolko i krzyzyk (by Krzysztof Szewczyk, Copyright (C) 2018)"
  306. .KtoGra:
  307. .string "Gracz 1 (X) - Gracz 2 (O)\n"
  308. .DoRysowaniaPlanszy1:
  309. .string " | | "
  310. .DoRysowaniaPlanszy2:
  311. .string " %c | %c | %c \n"
  312. .DoRysowaniaPlanszy3:
  313. .string "_____|_____|_____"
  314. .FormatLiczby0:
  315. .string " | | \n"
  316. board: ;Rysuj plansze
  317. push rbp
  318. mov rbp, rsp
  319. mov edi, OFFSET FLAT:.NazwaGry
  320. call puts
  321. mov edi, OFFSET FLAT:.KtoGra
  322. call puts
  323. mov edi, OFFSET FLAT:.DoRysowaniaPlanszy1
  324. call puts ;Wyswietlaj wszystkie stringi po kolei
  325. movzx eax, BYTE PTR square[rip+3]
  326. movsx ecx, al ;Kod stanie sie nieco repetytywny (obsluga bardzo prostej grafiki)
  327. movzx eax, BYTE PTR square[rip+2]
  328. movsx edx, al
  329. movzx eax, BYTE PTR square[rip+1]
  330. movsx eax, al
  331. mov esi, eax
  332. mov edi, OFFSET FLAT:.DoRysowaniaPlanszy2
  333. mov eax, 0
  334. call printf
  335. mov edi, OFFSET FLAT:.DoRysowaniaPlanszy3
  336. call puts
  337. mov edi, OFFSET FLAT:.DoRysowaniaPlanszy1
  338. call puts
  339. movzx eax, BYTE PTR square[rip+6]
  340. movsx ecx, al
  341. movzx eax, BYTE PTR square[rip+5]
  342. movsx edx, al
  343. movzx eax, BYTE PTR square[rip+4]
  344. movsx eax, al
  345. mov esi, eax
  346. mov edi, OFFSET FLAT:.DoRysowaniaPlanszy2
  347. mov eax, 0
  348. call printf
  349. mov edi, OFFSET FLAT:.DoRysowaniaPlanszy3
  350. call puts
  351. mov edi, OFFSET FLAT:.DoRysowaniaPlanszy1
  352. call puts
  353. movzx eax, BYTE PTR square[rip+9]
  354. movsx ecx, al
  355. movzx eax, BYTE PTR square[rip+8]
  356. movsx edx, al
  357. movzx eax, BYTE PTR square[rip+7]
  358. movsx eax, al
  359. mov esi, eax
  360. mov edi, OFFSET FLAT:.DoRysowaniaPlanszy2
  361. mov eax, 0
  362. call printf
  363. mov edi, OFFSET FLAT:.FormatLiczby0
  364. call puts ;Rysowanie ZAKONCZONO
  365. nop
  366. pop rbp
  367. ret
Add Comment
Please, Sign In to add comment