【发布时间】:2020-04-02 22:03:55
【问题描述】:
我正在尝试打印此分数以创建游戏,并且分数仅打印在一侧,(当我增加 分数,它只在一侧打印分数,另一侧保持零。这是代码,谢谢。
proc print_score
; prints the points in the middle of the screen:
; set cursor to the middle:
mov dl, 170
mov dh, 45
mov bh, 0
mov ah, 02h
int 10h
; print scores, knowing it can be 0-9 (aka one char):
mov al, [Score1]
mov bl, 0Fh
mov bh, 0
mov ah, 0eh
add al, '0'
int 10h
; score1:score2
mov al, ':'
mov bl, 0Fh
mov bh, 0
mov ah, 0Eh
int 10h
mov al, [Score2]
mov bl, 0Fh
mov bh, 0
mov ah, 0eh
add al, '0'
int 10h
ret
endp print_score
proc check_goal
pusha
;if player 1 scores to player2 inc his score
check_goal_player1:
cmp [ballX],315d
ja goal_1
jmp check_goal_player2
goal_1:
inc [score1]
call refrash
;call player_2_scored
jmp new_round
check_goal_player2:
cmp [ballX],0d
jb goal_2
jmp no_update
goal_2:
inc [score2]
call refrash
;call player_1_scored
new_round:
call restore_ball_possition
jmp no_update
no_update:
popa
ret
endp check_goal
【问题讨论】:
-
两半的打印代码看起来相同(除了 Score1 与 Score2),因此问题可能出在其他地方。使用调试器查看内存(和寄存器)中的值。如果 Score2 没有增加,那么这个正确(?)打印什么的代码不是你的问题的minimal reproducible example。
-
是否打印冒号?还是只是
Score1的值? -
它,应该同时打印 score1 和 2 的值。当我将分数增加 1 或 2 时,它应该在 2 个位置(score1:score2)打印它,它只在一侧打印分数跨度>
-
但是你没有回答我的问题。它是否打印两个分数之间的分隔符?它总是打印 Score1 吗?还是它总是打印 Score2?
Score1和Score2是如何定义的?你确定你保存的分数正确吗?您是否在调试器中运行代码以查看[Score1]和[Score2]中的内容。您显示的打印代码不太可能是问题所在,因此除非您能回答我们的问题或提供更多代码供我们查看,否则很难为您提供帮助。 -
谢谢,我会尝试调试过程。它只是打印两个分数之间的分隔符。分数定义为字节(db)