我正在尝试编写一个使用嵌套循环的简单代码,以以下模式打印字符,
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