bookstack

显示器端口

你需要通过谷歌预先了解的概念:I/O ports

目标:学习如何使用VGA卡数据端口

我们通过I/O寄存器和端口与设备交互

打开drivers/ports.c 测试内联汇编的C代码。它有点不一样,比如源和目标操作数顺序,以及有趣的分配操作数变量

当你理解了概念,打开kernel/kernel.c 作为一个例子使用

在这个例子鸿,我们将测试I/O 端口,这个端口和屏幕光标位置匹配。特别的,我们将查询值为14的端口0x3d4 作为请求光标位置的高字节,值为15的相同端口作为低字节

当这个端口被查询了,将把结果保存到0x3d5端口

不要错过使用gdb去监控C变量的机会,因为我们仍然不能在屏幕上打印。为了做到这一点,在一个特定的行设置一个断点, breakpoint kernel.c:21 并使用print命令打印测试值。现在我们花了一些时间在交叉编译的GDB上,你不高兴吗? ;)

最后,我们使用查询到的光标位置,在那个地方写一个字符