x86图形模式下如何清屏?使用int 10h/ah=06h清屏后内容复现
问题分析与解决方案
你的问题核心是清屏操作没有彻底切断旧内容的显示触发源,常见原因和解决办法如下:
未同步更新光标位置
int 10h ah=06h al=00h只是滚动窗口填充空白,但如果光标还停留在之前的位置,后续的输出或者某些中断可能会把旧缓冲区的内容带出来。清屏后必须强制把光标移到左上角(0行0列),用这条指令:mov ah, 02h mov bh, 0h ; 视频页号,默认用0即可 mov dh, 0h ; 目标行号 mov dl, 0h ; 目标列号 int 10h程序逻辑重复输出旧内容
检查你的代码,有没有在清屏后又执行了循环打印旧文本、读取未覆盖的内存区域再输出的逻辑——很多时候是自己的代码不小心把内容又打回去了,不是清屏指令的问题。BIOS内部缓冲区未被彻底清空
如果调用BIOS中断清屏不彻底,可以直接操作显存(B800h段)来覆盖所有显示内容,这种方式更直接:mov ax, 0B800h mov es, ax mov di, 0h mov cx, 80*25*2 ; 80列25行的文本模式,每个字符占2字节(ASCII码+显示属性) mov al, ' ' ; 空白字符 mov ah, 07h ; 黑底白字的默认属性,可根据需求修改 rep stosw ; 批量填充显存
内容的提问来源于stack exchange,提问作者Scipio
相关产品推荐
相关产品推荐

