计算机自制操作系统(八):仿生DOS操作系统源代码

您所在的位置:网站首页 自己编写操作系统的软件 计算机自制操作系统(八):仿生DOS操作系统源代码

计算机自制操作系统(八):仿生DOS操作系统源代码

2024-05-24 09:05| 来源: 网络整理| 查看: 265

一、真机运行

我们已经完成了仿生DOS操作系统的制作,并在上一章的末尾给大家在虚拟机上做了演示。今天,我们要将该操作系统在真机上启动运行,是不是非常期待自己做出的第一款比较有意义的操作系统?

在“计算机自制操作系统(五):引导和内核程序组织方式”一章中,我们说了操作系统的引导和内核程序最好分开在两个独立的文件中,这样编程的难度相对更小。但是,由于我基本已经掌握了汇编语言的一些知识和技巧,因此我这次的仿生DOS操作系统是在一个文件里实现的,难度也不是特别的大。我们照样把编译之后的二进制文件命名为:boot.bin。

真机启动需要用U盘来实现,但是我们在boot.bin里所有的装载操作系统的操作都是基于软盘的,利用的是BOIS中断INT 13h,其中DL取00H,因为 0表示第一个软盘。现在要从U盘来启动,因此理论上讲我们需要将boot.bin里读软盘的程序全部修改为读U盘,但是BOIS中断里的INT 13h没有支持读U盘的功能(即使有,也不是C\H\S结构实现),这样就相当麻烦了!

在万般无奈之际,我诞生了一个大胆的想法:软盘不就是A盘吗?那我将U盘的驱动器号修改为A不就行了吗?

应该说这是一个天真的想法,这都哪儿跟哪儿啊。说干就干啊,我们知道修改磁盘驱动器在计算机管理---存储---磁盘管理里面,于是我就将我的U盘从H修改为了A。最后,我就把boot.bin复制进了U盘,方法见“计算机自制操作系统(一):最小操作系统”。

在我不报任何期望的情况下,重启计算机从U盘启动,居然TM的成功了:

笔者开发的仿生DOS操作系统https://www.zhihu.com/video/1197849412763029504

但是,我后来试了一下,这种方法不是所有计算机都可以,我有3台有2台不行。当然都是报读U盘数据错误,这个应该是不同的电脑BIOS不同导致的。所有,有精力的人可以再研究一下怎么用INT 13H从U盘读数据,那样就完全解决问题了。

部分电脑执行Loader时报错

虽然意外收获成功的惊喜,但是随着我的一阵mkdir\format等一顿猛操作,就彻底悲剧了,因为我忘记了我的真机电脑C盘是我正在运行的Windows啊......

这下系统彻底报废了,再也启动不了了,硬盘全部凉凉........

除了哭晕在厕所,啥都干不了,只有赶紧上来更新文章。

二、源代码

仿生DOS操作系统只包含一个程序源文件Boot.asm,全部采用汇编语言编写,程序长度总共1000行左右,实现了简易的文件系统,支持目录和文件的创建、删除、复制、移动等简易操作。在真机上运行验证通过。

话说这个仿生DOS操作系统由于是纯汇编,写得我是相当的痛苦,也是我接触计算机程序以来最痛苦的经历。由于当时不知道有bochs调试器,特别是程序出了问题之后反复定位的检查过程简直不堪回首。记忆中最深刻、最容易犯下的错误是由于疏忽大意,导致入栈和出栈的不平衡操作会引起程序莫名的跑飞。自己都记不清有多少次摔打键盘想直接放弃了,但所幸最终还是坚持做完了。正是由于这份坚持,才造就了我强大的汇编程序编写和阅读能力,真正掌握了这样一把瑞士军刀,以致我后来深深的爱上了写汇编程序,会有一种披荆斩棘的感觉。

NUMsector EQU 8 ; 设置读取到的软盘最大扇区编号(1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3