Professional Documents
Culture Documents
My
My
;;
;;
;; /_\/_\/_\ // ;;
;; | (_) | | | | (_) |/ /_ ;;
;;
;;
;; | | | || | || / \|| | | | | | | |__ ;;
;; | | | || | | | / /\ \| | | | | | | | __| ;;
;;
;;
;; _____ __ __ ______ ;;
;; / ____| /\ | \/ | ____| ;;
;; | | __ / \ | \ / | |__ ;;
;; | | |_ | / /\ \ | |\/| | __| ;;
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA SEGMENT
JUMP_LINE DB 13,10,"$"
TICTACTOE_BOARD DB "---|---|---$"
GAME_COUNTER DB 9 DUP(0)
PLAYER DB 0
VICTORY DB 0
ENDS
STACK SEGMENT
DW 128 DUP(0)
ENDS
CODE SEGMENT
START:
MOV DS, AX
MOV ES, AX
NEW_GAME:
CALL INITIALIZE_TEMPLATE
MOV VICTORY, 0
MOV CX, 9
RESTART:
CALL GENERAL_PROC
CALL SHOW
CMP AL, 1
JE TURN_J2
SHR PLAYER, 1
CALL SHOW
LEA DX, JUMP_LINE
CALL SHOW
JMP BREAK_TURNS
TURN_J2:
SHL PLAYER, 1
CALL SHOW
CALL SHOW
BREAK_TURNS:
CALL GUESS
CMP DL, 1
JNE PLAY_PLAYER2
JMP CONT_MOV
PLAY_PLAYER2:
CONT_MOV:
MOV [BX], DL
CMP CX, 5
JG VERIFY_NEW_VICTORY
CALL VERIFY_WON
CMP VICTORY, 1
JE WON
VERIFY_NEW_VICTORY:
LOOP RESTART
CALL GENERAL_PROC
CALL SHOW
CALL SHOW
JMP SHOW_MSG_RESTART
WON:
CALL GENERAL_PROC
CALL SHOW
CALL SHOW_CHARACTER
CALL SHOW
SHOW_MSG_RESTART:
CALL SHOW
LEA DX, JUMP_LINE
CALL SHOW
CALL READ_INPUT
JNE END_GAME
JMP NEW_GAME
END_GAME:
INT 21H
GENERAL_PROC:
CALL CLEAN_SCREEN
CALL SHOW
CALL SHOW
CALL SHOW_TEMPLATE
CALL SHOW
RET
SHOW_CHARACTER:
INT 21H
RET
SHOW:
MOV AH, 09H
INT 21H
RET
CLEAN_SCREEN:
INT 10H
MOV AH, 0H
INT 10H
RET
READ_INPUT:
MOV AH, 01
INT 21H
RET
GUESS:
CALL READ_INPUT
CALL VERIFY_VALID
CMP AH, 1
JE VERIFY_POSITION_ALRDY_GSSD
CALL SHOW_CHARACTER
CALL SHOW
CALL SHOW
JMP GUESS
VERIFY_POSITION_ALRDY_GSSD:
MOV AH, 0
ADD BX, AX
JNG END_PALP
CALL SHOW_CHARACTER
CALL SHOW
CALL SHOW
JMP GUESS
END_PALP:
CALL SHOW
RET
INITIALIZE_TEMPLATE:
MOV CX, 9
INITIALIZE_PROX_TEMP:
MOV [BX], AL
INC AL
INC BX
LOOP INITIALIZE_PROX_TEMP
RET
VERIFY_VALID:
MOV AH, 0
JL END_GAMEISDIGIT
JG END_GAMEISDIGIT
MOV AH, 1
END_GAMEISDIGIT:
RET
SHOW_TEMPLATE:
CALL SHOW_LINE
CALL SHOW
CALL SHOW
CALL SHOW_LINE
CALL SHOW
CALL SHOW_LINE
RET
SHOW_LINE:
CALL SHOW_CHARACTER
CALL SHOW_CHARACTER
CALL SHOW_CHARACTER
CALL SHOW_CHARACTER
INC BX
CALL SHOW_CHARACTER
CALL SHOW_CHARACTER
CALL SHOW_CHARACTER
CALL SHOW_CHARACTER
INC BX
CALL SHOW_CHARACTER
INC BX
CALL SHOW
RET
VERIFY_WON:
CALL VERIFY_DIAG
CMP VICTORY, 1
JE BREAK_WON_VERIFY
CALL VERIFY_LINES
CMP VICTORY, 1
JE BREAK_WON_VERIFY
CALL VERIFY_COLUMNS
BREAK_WON_VERIFY:
RET
VERIFY_DIAG:
MOV BX, SI
ADD BX, 4
ADD BX, 4
JNE VERIFY_DIAGONAL_PLAY
MOV VICTORY, 1
RET
VERIFY_LINES:
MOV BX, SI
INC BX
JNE SEC_LINE
INC BX
JNE SEC_LINE
MOV VICTORY, 1
RET
SEC_LINE:
MOV BX, SI
ADD BX, 3
INC BX
JNE THIRD_LINE
INC BX
JNE THIRD_LINE
MOV VICTORY, 1
RET
THIRD_LINE:
MOV BX, SI
ADD BX, 6
INC BX
JNE END_VALID_LINES
INC BX
JNE END_VALID_LINES
MOV VICTORY, 1
END_VALID_LINES:
RET
VERIFY_COLUMNS:
MOV BX, SI
ADD BX, 3
JNE COLUMN_TWO
ADD BX, 3
JNE COLUMN_TWO
MOV VICTORY, 1
RET
COLUMN_TWO:
MOV BX, SI
INC BX
ADD BX, 3
JNE COLUMN_THREE
ADD BX, 3
JNE COLUMN_THREE
MOV VICTORY, 1
RET
COLUMN_THREE:
MOV BX, SI
ADD BX, 2
ADD BX, 3
JNE END_VERIFIC_COLUMNS
ADD BX, 3
CMP AL, [BX]
JNE END_VERIFIC_COLUMNS
MOV VICTORY, 1
END_VERIFIC_COLUMNS:
RET
VERIFY_DIAGONAL_PLAY:
MOV BX, SI
ADD BX, 2
ADD BX, 2
JNE END_VERIF_DIAG
ADD BX, 2
JNE END_VERIF_DIAG
MOV VICTORY, 1
END_VERIF_DIAG:
RET
ENDS
END START