首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

即便是非常袖珍的程序,也有可能遇到不能正确运行的情况,对此你一定并不惊讶,谁都可能少写一个标点,或者在一个小小的逻辑问题上犯迷糊。好在我们可以调试,通过调试,可以发现错误,让程序日臻完美。但是对于操作系统这样的特殊程序,我们没有办法用普通的调试工具来调试。可是,哪怕一个小小的Boot Sector,我们也没有十足的把握一次就写好,那么,遇到不能正确运行的时候该怎么办呢?在屏幕上没有看到我们所要的东西,甚至于机器一下子重启了,你该如何是好呢?

每一个问题都是一把锁,你要相信,世界上一定存在一把钥匙可以打开这把锁。你也一定能找到这把钥匙。

一个引导扇区代码可能只有20行,如果Copy&Paste的话,10秒钟就搞定了,即便自己敲键盘抄一遍下来,也用不了10分钟。可是,在遇到一个问题时,如果不小心犯了小错,自己到运行时才发现,你可能不得不花费1010分钟甚至更长时间来解决它。笔者把这20行的程序称做水面以上的冰山,而把你花了数小时的时间做的工作称做水面下的冰山。

古人云:“授之以鱼,不如授之以渔。”本书将努力将冰山下的部分展示给读者。这些都是笔者经历了痛苦的摸索后的一些心得,这些方法可能不是最好的,但至少可以给你提供一个参考。

好了,以Boot Sector为例,你可以想像得到,将来我们一定会对这20行进行扩充,最后得到200行甚至更多的代码,我们总得想一个办法,让它调试起来容易一些。其实很容易,我们只要把“org  07c00h”这一行改成“org  0100h”就可以编译成一个.COM文件让它在DOS下运行了。我们来试一试,首先把07c00h改成0100h,编译:

nasm boot.asm –o boot.com

好了,一个易于执行和调试的Boot Sector就制作完毕了。调试.COM文件可能让你仿佛一下子回到了20世纪,没关系,怀旧一下感觉还是蛮不错的。

Turbo Debugger是一个不错的调试工具,“图形化”界面,全屏操作,用起来感觉和一个“严重”精简后的Windows差不多J

调试完之后要放到软盘上进行试验,我们需要再把0100h改成07c00h,这样改来改去比较麻烦,好在强大的NASM给我们提供了预编译宏,把原来的“org 07c00h”一行变成许多行即可:

代码1-2  节自\chapter1\b\boot.asm

;%define    _BOOT_DEBUG_    ; Boot Sector 时一定将此行注释掉!

; 将此行打开后用 nasm Boot.asm -o Boot.com

; 做成一个.COM文件易于调试

%ifdef  _BOOT_DEBUG_

    org  0100h      ; 调试状态,做成 .COM 文件,可调试

%else

    org  07c00h     ; Boot 状态,BIOS 将把 Boot Sector 加载到 0:7C00

; 处并开始执行

%endif

这样一来,如果我们想要调试,就让第一行有效,想要做Boot Sector时,将它注释掉就可以了。

这里的预编译命令跟C差不多,就不用多解释了。

至此,你不但已经学会了如何写一个简单的引导扇区,更具备了扩充它的条件—知道如何排错,如何调试。这就好比从石器时代走到了铁器时代,宽阔的道路展现在眼前,运用工具,你无所不能。

如果说开始我们还是在黑暗中摸索,到现在为止,我们至少已经看到了光亮,我们有信心将Boot Sector进行不断扩充,让它变成一个真正的操作系统的一部分。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论