Advertisement
Guest User

Noughts and Crosses in assembly

a guest
Apr 26th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. whatis_position:
  2.   push rbp
  3.   mov rbp, rsp
  4.   mov DWORD PTR [rbp-4], edi
  5.   mov eax, DWORD PTR [rbp-4]
  6.   cdqe
  7.   mov eax, DWORD PTR board[0+rax*4]
  8.   cmp eax, 1
  9.   je .L3
  10.   cmp eax, 1
  11.   jb .L4
  12.   cmp eax, 2
  13.   je .L5
  14.   jmp .L7
  15. .L4:
  16.   mov eax, 79
  17.   jmp .L1
  18. .L3:
  19.   mov eax, 88
  20.   jmp .L1
  21. .L5:
  22.   mov eax, 32
  23.   jmp .L1
  24. .L7:
  25. .L1:
  26.   pop rbp
  27.   ret
  28. .LC0:
  29.   .string "\n%c|%c|%c\n-----\n%c|%c|%c\n-----\n%c|%c|%c\n"
  30. display_board:
  31.   push rbp
  32.   mov rbp, rsp
  33.   push r15
  34.   push r14
  35.   push r13
  36.   push r12
  37.   push rbx
  38.   sub rsp, 24
  39.   mov edi, 3
  40.   call whatis_position
  41.   movsx eax, al
  42.   mov DWORD PTR [rbp-52], eax
  43.   mov edi, 2
  44.   call whatis_position
  45.   movsx r15d, al
  46.   mov edi, 1
  47.   call whatis_position
  48.   movsx r14d, al
  49.   mov edi, 6
  50.   call whatis_position
  51.   movsx r13d, al
  52.   mov edi, 5
  53.   call whatis_position
  54.   movsx ecx, al
  55.   mov DWORD PTR [rbp-56], ecx
  56.   mov edi, 4
  57.   call whatis_position
  58.   movsx esi, al
  59.   mov DWORD PTR [rbp-60], esi
  60.   mov edi, 9
  61.   call whatis_position
  62.   movsx r12d, al
  63.   mov edi, 8
  64.   call whatis_position
  65.   movsx ebx, al
  66.   mov edi, 7
  67.   call whatis_position
  68.   movsx eax, al
  69.   mov edx, DWORD PTR [rbp-52]
  70.   push rdx
  71.   push r15
  72.   push r14
  73.   push r13
  74.   mov r9d, DWORD PTR [rbp-56]
  75.   mov r8d, DWORD PTR [rbp-60]
  76.   mov ecx, r12d
  77.   mov edx, ebx
  78.   mov esi, eax
  79.   mov edi, OFFSET FLAT:.LC0
  80.   mov eax, 0
  81.   call printf
  82.   add rsp, 32
  83.   nop
  84.   lea rsp, [rbp-40]
  85.   pop rbx
  86.   pop r12
  87.   pop r13
  88.   pop r14
  89.   pop r15
  90.   pop rbp
  91.   ret
  92. initialise_board:
  93.   push rbp
  94.   mov rbp, rsp
  95.   mov DWORD PTR [rbp-4], 1
  96.   jmp .L10
  97. .L11:
  98.   mov eax, DWORD PTR [rbp-4]
  99.   cdqe
  100.   mov DWORD PTR board[0+rax*4], 2
  101.   add DWORD PTR [rbp-4], 1
  102. .L10:
  103.   cmp DWORD PTR [rbp-4], 9
  104.   jle .L11
  105.   nop
  106.   pop rbp
  107.   ret
  108. .LC1:
  109.   .string "\nCross, please press desired position on numpad > "
  110. .LC2:
  111.   .string "\nNought, please press desired position on numpad > "
  112. .LC3:
  113.   .string "ERROR"
  114. .LC4:
  115.   .string "%d"
  116. make_move:
  117.   push rbp
  118.   mov rbp, rsp
  119.   sub rsp, 32
  120.   mov DWORD PTR [rbp-20], edi
  121. .L17:
  122.   mov eax, DWORD PTR [rbp-20]
  123.   test eax, eax
  124.   je .L14
  125.   cmp eax, 1
  126.   jne .L19
  127.   mov edi, OFFSET FLAT:.LC1
  128.   mov eax, 0
  129.   call printf
  130.   jmp .L16
  131. .L14:
  132.   mov edi, OFFSET FLAT:.LC2
  133.   mov eax, 0
  134.   call printf
  135.   jmp .L16
  136. .L19:
  137.   mov edi, OFFSET FLAT:.LC3
  138.   mov eax, 0
  139.   call printf
  140. .L16:
  141.   lea rax, [rbp-4]
  142.   mov rsi, rax
  143.   mov edi, OFFSET FLAT:.LC4
  144.   mov eax, 0
  145.   call __isoc99_scanf
  146.   mov eax, DWORD PTR [rbp-4]
  147.   cdqe
  148.   mov eax, DWORD PTR board[0+rax*4]
  149.   cmp eax, 2
  150.   jne .L17
  151.   mov eax, DWORD PTR [rbp-4]
  152.   leave
  153.   ret
  154. .LC5:
  155.   .string "\nAI plays %d to win or block\n"
  156. .LC6:
  157.   .string "\nAI plays %d to fork or prevent a fork\n"
  158. .LC7:
  159.   .string "\nAI plays the centre"
  160. .LC8:
  161.   .string "\nAI plays the opposite corner"
  162. .LC9:
  163.   .string "\nAI plays 1"
  164. .LC10:
  165.   .string "\nAI plays 3"
  166. .LC11:
  167.   .string "\nAI plays 7"
  168. .LC12:
  169.   .string "\nAI plays 9"
  170. .LC13:
  171.   .string "\nAI plays 2"
  172. .LC14:
  173.   .string "\nAI plays 4"
  174. .LC15:
  175.   .string "\nAI plays 6"
  176. .LC16:
  177.   .string "\nAI plays 8"
  178. make_computer_move:
  179.   push rbp
  180.   mov rbp, rsp
  181.   add rsp, -128
  182.   mov DWORD PTR [rbp-116], edi
  183.   mov DWORD PTR [rbp-112], 1
  184.   mov DWORD PTR [rbp-108], 2
  185.   mov DWORD PTR [rbp-104], 3
  186.   mov DWORD PTR [rbp-100], 4
  187.   mov DWORD PTR [rbp-96], 5
  188.   mov DWORD PTR [rbp-92], 6
  189.   mov DWORD PTR [rbp-88], 7
  190.   mov DWORD PTR [rbp-84], 8
  191.   mov DWORD PTR [rbp-80], 9
  192.   mov DWORD PTR [rbp-76], 1
  193.   mov DWORD PTR [rbp-72], 4
  194.   mov DWORD PTR [rbp-68], 7
  195.   mov DWORD PTR [rbp-64], 2
  196.   mov DWORD PTR [rbp-60], 5
  197.   mov DWORD PTR [rbp-56], 8
  198.   mov DWORD PTR [rbp-52], 3
  199.   mov DWORD PTR [rbp-48], 6
  200.   mov DWORD PTR [rbp-44], 9
  201.   mov DWORD PTR [rbp-40], 1
  202.   mov DWORD PTR [rbp-36], 5
  203.   mov DWORD PTR [rbp-32], 9
  204.   mov DWORD PTR [rbp-28], 3
  205.   mov DWORD PTR [rbp-24], 5
  206.   mov DWORD PTR [rbp-20], 7
  207.   mov DWORD PTR [rbp-12], 0
  208.   mov DWORD PTR [rbp-16], 0
  209.   mov DWORD PTR [rbp-4], 0
  210.   jmp .L21
  211. .L26:
  212.   mov DWORD PTR [rbp-8], 0
  213.   jmp .L22
  214. .L25:
  215.   mov eax, DWORD PTR [rbp-8]
  216.   movsx rcx, eax
  217.   mov eax, DWORD PTR [rbp-4]
  218.   movsx rdx, eax
  219.   mov rax, rdx
  220.   add rax, rax
  221.   add rax, rdx
  222.   add rax, rcx
  223.   mov eax, DWORD PTR [rbp-112+rax*4]
  224.   cdqe
  225.   mov esi, DWORD PTR board[0+rax*4]
  226.   mov eax, DWORD PTR [rbp-8]
  227.   lea ecx, [rax+1]
  228.   mov edx, 1431655766
  229.   mov eax, ecx
  230.   imul edx
  231.   mov eax, ecx
  232.   sar eax, 31
  233.   sub edx, eax
  234.   mov eax, edx
  235.   add eax, eax
  236.   add eax, edx
  237.   sub ecx, eax
  238.   mov edx, ecx
  239.   movsx rcx, edx
  240.   mov eax, DWORD PTR [rbp-4]
  241.   movsx rdx, eax
  242.   mov rax, rdx
  243.   add rax, rax
  244.   add rax, rdx
  245.   add rax, rcx
  246.   mov eax, DWORD PTR [rbp-112+rax*4]
  247.   cdqe
  248.   mov eax, DWORD PTR board[0+rax*4]
  249.   cmp esi, eax
  250.   jne .L23
  251.   mov eax, DWORD PTR [rbp-8]
  252.   lea ecx, [rax+2]
  253.   mov edx, 1431655766
  254.   mov eax, ecx
  255.   imul edx
  256.   mov eax, ecx
  257.   sar eax, 31
  258.   sub edx, eax
  259.   mov eax, edx
  260.   add eax, eax
  261.   add eax, edx
  262.   sub ecx, eax
  263.   mov edx, ecx
  264.   movsx rcx, edx
  265.   mov eax, DWORD PTR [rbp-4]
  266.   movsx rdx, eax
  267.   mov rax, rdx
  268.   add rax, rax
  269.   add rax, rdx
  270.   add rax, rcx
  271.   mov eax, DWORD PTR [rbp-112+rax*4]
  272.   cdqe
  273.   mov eax, DWORD PTR board[0+rax*4]
  274.   cmp eax, 2
  275.   jne .L23
  276.   mov eax, DWORD PTR [rbp-8]
  277.   movsx rcx, eax
  278.   mov eax, DWORD PTR [rbp-4]
  279.   movsx rdx, eax
  280.   mov rax, rdx
  281.   add rax, rax
  282.   add rax, rdx
  283.   add rax, rcx
  284.   mov eax, DWORD PTR [rbp-112+rax*4]
  285.   cdqe
  286.   mov eax, DWORD PTR board[0+rax*4]
  287.   cmp eax, 2
  288.   je .L23
  289.   mov eax, DWORD PTR [rbp-8]
  290.   lea ecx, [rax+2]
  291.   mov edx, 1431655766
  292.   mov eax, ecx
  293.   imul edx
  294.   mov eax, ecx
  295.   sar eax, 31
  296.   sub edx, eax
  297.   mov eax, edx
  298.   add eax, eax
  299.   add eax, edx
  300.   sub ecx, eax
  301.   mov edx, ecx
  302.   movsx rcx, edx
  303.   mov eax, DWORD PTR [rbp-4]
  304.   movsx rdx, eax
  305.   mov rax, rdx
  306.   add rax, rax
  307.   add rax, rdx
  308.   add rax, rcx
  309.   mov eax, DWORD PTR [rbp-112+rax*4]
  310.   mov esi, eax
  311.   mov edi, OFFSET FLAT:.LC5
  312.   mov eax, 0
  313.   call printf
  314.   mov eax, DWORD PTR [rbp-8]
  315.   lea ecx, [rax+2]
  316.   mov edx, 1431655766
  317.   mov eax, ecx
  318.   imul edx
  319.   mov eax, ecx
  320.   sar eax, 31
  321.   sub edx, eax
  322.   mov eax, edx
  323.   add eax, eax
  324.   add eax, edx
  325.   sub ecx, eax
  326.   mov edx, ecx
  327.   movsx rcx, edx
  328.   mov eax, DWORD PTR [rbp-4]
  329.   movsx rdx, eax
  330.   mov rax, rdx
  331.   add rax, rax
  332.   add rax, rdx
  333.   add rax, rcx
  334.   mov eax, DWORD PTR [rbp-112+rax*4]
  335.   jmp .L20
  336. .L23:
  337.   add DWORD PTR [rbp-8], 1
  338. .L22:
  339.   cmp DWORD PTR [rbp-8], 2
  340.   jle .L25
  341.   add DWORD PTR [rbp-4], 1
  342. .L21:
  343.   cmp DWORD PTR [rbp-4], 7
  344.   jle .L26
  345.   mov DWORD PTR [rbp-4], 1
  346.   jmp .L27
  347. .L35:
  348.   mov DWORD PTR [rbp-8], 0
  349.   jmp .L28
  350. .L34:
  351.   mov eax, DWORD PTR [rbp-8]
  352.   movsx rcx, eax
  353.   mov eax, DWORD PTR [rbp-4]
  354.   movsx rdx, eax
  355.   mov rax, rdx
  356.   add rax, rax
  357.   add rax, rdx
  358.   add rax, rcx
  359.   mov eax, DWORD PTR [rbp-112+rax*4]
  360.   cdqe
  361.   mov esi, DWORD PTR board[0+rax*4]
  362.   mov eax, DWORD PTR [rbp-8]
  363.   lea ecx, [rax+1]
  364.   mov edx, 1431655766
  365.   mov eax, ecx
  366.   imul edx
  367.   mov eax, ecx
  368.   sar eax, 31
  369.   sub edx, eax
  370.   mov eax, edx
  371.   add eax, eax
  372.   add eax, edx
  373.   sub ecx, eax
  374.   mov edx, ecx
  375.   movsx rcx, edx
  376.   mov eax, DWORD PTR [rbp-4]
  377.   movsx rdx, eax
  378.   mov rax, rdx
  379.   add rax, rax
  380.   add rax, rdx
  381.   add rax, rcx
  382.   mov eax, DWORD PTR [rbp-112+rax*4]
  383.   cdqe
  384.   mov eax, DWORD PTR board[0+rax*4]
  385.   cmp esi, eax
  386.   jne .L29
  387.   mov eax, DWORD PTR [rbp-8]
  388.   lea ecx, [rax+2]
  389.   mov edx, 1431655766
  390.   mov eax, ecx
  391.   imul edx
  392.   mov eax, ecx
  393.   sar eax, 31
  394.   sub edx, eax
  395.   mov eax, edx
  396.   add eax, eax
  397.   add eax, edx
  398.   sub ecx, eax
  399.   mov edx, ecx
  400.   movsx rcx, edx
  401.   mov eax, DWORD PTR [rbp-4]
  402.   movsx rdx, eax
  403.   mov rax, rdx
  404.   add rax, rax
  405.   add rax, rdx
  406.   add rax, rcx
  407.   mov eax, DWORD PTR [rbp-112+rax*4]
  408.   cdqe
  409.   mov eax, DWORD PTR board[0+rax*4]
  410.   cmp eax, 2
  411.   je .L29
  412.   mov eax, DWORD PTR [rbp-8]
  413.   movsx rcx, eax
  414.   mov eax, DWORD PTR [rbp-4]
  415.   movsx rdx, eax
  416.   mov rax, rdx
  417.   add rax, rax
  418.   add rax, rdx
  419.   add rax, rcx
  420.   mov eax, DWORD PTR [rbp-112+rax*4]
  421.   cdqe
  422.   mov eax, DWORD PTR board[0+rax*4]
  423.   cmp eax, 2
  424.   jne .L29
  425.   mov eax, DWORD PTR [rbp-8]
  426.   movsx rcx, eax
  427.   mov eax, DWORD PTR [rbp-4]
  428.   movsx rdx, eax
  429.   mov rax, rdx
  430.   add rax, rax
  431.   add rax, rdx
  432.   add rax, rcx
  433.   mov eax, DWORD PTR [rbp-112+rax*4]
  434.   cmp DWORD PTR [rbp-12], eax
  435.   je .L30
  436.   mov eax, DWORD PTR [rbp-8]
  437.   lea ecx, [rax+1]
  438.   mov edx, 1431655766
  439.   mov eax, ecx
  440.   imul edx
  441.   mov eax, ecx
  442.   sar eax, 31
  443.   sub edx, eax
  444.   mov eax, edx
  445.   add eax, eax
  446.   add eax, edx
  447.   sub ecx, eax
  448.   mov edx, ecx
  449.   movsx rcx, edx
  450.   mov eax, DWORD PTR [rbp-4]
  451.   movsx rdx, eax
  452.   mov rax, rdx
  453.   add rax, rax
  454.   add rax, rdx
  455.   add rax, rcx
  456.   mov eax, DWORD PTR [rbp-112+rax*4]
  457.   cmp DWORD PTR [rbp-12], eax
  458.   jne .L31
  459. .L30:
  460.   mov eax, DWORD PTR [rbp-12]
  461.   mov esi, eax
  462.   mov edi, OFFSET FLAT:.LC6
  463.   mov eax, 0
  464.   call printf
  465.   mov eax, DWORD PTR [rbp-12]
  466.   jmp .L20
  467. .L31:
  468.   mov eax, DWORD PTR [rbp-8]
  469.   movsx rcx, eax
  470.   mov eax, DWORD PTR [rbp-4]
  471.   movsx rdx, eax
  472.   mov rax, rdx
  473.   add rax, rax
  474.   add rax, rdx
  475.   add rax, rcx
  476.   mov eax, DWORD PTR [rbp-112+rax*4]
  477.   cmp DWORD PTR [rbp-16], eax
  478.   je .L32
  479.   mov eax, DWORD PTR [rbp-8]
  480.   lea ecx, [rax+1]
  481.   mov edx, 1431655766
  482.   mov eax, ecx
  483.   imul edx
  484.   mov eax, ecx
  485.   sar eax, 31
  486.   sub edx, eax
  487.   mov eax, edx
  488.   add eax, eax
  489.   add eax, edx
  490.   sub ecx, eax
  491.   mov edx, ecx
  492.   movsx rcx, edx
  493.   mov eax, DWORD PTR [rbp-4]
  494.   movsx rdx, eax
  495.   mov rax, rdx
  496.   add rax, rax
  497.   add rax, rdx
  498.   add rax, rcx
  499.   mov eax, DWORD PTR [rbp-112+rax*4]
  500.   cmp DWORD PTR [rbp-16], eax
  501.   jne .L33
  502. .L32:
  503.   mov eax, DWORD PTR [rbp-16]
  504.   mov esi, eax
  505.   mov edi, OFFSET FLAT:.LC6
  506.   mov eax, 0
  507.   call printf
  508.   mov eax, DWORD PTR [rbp-16]
  509.   jmp .L20
  510. .L33:
  511.   mov eax, DWORD PTR [rbp-8]
  512.   movsx rcx, eax
  513.   mov eax, DWORD PTR [rbp-4]
  514.   movsx rdx, eax
  515.   mov rax, rdx
  516.   add rax, rax
  517.   add rax, rdx
  518.   add rax, rcx
  519.   mov eax, DWORD PTR [rbp-112+rax*4]
  520.   mov DWORD PTR [rbp-12], eax
  521.   mov eax, DWORD PTR [rbp-8]
  522.   lea ecx, [rax+1]
  523.   mov edx, 1431655766
  524.   mov eax, ecx
  525.   imul edx
  526.   mov eax, ecx
  527.   sar eax, 31
  528.   sub edx, eax
  529.   mov eax, edx
  530.   add eax, eax
  531.   add eax, edx
  532.   sub ecx, eax
  533.   mov edx, ecx
  534.   movsx rcx, edx
  535.   mov eax, DWORD PTR [rbp-4]
  536.   movsx rdx, eax
  537.   mov rax, rdx
  538.   add rax, rax
  539.   add rax, rdx
  540.   add rax, rcx
  541.   mov eax, DWORD PTR [rbp-112+rax*4]
  542.   mov DWORD PTR [rbp-16], eax
  543. .L29:
  544.   add DWORD PTR [rbp-8], 1
  545. .L28:
  546.   cmp DWORD PTR [rbp-8], 1
  547.   jle .L34
  548.   add DWORD PTR [rbp-4], 1
  549. .L27:
  550.   cmp DWORD PTR [rbp-4], 7
  551.   jle .L35
  552.   mov eax, DWORD PTR board[rip+20]
  553.   cmp eax, 2
  554.   jne .L36
  555.   mov edi, OFFSET FLAT:.LC7
  556.   call puts
  557.   mov eax, 5
  558.   jmp .L20
  559. .L36:
  560.   mov edx, DWORD PTR board[rip+4]
  561.   cmp DWORD PTR [rbp-116], 0
  562.   sete al
  563.   movzx eax, al
  564.   cmp edx, eax
  565.   jne .L37
  566.   mov eax, DWORD PTR board[rip+36]
  567.   cmp eax, 2
  568.   jne .L37
  569.   mov edi, OFFSET FLAT:.LC8
  570.   call puts
  571.   mov eax, 9
  572.   jmp .L20
  573. .L37:
  574.   mov edx, DWORD PTR board[rip+36]
  575.   cmp DWORD PTR [rbp-116], 0
  576.   sete al
  577.   movzx eax, al
  578.   cmp edx, eax
  579.   jne .L38
  580.   mov eax, DWORD PTR board[rip+4]
  581.   cmp eax, 2
  582.   jne .L38
  583.   mov edi, OFFSET FLAT:.LC8
  584.   call puts
  585.   mov eax, 1
  586.   jmp .L20
  587. .L38:
  588.   mov edx, DWORD PTR board[rip+28]
  589.   cmp DWORD PTR [rbp-116], 0
  590.   sete al
  591.   movzx eax, al
  592.   cmp edx, eax
  593.   jne .L39
  594.   mov eax, DWORD PTR board[rip+12]
  595.   cmp eax, 2
  596.   jne .L39
  597.   mov edi, OFFSET FLAT:.LC8
  598.   call puts
  599.   mov eax, 3
  600.   jmp .L20
  601. .L39:
  602.   mov edx, DWORD PTR board[rip+12]
  603.   cmp DWORD PTR [rbp-116], 0
  604.   sete al
  605.   movzx eax, al
  606.   cmp edx, eax
  607.   jne .L40
  608.   mov eax, DWORD PTR board[rip+28]
  609.   cmp eax, 2
  610.   jne .L40
  611.   mov edi, OFFSET FLAT:.LC8
  612.   call puts
  613.   mov eax, 7
  614.   jmp .L20
  615. .L40:
  616.   mov eax, DWORD PTR board[rip+4]
  617.   cmp eax, 2
  618.   jne .L41
  619.   mov edi, OFFSET FLAT:.LC9
  620.   call puts
  621.   mov eax, 1
  622.   jmp .L20
  623. .L41:
  624.   mov eax, DWORD PTR board[rip+12]
  625.   cmp eax, 2
  626.   jne .L42
  627.   mov edi, OFFSET FLAT:.LC10
  628.   call puts
  629.   mov eax, 3
  630.   jmp .L20
  631. .L42:
  632.   mov eax, DWORD PTR board[rip+28]
  633.   cmp eax, 2
  634.   jne .L43
  635.   mov edi, OFFSET FLAT:.LC11
  636.   call puts
  637.   mov eax, 7
  638.   jmp .L20
  639. .L43:
  640.   mov eax, DWORD PTR board[rip+36]
  641.   cmp eax, 2
  642.   jne .L44
  643.   mov edi, OFFSET FLAT:.LC12
  644.   call puts
  645.   mov eax, 9
  646.   jmp .L20
  647. .L44:
  648.   mov eax, DWORD PTR board[rip+8]
  649.   cmp eax, 2
  650.   jne .L45
  651.   mov edi, OFFSET FLAT:.LC13
  652.   call puts
  653.   mov eax, 2
  654.   jmp .L20
  655. .L45:
  656.   mov eax, DWORD PTR board[rip+16]
  657.   cmp eax, 2
  658.   jne .L46
  659.   mov edi, OFFSET FLAT:.LC14
  660.   call puts
  661.   mov eax, 4
  662.   jmp .L20
  663. .L46:
  664.   mov eax, DWORD PTR board[rip+24]
  665.   cmp eax, 2
  666.   jne .L47
  667.   mov edi, OFFSET FLAT:.LC15
  668.   call puts
  669.   mov eax, 6
  670.   jmp .L20
  671. .L47:
  672.   mov eax, DWORD PTR board[rip+32]
  673.   cmp eax, 2
  674.   jne .L48
  675.   mov edi, OFFSET FLAT:.LC16
  676.   call puts
  677.   mov eax, 8
  678.   jmp .L20
  679. .L48:
  680. .L20:
  681.   leave
  682.   ret
  683. update_board:
  684.   push rbp
  685.   mov rbp, rsp
  686.   mov DWORD PTR [rbp-4], edi
  687.   mov DWORD PTR [rbp-8], esi
  688.   mov eax, DWORD PTR [rbp-8]
  689.   cdqe
  690.   mov edx, DWORD PTR [rbp-4]
  691.   mov DWORD PTR board[0+rax*4], edx
  692.   nop
  693.   pop rbp
  694.   ret
  695. gamewon:
  696.   push rbp
  697.   mov rbp, rsp
  698.   mov DWORD PTR [rbp-112], 1
  699.   mov DWORD PTR [rbp-108], 2
  700.   mov DWORD PTR [rbp-104], 3
  701.   mov DWORD PTR [rbp-100], 4
  702.   mov DWORD PTR [rbp-96], 5
  703.   mov DWORD PTR [rbp-92], 6
  704.   mov DWORD PTR [rbp-88], 7
  705.   mov DWORD PTR [rbp-84], 8
  706.   mov DWORD PTR [rbp-80], 9
  707.   mov DWORD PTR [rbp-76], 1
  708.   mov DWORD PTR [rbp-72], 4
  709.   mov DWORD PTR [rbp-68], 7
  710.   mov DWORD PTR [rbp-64], 2
  711.   mov DWORD PTR [rbp-60], 5
  712.   mov DWORD PTR [rbp-56], 8
  713.   mov DWORD PTR [rbp-52], 3
  714.   mov DWORD PTR [rbp-48], 6
  715.   mov DWORD PTR [rbp-44], 9
  716.   mov DWORD PTR [rbp-40], 1
  717.   mov DWORD PTR [rbp-36], 5
  718.   mov DWORD PTR [rbp-32], 9
  719.   mov DWORD PTR [rbp-28], 3
  720.   mov DWORD PTR [rbp-24], 5
  721.   mov DWORD PTR [rbp-20], 7
  722.   mov DWORD PTR [rbp-8], 0
  723.   mov DWORD PTR [rbp-4], 0
  724.   jmp .L52
  725. .L56:
  726.   cmp DWORD PTR [rbp-8], 0
  727.   jne .L53
  728.   mov eax, DWORD PTR [rbp-4]
  729.   movsx rdx, eax
  730.   mov rax, rdx
  731.   add rax, rax
  732.   add rax, rdx
  733.   sal rax, 2
  734.   add rax, rbp
  735.   sub rax, 112
  736.   mov eax, DWORD PTR [rax]
  737.   cdqe
  738.   mov eax, DWORD PTR board[0+rax*4]
  739.   cmp eax, 2
  740.   je .L54
  741.   mov eax, DWORD PTR [rbp-4]
  742.   movsx rdx, eax
  743.   mov rax, rdx
  744.   add rax, rax
  745.   add rax, rdx
  746.   sal rax, 2
  747.   add rax, rbp
  748.   sub rax, 112
  749.   mov eax, DWORD PTR [rax]
  750.   cdqe
  751.   mov ecx, DWORD PTR board[0+rax*4]
  752.   mov eax, DWORD PTR [rbp-4]
  753.   movsx rdx, eax
  754.   mov rax, rdx
  755.   add rax, rax
  756.   add rax, rdx
  757.   sal rax, 2
  758.   add rax, rbp
  759.   sub rax, 108
  760.   mov eax, DWORD PTR [rax]
  761.   cdqe
  762.   mov eax, DWORD PTR board[0+rax*4]
  763.   cmp ecx, eax
  764.   jne .L54
  765.   mov eax, DWORD PTR [rbp-4]
  766.   movsx rdx, eax
  767.   mov rax, rdx
  768.   add rax, rax
  769.   add rax, rdx
  770.   sal rax, 2
  771.   add rax, rbp
  772.   sub rax, 108
  773.   mov eax, DWORD PTR [rax]
  774.   cdqe
  775.   mov ecx, DWORD PTR board[0+rax*4]
  776.   mov eax, DWORD PTR [rbp-4]
  777.   movsx rdx, eax
  778.   mov rax, rdx
  779.   add rax, rax
  780.   add rax, rdx
  781.   sal rax, 2
  782.   add rax, rbp
  783.   sub rax, 104
  784.   mov eax, DWORD PTR [rax]
  785.   cdqe
  786.   mov eax, DWORD PTR board[0+rax*4]
  787.   cmp ecx, eax
  788.   jne .L54
  789. .L53:
  790.   mov eax, 1
  791.   jmp .L55
  792. .L54:
  793.   mov eax, 0
  794. .L55:
  795.   mov DWORD PTR [rbp-8], eax
  796.   add DWORD PTR [rbp-4], 1
  797. .L52:
  798.   cmp DWORD PTR [rbp-4], 7
  799.   jle .L56
  800.   mov eax, DWORD PTR [rbp-8]
  801.   pop rbp
  802.   ret
  803. gamedrawn:
  804.   push rbp
  805.   mov rbp, rsp
  806.   sub rsp, 16
  807.   mov DWORD PTR [rbp-8], 0
  808.   mov DWORD PTR [rbp-12], 0
  809.   mov DWORD PTR [rbp-4], 1
  810.   jmp .L59
  811. .L63:
  812.   cmp DWORD PTR [rbp-8], 0
  813.   jne .L60
  814.   mov eax, DWORD PTR [rbp-4]
  815.   cdqe
  816.   mov eax, DWORD PTR board[0+rax*4]
  817.   cmp eax, 2
  818.   jne .L61
  819. .L60:
  820.   mov eax, 1
  821.   jmp .L62
  822. .L61:
  823.   mov eax, 0
  824. .L62:
  825.   mov DWORD PTR [rbp-8], eax
  826.   add DWORD PTR [rbp-4], 1
  827. .L59:
  828.   cmp DWORD PTR [rbp-4], 9
  829.   jle .L63
  830.   cmp DWORD PTR [rbp-8], 0
  831.   jne .L64
  832.   call gamewon
  833.   test eax, eax
  834.   jne .L64
  835.   mov eax, 1
  836.   jmp .L65
  837. .L64:
  838.   mov eax, 0
  839. .L65:
  840.   mov DWORD PTR [rbp-16], eax
  841.   mov eax, DWORD PTR [rbp-16]
  842.   leave
  843.   ret
  844. .LC17:
  845.   .string "\nYou lose. To a computer."
  846. .LC18:
  847.   .string "\nCongratulations, Crosses, you have won."
  848. .LC19:
  849.   .string "\nERROR"
  850. .LC20:
  851.   .string "\nIt's a draw."
  852. main:
  853.   push rbp
  854.   mov rbp, rsp
  855.   sub rsp, 16
  856.   mov DWORD PTR [rbp-4], 1
  857.   call initialise_board
  858.   call display_board
  859.   jmp .L68
  860. .L72:
  861.   cmp DWORD PTR [rbp-4], 1
  862.   jne .L69
  863.   mov eax, DWORD PTR [rbp-4]
  864.   mov edi, eax
  865.   call make_move
  866.   mov edx, eax
  867.   mov eax, DWORD PTR [rbp-4]
  868.   mov esi, edx
  869.   mov edi, eax
  870.   call update_board
  871.   jmp .L70
  872. .L69:
  873.   mov eax, DWORD PTR [rbp-4]
  874.   mov edi, eax
  875.   call make_computer_move
  876.   mov edx, eax
  877.   mov eax, DWORD PTR [rbp-4]
  878.   mov esi, edx
  879.   mov edi, eax
  880.   call update_board
  881. .L70:
  882.   call display_board
  883.   cmp DWORD PTR [rbp-4], 0
  884.   sete al
  885.   movzx eax, al
  886.   mov DWORD PTR [rbp-4], eax
  887. .L68:
  888.   call gamewon
  889.   test eax, eax
  890.   jne .L71
  891.   call gamedrawn
  892.   test eax, eax
  893.   je .L72
  894. .L71:
  895.   call gamewon
  896.   cmp eax, 1
  897.   jne .L73
  898.   mov eax, DWORD PTR [rbp-4]
  899.   test eax, eax
  900.   je .L75
  901.   cmp eax, 1
  902.   jne .L80
  903.   mov edi, OFFSET FLAT:.LC17
  904.   mov eax, 0
  905.   call printf
  906.   jmp .L78
  907. .L75:
  908.   mov edi, OFFSET FLAT:.LC18
  909.   mov eax, 0
  910.   call printf
  911.   jmp .L78
  912. .L80:
  913.   mov edi, OFFSET FLAT:.LC19
  914.   mov eax, 0
  915.   call printf
  916.   jmp .L78
  917. .L73:
  918.   mov edi, OFFSET FLAT:.LC20
  919.   call puts
  920. .L78:
  921.   mov eax, 0
  922.   leave
  923.   ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement