emu8086を使用して画面上の文字をバウンスするにはいくつかの助けが必要でした。 画面のサイズは(80x25文字)です。私はそれを斜めに動かすことができましたが、それは戻っていません。代わりに、それはちょうど境界(つまり24行)に達した後にx軸上にまっすぐに行きます。アセンブリで文字をバウンスする方法
enter code here
Data_seg segment 'data'
char db 'A'
char2 db ' '
x1 db (1)
y1 db (1)
Data_seg ends
Code_seg segment 'code'
assume CS:Code_seg,DS:Data_seg
main PROC far
mov ax,Data_seg
mov ds,ax
mov cx,40
loop1:
;gotoxy
mov ah,02
mov dl,x1
mov dh,y1
mov bh,0
int 10H
;print a
mov al,char
mov dl,al
mov ah,02H
int 21H
;gotoxy
mov ah,02
mov dl,x1
mov dh,y1
mov bh,0
int 10H
;print " "
mov dl,char2
mov ah,02H
int 21H
inc x1
inc y1
;if(x1<2)||(x1>79)
mov al,x1
cmp al,2
jl ifPart
mov al,x1
cmp al,79
jge ifPart
;if(y1<2)||(y1>79)
y11:
mov al,y1
cmp al,2
jl ifPart2
mov al,y1
cmp al,24
jge ifPart2 ;jge for boundry(24)
jmp endif
ifPart:
dec x1
jmp y11
ifPart2:
dec y1
endif:
loop loop1
Code_seg ends
end main
キャラクターは、ベクトルを動かすことで、今、バウンスしています。それは、あなたが24行目の一番左の列にある文字を表示してからバウンスします。 –
修正済み: "cmp al、24"を "cmp al、23"に変更して、問題(コメントに記載)を修正できました。プログラムは今、完璧に働いています。あなたの助けにたくさん感謝しています。 –
@MUHAMMADAHMEDVOHRA約24/23 .. DOS出力割り込みの使用に問題はありません。最後の行が使用されたときに画面が「スクロール」しますか? VRAMに直接書き込むことを検討してください(グラフィックカード内部を再構成しない限り、デフォルトでB800:0000からテキストモードが開始されます)。これにより、VRAMコンテンツを完全に制御できるようになります。可能なすべての色/点滅の組み合わせを使用してください。最後の行ではスクロールしません(VRAMコンテンツを移動するか、ビデオメモリの開始を変更することによって、手動でコードをスクロールする必要があります)。 – Ped7g