我正在为univesity工作,我们需要创建一个简单的breakout/arkanoid克隆,它很顺利但是我发现了一个会删除屏幕上所有内容的bug,这个bug是随机的,但我怀疑它与我的DrawPaddle功能.也许你可以发现错误或了解为什么视频内存会这样做.
游戏必须使用16位ms-dos程序集完成,我使用NASM + VAL + Dosbox创建它,我用以下代码编译它:
nasm -f obj test.asm
val test.obj
Run Code Online (Sandbox Code Playgroud)
游戏只是使用键盘箭头在固定屏幕上移动球拍,您也可以通过按下退出退出游戏.
这是一切都还好:https://puu.sh/yeKtG/affc912d4b.png,当程序溢出时它看起来像这样:http://puu.sh/yeKEy/caeef089d1.png或http:// puu.sh/yeKJH/1106e1e823.png
我注意到奇怪的行为只发生在我移动桨时它会随机发生,例如现在我从程序中删除了几乎所有其他东西,它可能需要几次尝试来获取bug.
这是DrawPaddle代码:
DrawPaddle:
push di
mov di, [paddleposition]
mov cx, 5 ;the paddle will be 5 pixels tall
.p0:
push cx
mov cx, paddlesize
.p1:
mov byte [es:di], bl
inc di
loop .p1
add di, screenweight - paddlesize
pop cx
loop .p0
pop di
ret
Run Code Online (Sandbox Code Playgroud)
这是完整的代码,它使用键盘处理程序读取输入,并使用320x200x256直接写入视频内存.
BITS 16
stacksize EQU 0200h
;Constantes
;Direccion de inicio de la …Run Code Online (Sandbox Code Playgroud)