2016-06-25 71 views
-3

的問題我有我的項目,由於明天,我完成了它,但我仍然有一些錯誤,我似乎無法理解如何解決它們。我坐了很久,我只是不知道該怎麼做。我會在後面解釋代碼。程序集x86 - 代碼

*注 - 這篇文章很長,但我真的需要幫助。如果有人真的願意幫助我,我有Skype。

我會上傳關於我的代碼一半,因爲另一半100%的作品:

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], 85h 
    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], 85h 
    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], 85h 
    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], 85h 
    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 
    add [Player1Drawx], 1h 
    cmp cx, [Player1Drawx + 14h] 
    jl DrawPlayer1Loop 

DrawPlayer1Disc: 
    mov bh, 0h 
    mov dx, [Player1Drawy] 
    add [Player1Drawy], 1h 
    cmp dx, [Player1Drawy + 14h] 
    jl DrawPlayer1Loop 
    jg GoToCheckIfPlayer1Won 

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], 85h 
    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], 85h 
    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], 85h 
    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], 85h 
    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 

我正在遊戲中的「連四」(這是一個非常簡單的遊戲,如果你不知道這是一個2分鐘的比賽閱讀將做到這一點)。我的代碼有兩個問題:

1 - 應該繪製光盤(一個正方形)的繪圖部分。下面是你試圖這樣做的樣子: enter image description here

問題發生在繪圖部分(DrawPlayer1Loop和DrawPlayer1Disc,當然它也發生在Player2中)。

2 - 遊戲應該在玩家之間切換,但由於某種原因,遊戲不會。當玩家1完成時,它應該跳轉到GoToCheckIfPlayer1Won。之後,它會調用CheckPlayer1Won並檢查他是否贏了。如果沒有,它會跳轉到CheckPlayer2Number,它基本上將轉向切換到第二個玩家,但它不會。

感謝您的幫助。

+4

認真KatomPower,一哭喊幫忙?你可以在這個網站中投票得最多的答案,添加一個「請儘快回答」,而這隻會讓它脫離主題。瞭解您何時工作的重要教訓:當您無法完成項目時,請專注於不要使其完全失敗。充分利用您的代碼,找出遺漏的功能,解釋設計選擇以及遇到的困難並記錄下來。出於遺憾:'cmp cx,[Player2Drawx + 14h]'是錯誤的,你需要'[PlayerDrawx] + 14h'但是必須被分割。調試!調試!調試!不要浪費你和我們的時間。 –

+0

@MargaretBloom謝謝你的回答,真的很抱歉,我正在給你留下印象。首先,我對這個網站很陌生,所以我只是寫了一些想到的東西。其次,我改變了我的代碼,它說「非法內存引用」。最後,你有什麼想法,爲什麼它不改變? – KatomPower

回答

1

做比較這些代碼。
爲第1的球員:

DrawPlayer1Disc: 
    mov bh, 0h 
    mov dx, [Player1Drawy] 
    add [Player1Drawy], 1h 
    cmp dx, [Player1Drawy + 14h] 
    jl DrawPlayer1Loop 
    jg GoToCheckIfPlayer1Won 
    . 
proc GoToCheckIfPlayer1Won 

對於第二的球員:

DrawPlayer2Disc: 
    mov bh, 0h 
    inc [Player2Drawy] 
    cmp dx, [Player2Drawy + 14h] 
    jl DrawPlayer2Loop 
    . 
proc GoToCheckIfPlayer2Won 

這些代碼應密切彼此相似!

  • 在第一個代碼中,jg GoToCheckIfPlayer1Won是多餘的。一旦形狀被繪製,你就想要落下。
  • 在第二個代碼中,您在使用它之前不要初始化DX寄存器!

我懷疑無處不在,你寫的`[... + 14H]你認爲這個數字是14小時對象的實際大小。如果是這種情況,那麼你無法像你那樣比較它。

mov dx, [Player1Drawy] 
add [Player1Drawy], 1h 
mov ax, dx 
add ax, 14h ;This makes AX the position of the bottom side! 
cmp dx, ax 
jl DrawPlayer1Loop 

爲了能夠進行切換,你需要真正從CheckIfPlayer1WonChackIfPlayer2Won程序返回的用戶:

je Player1WinnerAnnounce3 
jmp CheckIfPlayer2Won <<<< Change into a RET instruction! 
. 
Player1WinnerAnnounce3: 

je Player2WinnerAnnounce3 
jmp CheckPlayer1Number <<<< Change into a RET instruction! 

Player2WinnerAnnounce3: 
+0

感謝您的幫助。我按照你的說法改變了它,但不是它只是畫出來,以黃色覆蓋整個屏幕並使程序崩潰。它爲什麼這樣做,你知道如何解決我的第二個問題,它不會轉換? – KatomPower

+0

增加了切換用戶的解決方案。 – Fifoernik

+0

再一次,你不明白你有多少幫助我,非常感謝你。繪圖部分仍然不起作用,我實現了你的代碼。 – KatomPower