Reputation: 129
For some reason which I can't figure it out because everything seems right, normal and logic, when I launch my code it does this:
Here is my code:
IDEAL
MODEL small
STACK 100h
DATASEG
x dw 20h
y dw 20h
red db 4
white db 0Fh
a dw 20h
b dw 20h
c dw 20h
d dw 40h
e dw 20h
f dw 60h
q dw 20h
r dw 80h
g dw 20h
h dw 0A0h
i dw 20h
j dw 20h
k dw 40h
l dw 20h
m dw 60h
n dw 20h
o dw 0A0h
p dw 20h
s dw 80h
t dw 20h
u dw 20h
v dw 20h
w dw 20h
inst1 db 'Press: 1,2,3 or 4 to drop a disc.',13,10,'$'
inst2 db 'To win the game align 4 discs.',13,10,'$'
player1discstring db 'Player 1 Disc:',13,10,'$'
player1disccolor db 0Eh
p1x dw 127h
p1y dw 24h
player2discstring db 'Player 2 Disc:',13,10,'$'
player2disccolor db 1h
p2x dw 127h
p2y dw 39h
FirstColumnArray db 4 dup(0)
SecondColumnArray db 4 dup(0)
ThirdColumnArray db 4 dup(0)
FourthColumnArray db 4 dup(0)
Player1Turn dw 255
Player1Drawx dw 0h
Player1Drawy dw 0h
Player2Drawx dw 0h
Player2Drawy dw 0h
Player1Winner db 'Player 1 Won!',13,10,'$'
Player2Winner db 'Player 2 Won!',13,10,'$'
CODESEG
start:
mov ax, @data
mov ds, ax
; Graphic mode
mov ax, 13h
int 10h
RedDotLoop:
mov bh,0h
mov cx,[x]
mov dx,[y]
mov al,[red]
mov ah,0ch
int 10h
inc [x]
cmp cx, 0A0h
jl RedDotLoop
Square:
mov bh, 0h
inc [y]
mov [x], 20h
cmp dx, 0A0h
jl RedDotLoop
WhiteHorizontalDotLoop1:
mov bh,0h
mov cx,[a]
mov dx,[b]
mov al,[white]
mov ah,0ch
int 10h
inc [a]
cmp cx, 0A0h
jl WhiteHorizontalDotLoop1
WhiteHorizontalDotLoop2:
mov bh,0h
mov cx,[c]
mov dx,[d]
mov al,[white]
mov ah,0ch
int 10h
inc [c]
cmp cx, 0A0h
jl WhiteHorizontalDotLoop2
WhiteHorizontalDotLoop3:
mov bh,0h
mov cx,[e]
mov dx,[f]
mov al,[white]
mov ah,0ch
int 10h
inc [e]
cmp cx, 0A0h
jl WhiteHorizontalDotLoop3
WhiteHorizontalDotLoop4:
mov bh,0h
mov cx,[g]
mov dx,[h]
mov al,[white]
mov ah,0ch
int 10h
inc [g]
cmp cx, 0A0h
jl WhiteHorizontalDotLoop4
WhiteHorizontalDotLoop5:
mov bh,0h
mov cx,[q]
mov dx,[r]
mov al,[white]
mov ah,0ch
int 10h
inc [q]
cmp cx, 0A0h
jl WhiteHorizontalDotLoop5
WhiteVerticalDotLoop1:
mov bh,0h
mov cx,[i]
mov dx,[j]
mov al,[white]
mov ah,0ch
int 10h
inc [j]
cmp dx, 0A0h
jl WhiteVerticalDotLoop1
WhiteVerticalDotLoop2:
mov bh,0h
mov cx,[k]
mov dx,[l]
mov al,[white]
mov ah,0ch
int 10h
inc [l]
cmp dx, 0A0h
jl WhiteVerticalDotLoop2
WhiteVerticalDotLoop3:
mov bh,0h
mov cx,[m]
mov dx,[n]
mov al,[white]
mov ah,0ch
int 10h
inc [n]
cmp dx, 0A0h
jl WhiteVerticalDotLoop3
WhiteVerticalDotLoop4:
mov bh,0h
mov cx,[o]
mov dx,[p]
mov al,[white]
mov ah,0ch
int 10h
inc [p]
cmp dx, 0A0h
jl WhiteVerticalDotLoop4
WhiteVerticalDotLoop5:
mov bh,0h
mov cx,[s]
mov dx,[t]
mov al,[white]
mov ah,0ch
int 10h
inc [t]
cmp dx, 0A0h
jl WhiteVerticalDotLoop5
Write1Loop:
mov dl, ''
mov ah,2
int 21h
inc [u]
cmp [u], 75h
jl Write1Loop
mov dl, '1'
mov ah, 2
int 21h
Write2Loop:
mov dl, ''
mov ah,2
int 21h
inc [v]
cmp [v], 24h
jl Write2Loop
mov dl, '2'
mov ah, 2
int 21h
Write3Loop:
mov dl, ''
mov ah,2
int 21h
inc [w]
cmp [w], 23h
jl Write3Loop
mov dl, '3'
mov ah, 2
int 21h
Write4Loop:
mov dl, ''
mov ah,2
int 21h
inc [w]
cmp [w], 26h
jl Write4Loop
mov dl, '4'
mov ah, 2
int 21h
Instructions1:
mov dl, 0
mov dh, 21
mov ah, 2
mov bh, 0
int 10h
lea dx, [inst1]
mov dx, offset inst1
mov ah, 9
int 21h
Instructions2:
mov dl, 0
mov dh, 23
mov ah, 2
mov bh, 0
int 10h
lea dx, [inst2]
mov dx, offset inst2
mov ah, 9
int 21h
PlayerOneDisc:
mov es, ax
mov ah, 13h
mov bl, [player1disccolor]
mov dl, 22
mov dh, 5
mov ah, 2
mov bh, 0
int 10h
lea dx, [player1discstring]
mov dx, offset player1discstring
mov ah, 9
int 21h
PlayerTwoDisc:
mov dl, 22
mov dh, 8
mov ah, 2
mov bh, 0
int 10h
lea dx, [player2discstring]
mov dx, offset player2discstring
mov ah, 9
int 21h
Player1Disc:
mov bh,0h
mov cx,[p1x]
mov dx,[p1y]
mov al,[player1disccolor]
mov ah, 0ch
int 10h
inc [p1x]
cmp cx, 135h
jl Player1Disc
Player1Square:
mov bh, 0h
inc [p1y]
mov [p1x], 127h
cmp dx, 32h
jl Player1Disc
Player2Disc:
mov bh,0h
mov cx,[p2x]
mov dx,[p2y]
mov al,[player2disccolor]
mov ah,0ch
int 10h
inc [p2x]
cmp cx, 135h
jl Player2Disc
Player2Square:
mov bh, 0h
inc [p2y]
mov [p2x], 127h
cmp dx , 47h
jl Player2Disc
proc CheckIfPlayer1Won
Row1:
cmp [FirstColumnArray], 1
je Continue1Row1
jmp Row2
Continue1Row1:
cmp [SecondColumnArray], 1
je Continue2Row1
jmp Row2
Continue2Row1:
cmp [ThirdColumnArray], 1
je Continue3Row1
jmp Row2
Continue3Row1:
cmp [FourthColumnArray], 1
je Player1WinnerAnnounce1
jmp Row2
Row2:
cmp [FirstColumnArray + 1], 1
je Continue1Row2
jmp Row3
Continue1Row2:
cmp [SecondColumnArray + 1], 1
je Continue2Row2
jmp Row3
Continue2Row2:
cmp [ThirdColumnArray + 1], 1
je Continue3Row2
jmp Row3
Continue3Row2:
cmp [FourthColumnArray + 1], 1
je Player1WinnerAnnounce1
jmp Row3
Row3:
cmp [FirstColumnArray + 2], 1
je Continue1Row3
jmp Row4
Continue1Row3:
cmp [SecondColumnArray + 2], 1
je Continue2Row2
jmp Row4
Continue2Row3:
cmp [ThirdColumnArray + 2], 1
je Continue3Row2
jmp Row4
Continue3Row3:
cmp [FourthColumnArray + 2], 1
je Player1WinnerAnnounce1
jmp Row4
Row4:
cmp [FirstColumnArray + 3], 1
je Continue1Row4
jmp Column1
Continue1Row4:
cmp [SecondColumnArray + 3], 1
je Continue2Row4
jmp Column1
Continue2Row4:
cmp [ThirdColumnArray + 3], 1
je Continue3Row4
jmp Column1
Continue3Row4:
cmp [FourthColumnArray + 3], 1
je Player1WinnerAnnounce1
jmp Column1
Player1WinnerAnnounce1:
mov dl, 22
mov dh, 12
mov ah, 2
mov bh, 0
int 10h
lea dx, [Player1Winner]
mov dx, offset Player1Winner
mov ah, 9
int 21h
jmp exit
Column1:
cmp [FirstColumnArray], 1
je Continue1Column1
jmp Column2
Continue1Column1:
cmp [FirstColumnArray + 1], 1
je Continue2Column1
jmp Column2
Continue2Column1:
cmp [FirstColumnArray + 2], 1
je Continue3Column1
jmp Column2
Continue3Column1:
cmp [FirstColumnArray + 3], 1
je Player1WinnerAnnounce2
jmp Column2
Column2:
cmp [SecondColumnArray], 1
je Continue1Column2
jmp Column3
Continue1Column2:
cmp [SecondColumnArray + 1], 1
je Continue2Column2
jmp Column3
Continue2Column2:
cmp [SecondColumnArray + 2], 1
je Continue3Column2
jmp Column3
Continue3Column2:
cmp [SecondColumnArray + 3], 1
je Player1WinnerAnnounce2
jmp Column3
Column3:
cmp [ThirdColumnArray], 1
je Continue1Column3
jmp Column4
Continue1Column3:
cmp [ThirdColumnArray + 1], 1
je Continue2Column3
jmp Column4
Continue2Column3:
cmp [ThirdColumnArray + 2], 1
je Continue3Column3
jmp Column4
Continue3Column3:
cmp [ThirdColumnArray + 3], 1
je Player1WinnerAnnounce2
jmp Column4
Column4:
cmp [FourthColumnArray], 1
je Continue1Column4
jmp DiagnolLine1
Continue1Column4:
cmp [FourthColumnArray + 1], 1
je Continue2Column4
jmp DiagnolLine1
Continue2Column4:
cmp [FourthColumnArray + 2], 1
je Continue3Column4
jmp DiagnolLine1
Continue3Column4:
cmp [FourthColumnArray + 3], 1
je Player1WinnerAnnounce2
jmp DiagnolLine1
Player1WinnerAnnounce2:
mov dl, 22
mov dh, 12
mov ah, 2
mov bh, 0
int 10h
lea dx, [Player1Winner]
mov dx, offset Player1Winner
mov ah, 9
int 21h
jmp exit
DiagnolLine1:
cmp [FirstColumnArray], 1
je Continue1DiagnolLine1
jmp DiagnolLine2
Continue1DiagnolLine1:
cmp [SecondColumnArray + 1], 1
je Continue2DiagnolLine1
jmp DiagnolLine2
Continue2DiagnolLine1:
cmp [ThirdColumnArray + 2], 1
je Continue3DiagnolLine1
jmp DiagnolLine2
Continue3DiagnolLine1:
cmp [FourthColumnArray + 3], 1
je Player1WinnerAnnounce3
jmp DiagnolLine2
DiagnolLine2:
cmp [FourthColumnArray], 1
je Continue1DiagnolLine2
jmp CheckPlayer1Number
Continue1DiagnolLine2:
cmp [ThirdColumnArray + 1], 1
je Continue2DiagnolLine2
jmp CheckPlayer1Number
Continue2DiagnolLine2:
cmp [SecondColumnArray + 2], 1
je Continue3DiagnolLine2
jmp CheckPlayer1Number
Continue3DiagnolLine2:
cmp [FirstColumnArray + 3], 1
je Player1WinnerAnnounce3
jmp CheckIfPlayer2Won
Player1WinnerAnnounce3:
mov dl, 22
mov dh, 12
mov ah, 2
mov bh, 0
int 10h
lea dx, [Player1Winner]
mov dx, offset Player1Winner
mov ah, 9
int 21h
jmp exit
ret
endp CheckIfPlayer1Won
proc CheckIfPlayer2Won
Row1T:
cmp [FirstColumnArray], 2
je Continue1Row1T
jmp Row2T
Continue1Row1T:
cmp [SecondColumnArray], 2
je Continue2Row1T
jmp Row2T
Continue2Row1T:
cmp [ThirdColumnArray], 2
je Continue3Row1T
jmp Row2T
Continue3Row1T:
cmp [FourthColumnArray], 2
je Player2WinnerAnnounce1
jmp Row2T
Row2T:
cmp [FirstColumnArray + 1], 2
je Continue1Row2T
jmp Row3T
Continue1Row2T:
cmp [SecondColumnArray + 1], 2
je Continue2Row2T
jmp Row3T
Continue2Row2T:
cmp [ThirdColumnArray + 1], 2
je Continue3Row2T
jmp Row3T
Continue3Row2T:
cmp [FourthColumnArray + 1], 2
je Player2WinnerAnnounce1
jmp Row3T
Row3T:
cmp [FirstColumnArray + 2], 2
je Continue1Row3T
jmp Row4T
Continue1Row3T:
cmp [SecondColumnArray + 2], 2
je Continue2Row3T
jmp Row4T
Continue2Row3T:
cmp [ThirdColumnArray + 2], 2
je Continue3Row3T
jmp Row4T
Continue3Row3T:
cmp [FourthColumnArray + 2], 2
je Player2WinnerAnnounce1
jmp Row4T
Row4T:
cmp [FirstColumnArray + 3], 2
je Continue1Row4T
jmp Column1T
Continue1Row4T:
cmp [SecondColumnArray + 3], 2
je Continue2Row4T
jmp Column1T
Continue2Row4T:
cmp [ThirdColumnArray + 3], 2
je Continue3Row4T
jmp Column1T
Continue3Row4T:
cmp [FourthColumnArray + 3], 2
je Player2WinnerAnnounce1
jmp Column1T
Player2WinnerAnnounce1:
mov dl, 22
mov dh, 12
mov ah, 2
mov bh, 0
int 10h
lea dx, [Player2Winner]
mov dx, offset Player2Winner
mov ah, 9
int 21h
jmp exit
Column1T:
cmp [FirstColumnArray], 2
je Continue1Column1T
jmp Column2T
Continue1Column1T:
cmp [FirstColumnArray + 1], 2
je Continue2Column1T
jmp Column2T
Continue2Column1T:
cmp [FirstColumnArray + 2], 2
je Continue3Column1T
jmp Column2T
Continue3Column1T:
cmp [FirstColumnArray + 3], 2
je Player2WinnerAnnounce2
jmp Column2T
Column2T:
cmp [SecondColumnArray], 2
je Continue1Column2T
jmp Column3T
Continue1Column2T:
cmp [SecondColumnArray + 1], 2
je Continue2Column2T
jmp Column3T
Continue2Column2T:
cmp [SecondColumnArray + 2], 2
je Continue3Column2T
jmp Column3T
Continue3Column2T:
cmp [SecondColumnArray + 3], 2
je Player2WinnerAnnounce2
jmp Column3T
Column3T:
cmp [ThirdColumnArray], 2
je Continue1Column3T
jmp Column4T
Continue1Column3T:
cmp [ThirdColumnArray + 1], 2
je Continue2Column3T
jmp Column4T
Continue2Column3T:
cmp [ThirdColumnArray + 2], 2
je Continue3Column3T
jmp Column4T
Continue3Column3T:
cmp [ThirdColumnArray + 3], 2
je Player2WinnerAnnounce2
jmp Column4T
Column4T:
cmp [FourthColumnArray], 2
je Continue1Column4T
jmp DiagnolLine1T
Continue1Column4T:
cmp [FourthColumnArray + 1], 2
je Continue2Column4T
jmp DiagnolLine1T
Continue2Column4T:
cmp [FourthColumnArray + 2], 2
je Continue3Column4T
jmp DiagnolLine1T
Continue3Column4T:
cmp [FourthColumnArray + 3], 2
je Player2WinnerAnnounce2
jmp DiagnolLine1T
Player2WinnerAnnounce2:
mov dl, 22
mov dh, 12
mov ah, 2
mov bh, 0
int 10h
lea dx, [Player2Winner]
mov dx, offset Player2Winner
mov ah, 9
int 21h
jmp exit
DiagnolLine1T:
cmp [FirstColumnArray], 2
je Continue1DiagnolLine1T
jmp DiagnolLine2T
Continue1DiagnolLine1T:
cmp [SecondColumnArray + 1], 2
je Continue2DiagnolLine1T
jmp DiagnolLine2T
Continue2DiagnolLine1T:
cmp [ThirdColumnArray + 2], 2
je Continue3DiagnolLine1T
jmp DiagnolLine2T
Continue3DiagnolLine1T:
cmp [FourthColumnArray + 3], 2
je Player2WinnerAnnounce3
jmp DiagnolLine2T
DiagnolLine2T:
cmp [FourthColumnArray], 2
je Continue1DiagnolLine2T
jmp CheckPlayer1Number
Continue1DiagnolLine2T:
cmp [ThirdColumnArray + 1], 2
je Continue2DiagnolLine2T
jmp CheckPlayer1Number
Continue2DiagnolLine2T:
cmp [SecondColumnArray + 2], 2
je Continue3DiagnolLine2T
jmp CheckPlayer1Number
Continue3DiagnolLine2T:
cmp [FirstColumnArray + 3], 2
je Player2WinnerAnnounce3
jmp CheckPlayer1Number
Player2WinnerAnnounce3:
mov dl, 22
mov dh, 12
mov ah, 2
mov bh, 0
int 10h
lea dx, [Player2Winner]
mov dx, offset Player2Winner
mov ah, 9
int 21h
jmp exit
ret
endp CheckIfPlayer2Won
proc CheckPlayer1Number
mov ah, 7
int 21h
cmp al, 31h
je CheckColumn1
cmp al, 32h
je CheckColumn2
cmp al, 33h
je MoveToCheckColumn3
cmp al, 34h
je MoveToCheckColumn4
jmp CheckPlayer1Number
endp CheckPlayer1Number
proc CheckColumn1
cmp [FirstColumnArray], 0
je ChangeColumn1Number1
cmp [FirstColumnArray + 1], 0
je ChangeColumn1Number2
cmp [FirstColumnArray + 2], 0
je ChangeColumn1Number3
cmp [FirstColumnArray + 3], 0
je ChangeColumn1Number4
jmp CheckPlayer1Number
endp CheckColumn1
proc ChangeColumn1Number1
inc [FirstColumnArray]
mov [Player1Drawx], 25h
mov [Player1Drawy], 87h
jmp DrawPlayer1Disc
endp ChangeColumn1Number1
proc ChangeColumn1Number2
inc [FirstColumnArray + 1]
mov [Player1Drawx], 25h
mov [Player1Drawy], 67h
jmp DrawPlayer1Disc
endp ChangeColumn1Number2
proc ChangeColumn1Number3
inc [FirstColumnArray + 2]
mov [Player1Drawx], 25h
mov [Player1Drawy], 47h
jmp DrawPlayer1Disc
endp ChangeColumn1Number3
proc ChangeColumn1Number4
inc [FirstColumnArray + 3]
mov [Player1Drawx], 25h
mov [Player1Drawy], 27h
jmp DrawPlayer1Disc
endp ChangeColumn1Number4
proc MoveToCheckColumn3
jmp CheckColumn3
endp MoveToCheckColumn3
proc MoveToCheckColumn4
jmp CheckColumn4
endp MoveToCheckColumn4
proc CheckColumn2
cmp [SecondColumnArray], 0
je ChangeColumn2Number1
cmp [SecondColumnArray + 1], 0
je ChangeColumn2Number2
cmp [SecondColumnArray + 2], 0
je ChangeColumn2Number3
cmp [SecondColumnArray + 3], 0
je ChangeColumn2Number4
jmp CheckPlayer1Number
endp CheckColumn2
proc ChangeColumn2Number1
inc [SecondColumnArray]
mov [Player1Drawx], 45h
mov [Player1Drawy], 87h
jmp DrawPlayer1Disc
endp ChangeColumn2Number1
proc ChangeColumn2Number2
inc [SecondColumnArray + 1]
mov [Player1Drawx], 45h
mov [Player1Drawy], 67h
jmp DrawPlayer1Disc
endp ChangeColumn2Number2
proc ChangeColumn2Number3
inc [SecondColumnArray + 2]
mov [Player1Drawx], 45h
mov [Player1Drawy], 47h
jmp DrawPlayer1Disc
endp ChangeColumn2Number3
proc ChangeColumn2Number4
inc [SecondColumnArray + 3]
mov [Player1Drawx], 45h
mov [Player1Drawy], 27h
jmp DrawPlayer1Disc
endp ChangeColumn2Number4
proc CheckColumn3
cmp [ThirdColumnArray], 0
je ChangeColumn3Number1
cmp [ThirdColumnArray + 1], 0
je ChangeColumn3Number2
cmp [ThirdColumnArray + 2], 0
je ChangeColumn3Number3
cmp [ThirdColumnArray + 3], 0
je ChangeColumn3Number4
jmp CheckPlayer1Number
endp CheckColumn3
proc ChangeColumn3Number1
inc [ThirdColumnArray]
mov [Player1Drawx], 65h
mov [Player1Drawy], 87h
jmp DrawPlayer1Disc
endp ChangeColumn3Number1
proc ChangeColumn3Number2
inc [ThirdColumnArray + 1]
mov [Player1Drawx], 65h
mov [Player1Drawy], 67h
jmp DrawPlayer1Disc
endp ChangeColumn3Number2
proc ChangeColumn3Number3
inc [ThirdColumnArray + 2]
mov [Player1Drawx], 65h
mov [Player1Drawy], 47h
jmp DrawPlayer1Disc
endp ChangeColumn3Number3
proc ChangeColumn3Number4
inc [ThirdColumnArray + 3]
mov [Player1Drawx], 65h
mov [Player1Drawy], 27h
jmp DrawPlayer1Disc
endp ChangeColumn3Number4
proc CheckColumn4
cmp [FourthColumnArray], 0
je ChangeColumn4Number1
cmp [FourthColumnArray + 1], 0
je ChangeColumn4Number2
cmp [FourthColumnArray + 2], 0
je ChangeColumn4Number3
cmp [FourthColumnArray + 3], 0
je ChangeColumn4Number4
jmp CheckPlayer1Number
endp CheckColumn4
proc ChangeColumn4Number1
inc [FourthColumnArray]
mov [Player1Drawx], 85h
mov [Player1Drawy], 87h
jmp DrawPlayer1Disc
endp ChangeColumn4Number1
proc ChangeColumn4Number2
inc [FourthColumnArray + 1]
mov [Player1Drawx], 85h
mov [Player1Drawy], 67h
jmp DrawPlayer1Disc
endp ChangeColumn4Number2
proc ChangeColumn4Number3
inc [FourthColumnArray + 2]
mov [Player1Drawx], 85h
mov [Player1Drawy], 47h
jmp DrawPlayer1Disc
endp ChangeColumn4Number3
proc ChangeColumn4Number4
inc [FourthColumnArray + 3]
mov [Player1Drawx], 85h
mov [Player1Drawy], 27h
jmp DrawPlayer1Disc
endp ChangeColumn4Number4
DrawPlayer1Loop:
mov bh,0h
mov cx,[Player1Drawx]
mov dx,[Player1Drawy]
mov al,[player1disccolor]
mov ah,0ch
int 10h
inc [Player1Drawx]
cmp cx, [Player1Drawx + 14h]
jl DrawPlayer1Loop
DrawPlayer1Disc:
mov bh, 0h
inc [Player1Drawy]
cmp dx, [Player1Drawy + 14h]
jl DrawPlayer1Loop
proc GoToCheckIfPlayer1Won
call CheckIfPlayer1Won
jmp CheckPlayer2Number
endp GoToCheckIfPlayer1Won
proc CheckPlayer2Number
mov ah, 7
int 21h
cmp al, 31h
je Player2CheckColumn1
cmp al, 32h
je Player2CheckColumn2
cmp al, 33h
je MoveToCheck2Column3
cmp al, 34h
je MoveToCheck2Column4
jmp CheckPlayer2Number
endp CheckPlayer2Number
proc Player2CheckColumn1
cmp [FirstColumnArray], 0
je Change2Column1Number1
cmp [FirstColumnArray + 1], 0
je Change2Column1Number2
cmp [FirstColumnArray + 2], 0
je Change2Column1Number3
cmp [FirstColumnArray + 3], 0
je Change2Column1Number4
jmp CheckPlayer2Number
endp Player2CheckColumn1
proc Change2Column1Number1
add [FirstColumnArray], 2
mov [Player2Drawx], 25h
mov [Player2Drawy], 87h
jmp DrawPlayer2Disc
endp Change2Column1Number1
proc Change2Column1Number2
add [FirstColumnArray + 1], 2
mov [Player2Drawx], 25h
mov [Player2Drawy], 67h
jmp DrawPlayer2Disc
endp Change2Column1Number2
proc Change2Column1Number3
add [FirstColumnArray + 2], 2
mov [Player2Drawx], 25h
mov [Player2Drawy], 47h
jmp DrawPlayer2Disc
endp Change2Column1Number3
proc Change2Column1Number4
add [FirstColumnArray + 3], 2
mov [Player2Drawx], 25h
mov [Player2Drawy], 27h
jmp DrawPlayer2Disc
endp Change2Column1Number4
proc MoveToCheck2Column3
jmp Player2CheckColumn3
endp MoveToCheck2Column3
proc MoveToCheck2Column4
jmp Player2CheckColumn4
endp MoveToCheck2Column4
proc Player2CheckColumn2
cmp [SecondColumnArray], 0
je Change2Column2Number1
cmp [SecondColumnArray + 1], 0
je Change2Column2Number2
cmp [SecondColumnArray + 2], 0
je Change2Column2Number3
cmp [SecondColumnArray + 3], 0
je Change2Column2Number4
jmp CheckPlayer2Number
endp Player2CheckColumn2
proc Change2Column2Number1
add [SecondColumnArray], 2
mov [Player2Drawx], 45h
mov [Player2Drawy], 87h
jmp DrawPlayer2Disc
endp Change2Column2Number1
proc Change2Column2Number2
add [SecondColumnArray + 1], 2
mov [Player2Drawx], 45h
mov [Player2Drawy], 67h
jmp DrawPlayer2Disc
endp Change2Column2Number2
proc Change2Column2Number3
add [SecondColumnArray + 2], 2
mov [Player2Drawx], 45h
mov [Player2Drawy], 47h
jmp DrawPlayer2Disc
endp Change2Column2Number3
proc Change2Column2Number4
add [SecondColumnArray + 3], 2
mov [Player2Drawx], 45h
mov [Player2Drawy], 47h
jmp DrawPlayer2Disc
endp Change2Column2Number4
proc Player2CheckColumn3
cmp [ThirdColumnArray], 0
je Change2Column3Number1
cmp [ThirdColumnArray + 1], 0
je Change2Column3Number2
cmp [ThirdColumnArray + 2], 0
je Change2Column3Number3
cmp [ThirdColumnArray + 3], 0
je Change2Column3Number4
jmp CheckPlayer2Number
endp Player2CheckColumn3
proc Change2Column3Number1
add [ThirdColumnArray], 2
mov [Player2Drawx], 65h
mov [Player2Drawy], 87h
jmp DrawPlayer2Disc
endp Change2Column3Number1
proc Change2Column3Number2
add [ThirdColumnArray], 2
mov [Player2Drawx], 65h
mov [Player2Drawy], 67h
jmp DrawPlayer2Disc
endp Change2Column3Number2
proc Change2Column3Number3
add [ThirdColumnArray], 2
mov [Player2Drawx], 65h
mov [Player2Drawy], 47h
jmp DrawPlayer2Disc
endp Change2Column3Number3
proc Change2Column3Number4
add [ThirdColumnArray], 2
mov [Player2Drawx], 65h
mov [Player2Drawy], 27h
jmp DrawPlayer2Disc
endp Change2Column3Number4
proc Player2CheckColumn4
cmp [FourthColumnArray], 0
je Change2Column4Number1
cmp [FourthColumnArray + 1], 0
je Change2Column4Number2
cmp [FourthColumnArray + 2], 0
je Change2Column4Number3
cmp [FourthColumnArray + 3], 0
je Change2Column4Number4
jmp CheckPlayer2Number
endp Player2CheckColumn4
proc Change2Column4Number1
add [FourthColumnArray], 2
mov [Player2Drawx], 85h
mov [Player2Drawy], 87h
jmp DrawPlayer2Disc
endp Change2Column4Number1
proc Change2Column4Number2
add [FourthColumnArray], 2
mov [Player2Drawx], 85h
mov [Player2Drawy], 67h
jmp DrawPlayer2Disc
endp Change2Column4Number2
proc Change2Column4Number3
add [FourthColumnArray], 2
mov [Player2Drawx], 85h
mov [Player2Drawy], 47h
jmp DrawPlayer2Disc
endp Change2Column4Number3
proc Change2Column4Number4
add [FourthColumnArray], 2
mov [Player2Drawx], 85h
mov [Player2Drawy], 27h
jmp DrawPlayer2Disc
endp Change2Column4Number4
DrawPlayer2Loop:
mov bh,0h
mov cx,[Player2Drawx]
mov dx,[Player2Drawy]
mov al,[player2disccolor]
mov ah,0ch
int 10h
inc [Player2Drawx]
cmp cx, [Player2Drawx + 14h]
jl DrawPlayer2Loop
DrawPlayer2Disc:
mov bh, 0h
inc [Player2Drawy]
cmp dx, [Player2Drawy + 14h]
jl DrawPlayer2Loop
proc GoToCheckIfPlayer2Won
call CheckIfPlayer2Won
jmp CheckPlayer1Number
endp GoToCheckIfPlayer2Won
next:
; Wait for key press
mov ah,00h
int 16h
; Return to text mode
mov ah, 0
mov al, 2
int 10h
exit:
mov ax, 4c00h
int 21h
END start
Explanation for my code: A player has to choose a number between 1-4. When he pressed one of the numbers, it checks which number he pressed and sends it to column procedures which are supposed to check if there are any "open" spaces to draw a disc on the board. I am suspecting that the problem is maybe located somewhere in the drawing part because it obviously doesn't stop and it makes the program crash.
This is a long read so thanks for the patience and help.
Upvotes: 0
Views: 322
Reputation: 11
I modified some routines, and now it works! I have the feeling that you are no more interested in 2018.
Anyway... the first bug is here: cmp cx, [Player1Drawx + 14h] you tried to see that cx has incremented 14h times, the addressing is wrong.
Upvotes: 1