汇编8086程序检查赢家在井字游戏只是检查第一行
我正在做一个终极的井字游戏,我几乎做了整个游戏,我Map到数组,我检查单板赢家,并将他们Map到3乘3数组和所有的工作,但由于某种原因,检查3乘3板的过程只检查第一行。我已经为一个井字游戏做了一个测试文件,它在那里工作,所以可能有一个问题隐藏在我的代码中的另一个过程或东西
CHECK_WINNER PROC
XOR BX, BX
XOR CX, CX
XOR DX, DX
XOR DI, DI
LEA DI, BIG_BOARD
VERIFICA_VENCEDOR_LINHA1:
CMP CX, 3
JE VERIFICA_VENCEDOR_COLUNA1
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE PROXIMA_LINHA1
INC DI
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE PROXIMA_LINHA1
INC DI
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE PROXIMA_LINHA1
INC DI
JMP GANHOU_BOARD1
PROXIMA_LINHA1:
MOV DI, DX
ADD BX, 3
ADD DI, BX
INC CX
JMP VERIFICA_VENCEDOR_LINHA1
VERIFICA_VENCEDOR_COLUNA1:
XOR BX, BX
XOR CX, CX
MOV DI, DX
COLUNA_LOOP1:
CMP CX, 3
JE VERIFICA_VENCEDOR_DIAGONAL1
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE PROXIMA_COLUNA1
ADD DI, 3
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE PROXIMA_COLUNA1
ADD DI, 3
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE PROXIMA_COLUNA1
ADD DI, 3
JMP GANHOU_BOARD1
PROXIMA_COLUNA1:
MOV DI, DX
INC BX
ADD DI, BX
INC CX
JMP COLUNA_LOOP1
VERIFICA_VENCEDOR_DIAGONAL1:
XOR BX, BX
XOR CX, CX
MOV CX, 3
MOV DI, DX
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE DIAG21
ADD DI, 4
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE NAO_GANHOU1
ADD DI, 4
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE DIAG21
JMP GANHOU_BOARD1
DIAG21:
MOV DI, DX
ADD DI, 2
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE NAO_GANHOU1
ADD DI, 2
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE NAO_GANHOU1
ADD DI, 2
MOV AL, [DI]
CMP AL, JOGADOR_CURR
JNE NAO_GANHOU1
JMP GANHOU_BOARD1
NAO_GANHOU1:
RET
GANHOU_BOARD1:
CALL EXIT
CHECK_WINNER ENDP
1条答案
按热度按时间sgtfey8w1#
我觉得这个手术很好。我在报纸上查过了。;)也许问题出在进程之外,打印输出有问题?我不知道。输入表只有一维,对吧?
Orrr...当你找到一个赢家你使用这个代码
GANHOU_BOARD1:
CALL EXIT
所以你必须从Exit proc返回到CHECK_赢家PROC中,并且在最后没有
ret
指令。或者是jmp来标记,你在堆栈上有一些垃圾,你弹出这个。不知道,只是想快点。;)