initial
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
main
|
||||||
122
main.asm
Normal file
122
main.asm
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
format ELF64 executable
|
||||||
|
|
||||||
|
segment readable executable
|
||||||
|
|
||||||
|
entry main
|
||||||
|
main:
|
||||||
|
call init_board
|
||||||
|
mov [turn], 0
|
||||||
|
.game_loop:
|
||||||
|
inc [turn]
|
||||||
|
call get_input
|
||||||
|
sub [input], '0'
|
||||||
|
|
||||||
|
test [turn], 1
|
||||||
|
mov r8b, '2' ; char
|
||||||
|
jz .some
|
||||||
|
mov r8b, '1' ; char
|
||||||
|
.some:
|
||||||
|
|
||||||
|
mov bl, [input]
|
||||||
|
call action
|
||||||
|
|
||||||
|
call print_board
|
||||||
|
call print_board_break
|
||||||
|
|
||||||
|
call win_condition
|
||||||
|
cmp rax, 0
|
||||||
|
jne .game_loop
|
||||||
|
|
||||||
|
mov rax, 60
|
||||||
|
mov rdi, 0
|
||||||
|
syscall
|
||||||
|
|
||||||
|
win_condition:
|
||||||
|
ret
|
||||||
|
|
||||||
|
get_input:
|
||||||
|
mov rax, 0
|
||||||
|
mov rdi, 0
|
||||||
|
mov rsi, input
|
||||||
|
mov rdx, 2
|
||||||
|
syscall
|
||||||
|
ret
|
||||||
|
|
||||||
|
init_board:
|
||||||
|
mov rax, board
|
||||||
|
mov r8, 6
|
||||||
|
|
||||||
|
.init_board_loop:
|
||||||
|
mov r10, 7
|
||||||
|
.init_board_loop_inner:
|
||||||
|
mov byte [rax], '0'
|
||||||
|
inc rax
|
||||||
|
|
||||||
|
dec r10
|
||||||
|
cmp r10, 0
|
||||||
|
jne .init_board_loop_inner
|
||||||
|
|
||||||
|
mov byte [rax], 10
|
||||||
|
inc rax
|
||||||
|
|
||||||
|
dec r8
|
||||||
|
cmp r8, 0
|
||||||
|
jne .init_board_loop
|
||||||
|
|
||||||
|
ret
|
||||||
|
print_board:
|
||||||
|
mov rax, 1
|
||||||
|
mov rdi, 1
|
||||||
|
mov rsi, board
|
||||||
|
mov rdx, 48
|
||||||
|
syscall
|
||||||
|
ret
|
||||||
|
|
||||||
|
print_board_break:
|
||||||
|
mov rax, 1
|
||||||
|
mov rdi, 1
|
||||||
|
mov rsi, line_break
|
||||||
|
mov rdx, break_len
|
||||||
|
syscall
|
||||||
|
ret
|
||||||
|
|
||||||
|
action:; rbx - x, r8b - char
|
||||||
|
mov r9, 6
|
||||||
|
.action_test_loop:
|
||||||
|
dec r9
|
||||||
|
mov rax, 8
|
||||||
|
mul r9
|
||||||
|
mov r10, board
|
||||||
|
add r10, rbx
|
||||||
|
add r10, rax
|
||||||
|
|
||||||
|
cmp r9, 0
|
||||||
|
je .continue_action
|
||||||
|
cmp byte [r10], '0'
|
||||||
|
jne .action_test_loop
|
||||||
|
.continue_action:
|
||||||
|
|
||||||
|
mov r13, 5
|
||||||
|
sub r13, r9
|
||||||
|
mov rcx, r13
|
||||||
|
call place
|
||||||
|
ret
|
||||||
|
|
||||||
|
place: ; rbx - x, rcx - y, r8b - char
|
||||||
|
mov rax, 5
|
||||||
|
sub rax, rcx
|
||||||
|
mov r9, 8
|
||||||
|
mul r9
|
||||||
|
mov r10, board
|
||||||
|
add r10, rax
|
||||||
|
add r10, rbx
|
||||||
|
mov byte [r10], r8b
|
||||||
|
ret
|
||||||
|
|
||||||
|
segment readable writable
|
||||||
|
board rb 48
|
||||||
|
table rb 154
|
||||||
|
turn rb 1
|
||||||
|
input rb 1
|
||||||
|
line_break db "-------", 10, 0
|
||||||
|
break_len = $-line_break
|
||||||
Reference in New Issue
Block a user