assembly 组件8086井字头程序不工作

46qrfjad  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(70)

汇编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
sgtfey8w

sgtfey8w1#

我觉得这个手术很好。我在报纸上查过了。;)也许问题出在进程之外,打印输出有问题?我不知道。输入表只有一维,对吧?
Orrr...当你找到一个赢家你使用这个代码
GANHOU_BOARD1:CALL EXIT
所以你必须从Exit proc返回到CHECK_赢家PROC中,并且在最后没有ret指令。
或者是jmp来标记,你在堆栈上有一些垃圾,你弹出这个。不知道,只是想快点。;)

相关问题