从0创建一个OS (九) 32-bit模式的打印字符串函数
学习如何在32-bit模式下不借助BIOS的0x10号中断打印字符串
关键字:32-bit保护模式; VGA; 视频存储区域
目标: 学会在32-bit保护模式下打印字符串
理论基础
32-bit保护模式
32-bit保护模式设计的内容非常多,十篇博客也写不完,因此这里只对32-bit保护模式的要点做简单介绍:
1. 32-bit保护模式下可以使用32bit的寄存器和寻址模式
2. 32-bit保护模式下可以使用受保护的存储区域,虚拟内存
其中寻址模式,受保护的存储区域,虚拟内存都依赖于GDT(Global Descriptor Table),即全局描述符表,这是保护模式中非常重要的一个概念和数据结构. 我们在后续的博客中会对GDT做相关介绍,本节的目的只是学习32-bit模式下的字符串打印.
想要详细了解保护模式的读者可以阅读《x86_x64体系探索及编程》(邓志),里面有非常详细的操作系统模式介绍.
VGA显示
显示大小: 25(行) × 80(列)
数据范围:0xB8000 ~ 0xB8000+25×80×2
显示格式:在数据范围内,每2个字节对应显示一个字符,其中偶数地址的字节代表字符(ASCII码值),奇数地址的字节代表字符属性,具体属性有字符颜色(低4bit),字符背景颜色(高4bit),具体颜色如下,参考自Assembly Language Color of Text
hex | bin | color |
---|---|---|
0 | 0000 | black |
1 | 0001 | blue |
2 | 0010 | green |
3 | 0011 | cyan |
4 | 0100 | red |
5 | 0101 | magenta |
6 | 0110 | brown |
7 | 0111 | light gray |
8 | 1000 | dark gray |
9 | 1001 | light blue |
a | 1010 | light green |
b | 1011 | light cyan |
c | 1100 | light red |
d | 1101 | light magenta |
e | 1110 | yellow |
f | 1111 | white |
源码
本节的源码无法测试,因为我们目前还没有学习创建32-bit保护模式中的GDT,所以这里只给出源码,说明如何在32-bit保护模式下进行打印字符串任务.
__EOF__

本文作者:EwanHai
本文链接:https://www.cnblogs.com/haiyonghao/p/14623199.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/haiyonghao/p/14623199.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律