私はアセンブリでテキストベースのアニメーションに取り組んでいます。そこでは、可能な限りスムーズにし、バウンドする物理をシミュレートするために、多数の画面の更新が必要です。呼び出しを使用int 1ah
して、画面の更新の遅延を制御し、図形がピークに達するまで減速し、下降するときに速度が上がるように見せます。それぞれの後に画面に表示される個別のバナーもありますCALL CLEAR
。
動く図形のコードを処理するコードを作成しましたが、期待どおりに機能しました。画面に静止バナーを配置する追加のコードを追加すると、特定の時点の後でdosboxがロックされます。
より大きなループに含まれる次のコードには8つのバリエーションがあります。;PRINT BANNER
7番目の内側のループにを追加するまでは正常に動作します。実際にはLEA
、バナーなしでテストしたときに存在しなかった以下のループの最初のループで中断します。
.REPEAT
LEA SI,SHAPE
MOV DH,ROW
MOV DL,COL
CALL CLEAR
CALL PUTSHAPE
;PRINT BANNER
LEA SI,BANNER
MOV DH,25
MOV DL,39
CALL PUTSHAPE
;END BANNER
MOV TIME, 1
MOV AH, 0
INT 1AH
ADD TIME, DX
.WHILE DX < TIME
MOV AH, 0
INT 1AH
.ENDW
ADD COL, 2
SUB ROW, 4
DEC D7
MOV CX, D7
MOV TIME, 0
.UNTILCXZ
私はここであまりにも速く期待しすぎていますか?私はLEA
、遅延の後に2番目を呼び出すようにコードを再配置しようとしました。また、テキストベースのアニメーションに正確に関係しない問題に対する他の多くの提案や、私が従うことができない指示を確実に使用しました。私は、カスタムライブラリを利用した本から学ぶ真面目なアセンブリ初心者です。コマンドプロンプトから実行している32ビットWin7Proでプログラムを試してみたところ、NTVDM.EXEエラーが発生しました。コードの明らかな問題に関するアイデアや洞察はありますか?