分享
 
 
 

When Do We Write Our Chinese OS ? (1)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

操作系统是计算机的核心,没有操作系统,一切计算机应用都免谈,但现在操作系统基本上被老外垄断,Windows就不说了,就算是Linux那也是泊来品,什么时候我们才能写出有中国特色的操作系统啊?

在工大,我们每个人都学过操作系统,我也一样,但老师教的那真的只是理论,一个实际的系统原比老师教的要复杂上一千万倍!然而,我们基本上没有可能实践的机会,就算是有一些实验,那也是停留在一个非常高的表层。我非常之笨,学完之后,还是不知系统是怎样从无到有,开始工作的。系统是怎样启动的?曾经把一段汇编代码写进了磁盘,但无论如何没将机器启动起来(原因现在已经清楚,稍后再谈)。想看看Linux的源码,但犹如天书!即使是Minix也非常之庞大,晦涉难懂!郁闷啊~~~,今天在网上无意间看见了一个老外写的E文,讲到此事,霍然开朗,在网上狂找了一堆E文后,最终将机器起启来了。(本人E文差得没底,基本上是用金山词霸配合联通国际在线翻译系统一句一句翻译的,痛苦啊!看来要想学好计算机E文不好还真不行:(,很多资料中文的就是没有,只有E文的,你咋办?)。现特将全过程描述一下,一来留个纪念,二来希望工大能有更多的人能对此感兴趣,超级大牛们早日写出我们自己的操作系统。Linux也是芬兰的一个大学生写的。

阅读本文最好有那么一丁点的汇编基础。另外,本人水平极其有限,对操作系统也不是很熟,对于论述中不计其数的错误,望大家原谅,千万不要来砍我~~~

首先,我要先说明一下计算机在你按下电源按钮后,计算机都做了什么

当你按下电源键的时候,同这个键相联的电线就会送出一个电信号给主板,主板将此电信号传给供电系统,供电系统开始工作,为整个系统供电,并送出一个电信号给BIOS,通知BIOS供电系统已经准备完毕。随后BIOS启动一个程序,进行主机自检,主机自检主要工作是确保系统的每一个部分都得到了电源支持,内存储器,主板上的其它芯片,键盘,鼠标,磁盘控制器及一些I/O端口正常可用,此后,自检程序将控制权还给BIOS。

接下来,BIOS开始启动操作系统。

BIOS将访问启动盘的第一个扇区(0磁道,1扇区,一共是512字节),BIOS将这第一扇区中的内容调入内存的0x7c00地址处,并开始执行它。这是启动系统的第一关,从此之后,系统就将控制权将给操作系统了,留下的事情就由你的程序来完成。

现在我们的任务就是写这样一个程序,系统将它称之为引导程序,用它来引导或说启动我们的计算机。它有如下两个特点:

1。大小只能是512字节,不能多一字节,也不能少一字节。因为BIOS只能读512字节的数据到内存中,多的部份BIOS不会理采

2。它必须以"55?AA"结尾,即最后两字节(511,512)必须是它们。这是引导区程序结束的标志,没有它BIOS不会将它作为引导程序看待。(我以前的程序没有执行,就是因为没有在这里写"55?AA")

把这一程序放在磁盘的0磁道,1扇区里,这样,此磁盘就可以用来引导系统,而且是用的你自己做的引导程序!

在开始制作引导程序之前,先介绍一下怎样在Windows环境下进行这样的开发。

首先,需要一个实验环境,你当然可以就用真实的计算机,如果你有多台计算机的话,且不觉得麻烦的话。

这里我们使用虚拟机来进行实验,它与使用真实的计算机是一样的,不信待会儿你可以自己实验一下。

我用的是?MS?Virtual?PC,使用非常简单,这里就不多说了,它可以用一个1.44M大小的img文件,作为模拟软盘,因此,我们就只需把我们的引导程序写到一个img文件中,就如同写在了一张磁盘上面,就可以用它来引导系统。

启动虚拟机后,在Floopy菜单下,选Floopy?Disk?Image项,然后选到我们生成的那个img文件后,就可以了。

下面说说img文件的创建生成方法

要把引导程序写到这个1.44M的文件里面,我使用的是WinHex工具,它非常方便,可以直接通过拷贝完成二进制文件的写入,而且还可以创建指定大小的文件。

1.44M的img文件可以用WinHex来创建,点击新建按钮就行,大小输入1474560,单位字节。

到时后,把我们写的程序用WinHex打开,将其内容复制到生成的img文件下就行。

这些工具连同本文所介绍的实验程序,我已经打包,大家可以通过下面的地址下载

ftp://202.118.239.46/Incoming/Other/BTC/temp/os_test/os_test.rar

下面再介绍一个本程序用到的唯一一个BIOS中断,

Int?0x10

0x10?中断是BIOS的显示器中断,所有输出都需要调用此中断,在使用前你需要设置一部分寄存器的值以告诉BIOS怎样进行输出

ah?:?0x0e?打字机模式,告诉BIOS,把字符输出到屏幕上

bh?:?页码

bl?:?文字属性

al?:?欲现示的字符的ASCII码

好了,下面我们就能创建我们的引导程序,完整的源程序如下:

[BITS?16]?????????????????????? ;?告诉编译器,编译成16位的程序

[ORG?0x7C00]??????????????????? ;?告诉编译器,代码将从0x7c00处开始执行

main:???????????????????????????;?主程序?

mov?ax?,?0x0000???????????????? ;?以下两句设置数据段为0000

mov?ds?,?ax

mov?si?,?Message??????????????? ;?设置基址指针

call?ShowMessage??????????????? ;?调用显示函数

jmp?$?????????????????????????? ;?$?代表此语句的地址,表示在此语句此进行无限循环

ShowMessage:??????????????????? ;?显示函数

mov?ah?,?0x0e?????????????????? ;?设置现示模式

mov?bh?,?0x00?????????????????? ;?设置页码

mov?bl?,?0x07?????????????????? ;?设置字体属性

nextchar:

lodsb?????????????????????????? ;?字符载入指令

????????????????????????????????;?它将DS数据段中SI为偏移地址的源串中的一个字符取出送AL,

??????????????????????????????? ; 同时修改SI指向下一个字符

or?al?,?al????????????????????? ;?测试字符串是否为0

jz?return?????????????????????? ;?如果为零则表明字符串结束,跳转到返回指令处返回原调用函数

int?0x10????????????????????????;?调用BIOS?10号中断显示字符

jmp?nextchar??????????????????? ;?继续显示下一下字符

return:

ret???????????????????????????? ;?返回原调用函数

Message:

db?'Can?We?Write?A?Chinese?OS??';?定义显示消息

db?13?,?10?,?0????????????????? ;?13?表示回车,10?表示换到下一行?0?表示字符串结束?

times?510?-?(?$?-?$$?)?db?0???? ;?填充?0?以满足文件大小足够512字节?

??????????????????????????????? ;?$?表示当前语句的地址,$$?表示程序的起始地址

db?0x55?,?0xaa????????????????? ;?结束标志

用任何一个文件编辑器输入它之后,存为test.asm

然后用一个汇编程序编译它,我用的是nasm,

输入?nasm?test.asm

编译完成后,会生成一个?test?文件,用WinHex打开它,然后照上面讲的方法,把它写到一个img文件中,你就可以尝试一下用你自己的程序启动计算机了。

也可以用WinHex将它直接写到磁盘上,通过磁盘启动,这样的感觉非常爽啊~~~

下面是它的运行结果

[/url]

一个操作系统非常的复杂,这里只是我的一个尝试实验的心得,它只完成了系统启动这一步,严格说来引导程序不算是操作系统,虽然它无比重要,一般来说,它需要把真正的操作系统的内核载入内存,然后用一条jmp指令跳转到真正的内核处执行。

抛砖引玉,希望有人能早日做出Chinese内核的,拥有自主知识产权的实用性操作系统。

错误不计其数,希望各位老师大侠牛人不吝指点,同好者共同探讨研究学习~~~

留个mail:?_xiao_han_@126.com?^_^

原文:[url=http://purec.binghua.com/Article/ShowArticle.asp?ArticleID=1]http://purec.binghua.com/Article/ShowArticle.asp?ArticleID=1

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有