水面下面的冰山

xiaoxiao2021-03-01  79

水面下面的冰山

本文摘自于渊编著的《orange's一个操作系统的实现》一书

即便是非常袖珍的程序,也有可能遇到不能正确运行的情况,对此你一定并不惊讶,谁都可能少写一个标点,或者在一个小小的逻辑问题上犯迷糊。好在我们可以调试,通过调试,可以发现错误,让程序日臻完美。但是对于操作系统这样的特殊程序,我们没有办法用普通的调试工具来调试。可是,哪怕一个小小的引导扇区,我们也没有十足的把握一次就写好,那么,遇到不能正确运行的时候该怎么办呢?在屏幕上没有看到我们所要的东西,甚至于机器一下子重启了,你该如何是好呢? 每一个问题都是一把锁,你要相信,世界上一定存在一把钥匙可以打开这把锁。你也一定能找到这把钥匙。 一个引导扇区代码可能只有20行,如果Copy&Paste的话,10秒钟就搞定了,即便自己敲键盘抄一遍下来,也用不了10分钟。可是,在遇到一个问题时,如果不小心犯了小错,自己到运行时才发现,你可能不得不花费10个10分钟甚至更长时间来解决它。笔者把这20行的程序称做水面以上的冰山,而把你花了数小时的时间做的工作称做水面下的冰山。 古人云:“授之以鱼,不如授之以渔。”本书将努力将冰山下的部分展示给读者。这些都是笔者经历了痛苦的摸索后的一些心得,这些方法可能不是最好的,但至少可以给你提供一个参考。好了,就以我们刚刚完成的引导扇区为例,你可以想像得到,将来我们一定会对这20行进行扩充,最后得到200行甚至更多的代码,我们总得想一个办法,让它调试起来容易一些。 其实很容易,因为有Bochs,我们前面提到的虚拟机,它本身就可以作为调试器使用。请允许我再次卖一个关子,留待下文分解。但是请相信,调试一个引导扇区──甚至是一个操作系统,在工具的帮助下都不是很困难的事情。只不过跟调试一个普通的应用程序相比,细节上难免有一些不同。 如果你使用的是Windows,还有个可选的方法能够帮助调试,做法也很简单,就是把“org 07c00h”这一行改成“org 0100h”就可以编译成一个.COM文件让它在DOS下运行了。我们来试一试,首先把07c00h改成0100h,编译: $ nasm boot.asm –o boot.com 好了,一个易于执行和调试的引导扇区就制作完毕了。如果你是以DOS或者Windows为平台学习的编程,那么调试.COM文件一定是你拿手的工作,比如使用Turbo Debugger。调试完之后要放到软盘上进行试验,我们需要再把0100h改成07c00h,这样改来改去比较麻烦,好在强大的NASM给我们提供了预编译宏,把原来的“org 07c00h”一行变成许多行即可: 1 ;

转载请注明原文地址: https://www.6miu.com/read-4309416.html

最新回复(0)