Assembly jogo da velha
; multi-segment executable file template.
data segment ; add your data here! MENSAGEM_INICIO db "utilize o teclado numerico para jogar",10,13,"$" MENSAGEM_EMPATE db "Empatou! $" MENSAGEM_VENCEU db "Vencedor: $" JOGADOR_O db "vez do 'o'",10,13,"$" JOGADOR_X db "vez do 'x'",10,13,"$" JOGADOR_ATUAL db "o","$" JOGADOR_OUTRO db "x","$" TABELA db " 7 | 8 | 9 ",10,13 db "-----------",10,13 db " 4 | 5 | 6 ",10,13 db "-----------",10,13 db " 1 | 2 | 3 ",10,13,"$" ends
stack segment dw 128 dup(0) ends code segment start: ; set segment registers: mov ax, data mov ds, ax mov es, ax
; add your code here LEA DX, MENSAGEM_INICIO MOV AH, 9 INT 21H MOV CX, 0 JOGO: CALL IMPRIME_TABELA CMP CX, 9 JE EMPATE CALL IMPRIME_JOGADOR CALL LE_TECLA CALL SETA_VALOR JMP VERIFICA_VENCEDOR
VENCEU: CALL IMPRIME_TABELA MOV AH, 9 LEA DX, MENSAGEM_VENCEU INT 21H LEA DX, JOGADOR_OUTRO INT 21H JMP FIM
EMPATE:
MOV AH, 9 LEA DX, MENSAGEM_EMPATE INT 21H JMP FIM
VERIFICA_VENCEDOR:
MOV SI, 1 MOV BX, OFFSET tabela PUSH SI MOV DH, JOGADOR_OUTRO
VERIFICA_A11:
;Verifica todas as possibilidades de
;vitoria que necessitam da posicao 7. CMP [BX+SI], DH JE CONFERE_A11_A12 JMP VERIFICA_A12
CONFERE_A11_A12:
ADD SI, 4 CMP [BX+SI], DH JE CONFERE_A11_A13 JMP CONFERE_A11_A21
CONFERE_A11_A13:
ADD SI, 4 CMP [BX+SI], DH JE VENCEU
CONFERE_A11_A21:
POP SI PUSH SI ADD SI, 26 CMP [BX+SI], DH JE CONFERE_A11_A31 JMP CONFERE_A11_A22
CONFERE_A11_A31:
ADD SI, 26 CMP [BX+SI], DH JE VENCEU