2016-06-12 9 views
-1

Вот код:Ассамблея - не может понять, что случилось

proc ChangeColumnNumber1 
    inc [FirstColumnArray] 
    mov [Player1Drawx], 25h 
    mov [Player1Drawy], 87h 
    jmp DrawPlayer1Disc 
endp ChangeColumnNumber1 

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 CheckPlayer2Number 
    mov ah, 7 
    int 21h 
    cmp al, 31h 
    je Player2CheckColumn1 
    jmp CheckPlayer2Number 
endp CheckPlayer2Number 

proc Player2CheckColumn1 
    cmp [FirstColumnArray], 0 
    je ChangeColumnNumber2 
    cmp [FirstColumnArray + 1], 0 
    je ChangeColumnNumber2 
endp Player2CheckColumn1 

proc ChangeColumnNumber2 
    inc [FirstColumnArray + 1] 
    mov [Player2Drawx], 25h 
    mov [Player2Drawy], 60h 
    jmp DrawPlayer2Disc 
endp ChangeColumnNumber2 

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 

Когда я исполняю его я должен нажать «1». Когда я это делаю, он должен нарисовать квадрат, и когда я должен снова нажать «1», он не рисует второй квадрат. Я не понимаю, почему это не работает. До этого у меня была команда mov, которая перемещает значение, например, в Player1Drawx, но оно не будет работать с моим новым кодом, поэтому я удалю его.

Спасибо за любую помощь, которую я получаю.

+0

Используйте отладчик и комментируйте свой код, особенно если вы хотите, чтобы другие помогли. Также укажите надлежащее [MCVE]. – Jester

ответ

1
proc ChangeColumnNumber1 
    inc [FirstColumnArray] 
    mov [Player1Drawx], 25h 
    mov [Player1Drawy], 87h 
    jmp DrawPlayer1Disc 
endp ChangeColumnNumber1 

При jmp DrawPlayer1DiscDX регистр не была установка, до сих пор вы сразу же использовать его в cmp dx, [Player1Drawy + 14h].

DrawPlayer1Disc: 
    mov bh, 0h 
    inc [Player1Drawy] 
    mov dx, [Player1Drawy]   <<< Don't you need this? 
    cmp dx, [Player1Drawy + 14h] 
    jl DrawPlayer1Loop 
    ret       <<< Aren't you missing a return here? 

То же самое относится и к DrawPlayer2Disc.