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