第三章 让MBR直接操作硬盘,硬件深似海
本文最后更新于:1 年前
第三章 让MBR直接操作硬盘,硬件深似海
写在前面
7月7日,这一章的概念实在繁多,加上自己也没有汇编的基础,只能硬着头皮攻,加上晚上有学生会主席的竞选,心烦意乱,不过为了完成日更的目标,还是要尽力去做。面对压力时也不要被负能量击溃,我也始终保持着寻找乐趣的心态去学习、阅读。
进入正题
本章一上来讲述了许多晦涩难懂的概念,涉及到了一些汇编的知识,也讲述了一些NASM编译器的使用方法。我在初读这些知识的时候实在无心仔细研究,但是在进行到后面章节的时候发现这些前缀知识是必不可少的。我建议读者在初读的时候如果实在烦躁,可以适当跳过一些内容,等到后面进行编程的时候遇到不会的点再回过头来看,切忌在理论知识的重压下失去信心从而放弃。
然后咱们还是继续主线任务,上一章节我们完成了一个简单MBR编写,并且成功运行在了bochs上,但是需要注意的是这时我们的输出是建立在软件的基础上的,我们最终要实现在显卡上执行任务,首先从修改mbr.S的输出打印部分开始。这里源码我在这里粘出来吧。
1 |
|
后面介绍了bochs的调试方法,等后面遇到不懂得知识时回看也不迟。当然,512字节的MBR是没法满足为内核准备好环境的功能的,所以我们需要另一个更大的程序完成这项任务,它就是loader,加载器。所以MBR需要把loader从硬盘加载到内存中,在第二章中有提到两块可用区域,加载到那里面就ok了,我跟作者一样,也把loader加载到0x900这里。
在读取硬盘扇区这一部分。建议先好好阅读一下本节的前置章节,硬盘部分,再看代码就不会再有吃力的地方了。至此,mbr.S的任务也就结束了,接下来我们写一个简单的loader来进行一个结果实现,验证一下思路是否正确就ok了。还是贴出代码:
mbr.S
1 |
|
loader.S
1 |
|
boot.inc
1 |
|
写在后面
建议读者在阅读的时候不要偏离主线,作者花费了大量的篇幅去补充理论知识,但我们还是要记得自己的主线任务是os的实现,所以要秉持着理论服侍实践的想法去阅读。我虽阅读时间还很短,但能感觉到自己是真的学到并运用了一些知识,后面就要进入保护模式了,但我的夏令营集训也开始了,希望flag能完成.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!