回 帖 发 新 帖 刷新版面

主题:硬盘工具(过程讲述)

做这个程序的机会来自与一个赌局
当时还是2004年初,我在编程爱好者的qbasic区,一次,一个VC的高手路过,就是qb是垃圾,说我们都是垃圾学垃圾 ,然后...我就挑战他,说能不能做个硬盘的扇区编辑工具
呵呵,现在也许他都忘记了,不过,我还得谢谢他呢 !我在这个过程中得到很多知识 。
下面是这个挑战帖子的连接
http://www.programfan.com/club/old_showbbs.asp?id=19661

     我想要做这个程序,首先的核心问题是要解决能读写硬盘,当然我以前也掉用INT13读写过,可是老的INT13最大读写只能是8.4GB,容量再大的硬盘它也就读不了,现在的硬盘最少都是40GB了,而且老INT13中断与扩展INT13调用完全不一样,以前老的INT13是用寄存器来传送地址。
     这样我就开始在网上到处找扩展INT13中断的资料,结果在老罗的汇编网站上找到了中文资料,而且又在DOS论坛的一个网友的帮助下找到了E文资料 ,看来只要你愿意帮助别人,别人也很愿意帮助你!
     有了资料,我就开始做读写扇区的试验,结果死机再死机,弄的我心灰意懒,我在本论坛也碰到过一个说对QB很精通的奶奶,我问了她,可没有什么结果,看来赵奢的后代挺多的!就这样晃了一个多月,发现用扩展INT13的48H功能能得到硬盘的总扇区数,这个和别的硬盘工具得到结果一样,我又兴奋了,继续试验,读硬盘还是死机,我仔细的检查我的代码,确实没有错误,没有办法,我被打到了,后来我在QQ上碰到一个计算机专业的学生,他当时要写个毕业作品,老师布置的作业是在裸机上写鼠标的驱动,他问到我怎么样解决,然后我告诉他可以把MOUSE.COM反汇编来参考(呵呵,实际上我可不会,只是给了他建议)不过,他还不知道有这个文件呢,也是,现在学电脑都从WIN开始学,哪里知道有这个加载鼠标的命令啊!我就找了个最小的mouse.com给了他,就这样我了解到他懂汇编,而且他还是个高手,更更重要的是他懂E文!!
    惨!!!
他翻译的E文我和中文的资料对比,原来中文资料的几个关键部位是错误的,不是我调用错误现在还有很多网站都是引用的这个错误的资料,而且看得出来 ,这几个错误是翻译的人故意弄错的!
改正错误后果然能读写,当时正常读出的时候,真的是非常非常兴奋!就象贾岛当时的心情“二句三年得,一吟双泪流”
......
这个最重要的问题解决后,再就是断断絮絮写一些E文本模式模块和显示汉字的模块,文本下的画框,按钮、选择,保存恢复屏幕。。。。。。当然我不做这个也行,也能完成我和他的赌局,但是,我这时想把这个东西做成很实用的软件,就断断续续的做,当时我用的文本模式下显示汉字的数量有限,理论能做64个汉字,实际上只能是16个汉字显示正常,这样少的汉字是不实用的,如果做成图形界面就不会这么麻烦,但是,我还是喜欢字符界面,这样我就停了下来,当时我的工作也忙,停了几个月,后来我到宜昌学习,有机会看到了一本好书《PC技术内幕》,这是一本好资料,(有兴趣的可以参考它写自己的操作系统)这样我就解决了很多细小的问题。
   开始我的想法把这个软件做成能分区、恢复分区、隐藏分区、格式化、反格式化、数据恢复等等这些功能,但是在实际中,我只能实现分区丢失(就是C、D、E。。。。都找不到)后的恢复、硬盘的参数查看、物理扇区的查看编辑、扇区的保存恢复,别的功能我还不能做,这个东西到不是我做不出来,这里有个效率的问题,硬盘上那么多扇区,我不能一次只读一个扇区,我得一次读很多个,在这里就出现问题了,我试验过,在我这个程序中一次如果读32个扇区(一个扇区是512个字节)要定义出16384这么大的空间是做不到的,这样,我就想单独做一个有这样功能的 程序,在一个新建的BAS中,一次可以读写63个扇区,63×512,那么效率就会很高了,在程序中我用的是模块化编程,共有5个模块,主模块、鼠标模块、文本下显示汉字的模块、文本模块(这个是一些过程,比如按纽,显示、保存恢复屏幕等等)、硬盘扩展INT13调用的模块,这个主模块倒不大,可是所有模块加一起的时候就很大了,编译后有100多K,在这个时候,我想,能有QB爱好者共同开发是多好的事情啊!所以,在论坛里我把一些如果调用中断的经验都很详细的写了出来,希望能有QB爱好者在做题目以后的业余时间看看,别只是学书本!要结合实际应用,QB也是很强大的,不强大的只是你的思想!

回复列表 (共2个回复)

沙发

这个程序(包括原程序)我已经发到dosQB论坛了,有兴趣的可以下载看看!

板凳

好!

我来回复

您尚未登录,请登录后再回复。点此登录或注册