常见错误

1. 屏幕显示乱码

原因: 属性字节和字符字节搞反了

解决: VGA显存格式是 [字符][属性],不是 [属性][字符]:

// 正确
uint16_t entry = (uint16_t)c | ((uint16_t)color << 8);
 
// 错误
uint16_t entry = ((uint16_t)c << 8) | color;

2. 光标位置不对

原因: 光标寄存器的高低字节写反了

解决:

// 寄存器14 = 高8位, 寄存器15 = 低8位
outb(0x3D4, 14);
outb(0x3D5, (pos >> 8) & 0xFF);
outb(0x3D4, 15);
outb(0x3D5, pos & 0xFF);

3. 滚屏后内容残留

原因: 最后一行没有正确清空

解决: 滚屏时确保用空格+当前颜色填充最后一行。

4. Tab输出不对齐

原因: Tab对齐计算有误

解决: Tab通常对齐到8的倍数:

cursor_x = (cursor_x + 8) & ~7;

5. printf打印负数异常

原因: 整数溢出(-2147483648取反仍为负数)

解决: 特殊处理 INT32_MIN 或使用无符号运算。