ネストされたループを使用し、次のパターンで文字を出力する単純なコードを作成しようとしています。
XXXXXXXXXX
XXXXXXXXX
XXXXXXXX
XXXXXXX
XXXXXX
XXXXX
XXXX
XXX
XX
X
ここにコードがあります。コードは完全に正常に動作します
MOV AX, @DATA ; INITIALIZE DS
MOV DS, AX
; PRINT X
MOV CX,10
MOV BX,10
L2:
PUSH CX
MOV CX,BX
L1:
MOV DX, OFFSET HW ; LOAD THE STRING
MOV AH,09H
INT 21H
Loop L1
SUB BX,01
POP CX
MOV DX,0AH
MOV AH,02H
INT 21H
Loop L2
MOV AH, 4CH ; RETURN CONTROL TO DOS
INT 21H
しかし、ビデオ割り込みを使用してクリアスクリーンを使用するとすぐに、出力が完全に台無しになります。
出力は次のとおりです。
XXXXXXXXXX
XXXXXXXXX
XXXXXXXX
XXXXXXX
XXXXXX
XXXXX
XXXX
XXX
XX
X
これがそのコードです。
.MODEL SMALL
.STACK 100H
.DATA
HW DB "X$"
.CODE
MAIN PROC
MOV AX, @DATA ; INITIALIZE DS
MOV DS, AX
; CLEAR SCREEN
MOV AH, 06H
MOV AL, 00H
MOV CX, 00H
MOV DH, 25
MOV DL, 80
MOV BH, 0FH
INT 10H
; PRINT X
MOV CX,10
MOV BX,10
L2:
PUSH CX
MOV CX,BX
L1:
MOV DX, OFFSET HW ; LOAD THE STRING
MOV AH,09H
INT 21H
Loop L1
SUB BX,01
POP CX
MOV DX,0AH
MOV AH,02H
INT 21H
Loop L2
MOV AH, 4CH ; RETURN CONTROL TO DOS
INT 21H
MAIN ENDP
END MAIN
しかし、各反復後に行を残す改行を削除すると、つまり
MOV DX,0AH
MOV AH,02H
INT 21H
出力は期待どおりです。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
クリアスクリーンコードと改行コードの関係がわかりません。なぜ彼らはお互いを台無しにしています。?
クリアスクリーンの代わりにカーソル位置セットコードを使用している場合、同じ問題が発生します。
MOV AH, 02H
MOV BH, 00H
MOV CX, 0000H
MOV DX, 0C22H
INT 10H
出力は、画面の中央にある次のようになります。
XXXXXXXXXX
XXXXXXXXX
XXXXXXXX
XXXXXXX
XXXXXX
XXXXX
XXXX
XXX
XX
X
以下のように表示されていますが、
XXXXXXXXXX
XXXXXXXXX
XXXXXXXX
XXXXXXX
XXXXXX
XXXXX
X
XX
XXX
XX
X