アセンブリ言語で、スクリーン セーバーのように画面上のテキストまたは文字を移動するプログラムを作成しようとしています。つまり、最初は下方向だけでなく前方にも移動する必要があります。画面の下限に達すると、前方および上方に移動し始め、その逆も同様です。
私は自分で試してみましたが、キャラクターを前方と下方に同時に動かすことができました。キャラクターが画面の下限に達したときに、上方向と前方向に移動したいのですが、その方法がわかりません。
emu8086アセンブラを使用しています
.model small
.data
st1 db "O",13,10,'$'
.code
main proc
mov AX,@data
mov DS,AX
mov BL,0
label1:
mov AH,2H
mov BH,0 ;goto-XY
mov DH,BL
mov DL,BL
INT 10H
mov AH,9H
mov DX,offset st1 ;print
INT 21H
mov AH, 6H
mov AL, 0
mov BH, 7 ;clear screen
mov CX, 0
mov DL, 79
mov DH, 24
int 10H
ADD BL,1
cmp DH,23 ;conditional jump
jz label2
loop label1
label2:
; mov AH,2H
; mov BH,0 ;goto-XY
; mov DH,BL
; mov DL,BL
; INT 10H
mov AH,9H
mov DX,offset st1 ;print
INT 21H
mov AH, 6H
mov AL, 0
mov BH, 7 ;clear screen
mov CX, 0
mov DL, 79
mov DH, 24
int 10H
SUB BL,1
loop label2
mov AH,4CH
INT 21H
end main
最初のループの各反復の終わりに、画面の y 軸の下限が 23 であるため、「DH」= 23 かどうかを確認しています。画面の下限に達した場合は、「label2」にジャンプする必要がありますが、 「cmp」ステートメントを正しく使用していないため、「label2」にジャンプしません。誰でもこの問題を解決できますか?
私が助けてほしい主なことは、「label2」にジャンプするために「label1」でチェックインする必要がある条件です。
PS。アセンブリ言語の初心者なので、解決策を提案する場合は、シンプルで理解しやすいものにしてください。これが私がこれまでに試したことです。