写了一个汇编语言的程序,要求输出16个Z,背景颜色为白,前景颜色用16种颜色显示,16个Z还要连成一条斜线
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
MOV AL,'Z'
MOV DX,16
MOV BL,0F0H
A1: PUSH DX
CALL SUB2
MOV AH,3 ;读取光标位置
MOV BH,0
INT 10H
INC DL ;改变光标列号
MOV AH,2
INT 10H
MOV AH,9
MOV BH,0
MOv CX,1
INT 10H
;MOV AH,3 ;读取光标位置
;MOV BH,0
;INT 10H
;INC DL ;改变光标列号
CALL SUB1
ADD BL,1
POP DX
DEC DX
JNZ A1
MOV AH,4CH
INT 21H
SUB1 PROC NEAR
PUSH DX
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
POP DX
RET
SUB1 ENDP
SUB2 PROC NEAR
PUSH CX
PUSH DX
MOV CX,DX
A2: MOV DL,20H
MOV AH,2
INT 21H
DEC CX
JNZ A2
POP DX
POP CX
RET
SUB2 ENDP
CODE ENDS
END MAIN
这是本人自己编写的,但是一直调试不出想要的结果,希望有人指点迷津。该程序输出的结果中,不会显示出Z,而是显示16个空白区域。求指点
答案:这段代码,呵呵,怎么说呢,看似正常,其实,是存在的bug的.
我其实也不过是asm的爱好者,并没写过多少代码,所以亲自调试了一下.
发现如下:
你一会儿用Dos中断,一会儿用bios中断,这样做的影响却不了解.
比如说吧,为什么本来预期的白色背景各种color的Z无法出现?
当你调用Int 21中断的时候, 其背后也是调用了bios的int 10中断,实际上在调用完int 21 以后,会把al的值已经改成了20h(空格),然后调用了int 10.
当你后面的代码调用int 10的时候以为al中还是 'Z'就错了.
浅见,共同学习.
其他:hngncg
上一个:请各位好友推荐几本关于学习单片机的汇编语言教材 谢谢了 急求
下一个:汇编语言,判断连续两次按键