汇编操作VGA显存打印HelloWorld追加文本出现多余空格如何解决
问题原因
- VGA文本模式下每个显示字符占用2字节显存,低8位存字符ASCII码,高8位存颜色属性,所有显示内容在显存中是连续排列的。
- 原代码里
Hello,world!的最后一个字符!写入的偏移地址是18h,下一个字符的正确起始偏移应该是18h + 2 = 1Ah。你追加的姓名首字符直接从20h开始写入,中间1Ah、1Ch、1Eh三个偏移位置没有写入有效字符,默认显示为空白,就出现了多余的空格。 - 另有一个隐藏问题:你设置字符颜色时给
cx赋值为12,仅能覆盖原有12个Hello,world!字符,后续追加的字符不会应用你设置的黄底亮红色样式。
修复方案
- 调整追加字符的写入偏移地址,紧跟在
!之后写入:
; 原有代码保持不变 mov [18h], '!' ; 替换原有追加字符的代码 mov [1Ah], 't' mov [1Ch], 'e' mov [1Eh], 's' mov [20h], 't'
- 修改颜色循环的计数,把
mov cx, 12改为mov cx, 16,确保新增的4个字符也能应用正确配色。
修改完成后重新编译运行即可消除多余空格,同时姓名也会显示为和前文一致的配色。
内容的提问来源于stack exchange,提问作者roee attias
相关产品推荐
相关产品推荐

