Files
connect4/main.asm
2025-08-15 15:31:09 +02:00

123 lines
1.5 KiB
NASM

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