Robotic Pigeon v5.1
PROGRAMMER Robert Knepher
TITLE What a cute rescue dove
PAGE 55,80
.model small
.STACK 64
;--
.data
CR EQU 0DH
LF EQU 0AH
STOP EQU '$'
message db CR, LF, 'Enter number of stones', STOP
message2 db CR, LF, 'First Move?0CPU 1YOU', STOP
message3 db CD. LF, 'StonePile:', STOP
db '$'
stonePile db 0, 0
db STOP
message4 db CD, LR, 'Take How Many?1/2', STOP
message5 db CD, LF, 'Sorry You lose', STOP
message6 db CR, LF, 'You Win!', STOP
whoTurn db 2 dup ('0'), STOP
stoneBin db 0
.code
MAIN PROC
MOV AX, @data
MOV DS, AX
MOV AX, 600H
MOV BH, 7
SUB CX, CX
MOV DX, 184FH
INT 10H
;--cursor
nimGame:
MOV AH, 09H
LEA DX, message
INT 21H
CALL nextDigit
MOV stoneBin, AL
;--error
CMP AL, 1
JB nimGame
CMP AL, 63H
JA nimGame
;--
firstTurn:
MOV AH, 09H
LEA DX, message2
INT 21H
;--who1or0only
MOV AH, 1
INT 21H
CMP AL, 31H
JE you
CMP AL, 30H
JE cpu
JMP firstTurn
you:
MOV AL, stoneBin
CMP AL, 1
JE lost
CALL onPile
MOV AH, 09H
LEA DX, message4
INT 21H
MOV AH, 1
INT 21H
CMP AL, 31H
JE minus1
CMP AL, 32H
JE minus2
JMP you
minus1:
MOV AL, stoneBin
SUB AL, 1
MOV stoneBin, AL
JMP cpu
minus2:
MOV AL, stoneBin
SUB AL, 2
MOV stoneBin, AL
JMP cpu
lost:
MOV AH, 09H
LEA DX, message5
INT 21H
.exit
cpu:
CALL onPile
SUB CX, CX
SUB AX, AX
MOV CL, 3
MOV AL, stoneBin
DIV CL
CMP AH, 0
JE take2
CMP AH, 1
JE take1
CMP AH, 2
JE take1
JMP nimGame
take1:
MOV AL, stoneBin
SUB AL, 1
MOV stoneBin, AL
CMP AL, 0
JE cpuloser
JMP you
take2:
MOV AL, stoneBin
SUB AL, 2
MOV stoneBin, AL
CMP AL, 0
JE cpuloser
JMP you
cpuloser:
MOV AH, 09H
LEA DX, message6
INT 21H
;--
MOV AX, 4C00H
INT 21H
MAIN ENDP
nextDigit PROC
MOV AX, 0
MOV BX, 10
nextChar:
CALL getChar
CMP CL, CR
JE crOut
CMP CL, 'q'
JE endProg
CMP CL, '0'
JB main
CMP CL, '9'
JA main
MUL BX
SUB CL, 30H
ADD AX, CX
LOOP nextChar
crOut:
RET
endProg:
.exit
nextDigit ENDP
;--
getChar PROC
MOV BP, AX
MOV AH, 1
INT 21H
MOV CX, 0
MOV CL, AL
MOV AX, BP
RET
getChar ENDP
;--bin2ASCIItoScreen
onPile PROC
MOV AH, 09H
LEA DX, message3
INT 21H
SUB AX,AX
MOV AL, stoneBin
LEA SI, stonePile
MOV CX, 0AH
L20: CMP AX,CX
JB L30
XOR DX, DX
DIV CX
OR DL, 30H
MOV [SI], DL
DEC SI
JMP L20
L30: OR AL, 30H
MOV [SI], AL
MOV DX, SI
MOV AH, 09H
INT 21H
RET
onPile ENDP
END MAIN
0 Comments:
Post a Comment
<< Home