当前位置:编程学习 > 汇编语言 >>

写了一个汇编语言的程序,要求输出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

上一个:请各位好友推荐几本关于学习单片机的汇编语言教材 谢谢了 急求
下一个:汇编语言,判断连续两次按键

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,