如何实现8086清屏后将光标移至新行以打印下一个函数
代码不生效的核心问题
- 第一个致命错误:你在调用
int 10h完成清屏(设置8025文本模式本身就会触发清屏)后,无参数调用了int 21h。此时ah寄存器的值还是之前设置的00h,对应int 21h的功能号是程序终止退出*,所以后续移动光标的代码完全没有被执行,程序直接就结束了。 - 第二个潜在问题:直接用
ret结束DOS程序的写法不通用,只有.com格式的程序或者栈结构符合要求的.exe程序才能正常返回,更稳妥的写法是调用DOS中断的退出功能。
修正后的可运行代码
; 8086 DOS下清屏+移动光标到左上角代码 mov ah, 00h ; 功能号:设置显示模式 mov al, 02h ; 显示模式:80*25 16色文本模式,调用后自动清屏 int 10h ; 调用BIOS中断执行操作,删掉多余的int 21h mov ah, 02h ; 功能号:设置光标位置 mov bh, 00h ; 页号:第0显示页 mov dx, 0000h ; 光标位置:dh=行号0,dl=列号0,即左上角 int 10h ; 调用BIOS中断执行操作 ; 正常退出DOS程序 mov ah, 4ch int 21h
验证说明
这段代码在MASM/TASM编译链接后,在DOSBox或者实模式DOS环境下运行可以正常完成清屏,并且光标定位到左上角。
内容的提问来源于stack exchange,提问作者sherley
相关产品推荐
相关产品推荐

