下载此文档

自己动手写操作系统.doc


文档分类:通信/电子 | 页数:约17页 举报非法文档有奖
1/17
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/17 下载此文档
文档列表 文档介绍
自己动手写操作系统自由软件社区是一个充满自由和梦想的地方,在 10 余年的时间里它创造了一个又一个奇迹。然而, 这些奇迹的创造者不只是 Stallman , 也不只是 Linus Torvalds ,而是活跃在世界各地的不计其数的开发人员。在使用各种功能强大的自由软件时,我总会对其开发者充满崇敬之情, 期盼有朝一日自己也能成为他们中的一员。很多对自由社区充满向往之情的人, 虽然也想努力融身于其中, 但又不知该怎么做。那么, 就请与我们一起从编写一个简单的操作系统开始吧! 我们要做的事情有人可能担心自己既没有学过计算机原理,也没有学过操作系统原理, 更不懂汇编语言,对C 语言也一知半解, 能写操作系统吗?答案是没问题。我将带大家一步一步完成自己的操作系统。当然如果学一学上述内容再好不过。首先要明确处理器( 也就是 CPU) 控制着计算机。对 PC 而言,启动的时候, CPU 都处在实模式状态,相当于只是一个 Intel 8086 处理器。也就是说, 即使你现在拥有一个奔腾处理器, 它的功能也只能是 808 6 级别。从这一点上来讲, 可以使用一些软件把处理器转换到著名的保护模式。只有这样,我们才可以充分利用处理器的强大功能。编写操作系统开始是对 BIOS 控制,取出存储在 ROM 里的程序。 BIO S 是用来执行 POST(Power On Self Test ,自检) 的。自检是检查计算机的完整性( 比如外设是否工作正常、键盘是否连接等)。这一切完成以后, 你就会听到 PC 喇叭发出一声清脆的响声。如果一切正常, BIO S 就会选择一个启动设备,并且读取该设备的第一扇区( 即启动扇区), 然后控制过程就会转移到指定位置。启动设备可能是一个软盘、光盘、硬盘, 或者其它所选择的设备。在此我们把软盘作为启动设备。如果我们已经在软盘的启动扇区里写了一些代码, 这时它就被执行。因此, 我们的目的很明确,就是往软盘的启动扇区写一些程序。首先使用 8086 汇编来写一个小程序,然后将其拷贝至软盘的启动扇区。为了实现拷贝,要写一个 C 程序。最后,使用软盘启动计算机。需要的工具● as86 :这是一个汇编程序,它负责把写的代码转换成目标文件。● ld86 :这是一个连接器, as86 产生的目标代码由它来转换成真正的机器语言。机器语言是 8086 能够解读的形式。● GCC :著名的 C 编程器。因为我们需要写一个 C 程序将自己的 OS 转移到软盘中。●一张空软盘:它用于存储编写的操作系统,也是启动设备。●一台装有 Linux 的计算机: 这台机器可以很旧, 386 、 486 都可以。在大部分标准 Linu x 发行版中都会带有 as8 6和 ld86 。在我使用的 Red Hat 中就包含有这两个工具,并且在默认的情况下,它已经安装在机器里。如果使用的 Linux 没有这两个工具,可以从网上下载(/~mayday/) ,这两个工具都包含在一个名为 bin86 的软件包中。此外,有关的文档也可以在网上获得(s/ldp/howto/Assembly-HOWTO/) 。开始工作使用一个你喜欢的编辑器输入以下内容: entry start start: mov ax,#0xb800 mov es,ax seg es mov [0],#0x41 seg es mov [1],#0x1f loop1: jmp loop1 这是 as86 可以读懂的一段汇编程序。第一个句子指明了程序的入口点,声明整个过程从 start 处开始。第二行指明了 start 的位置,说明整个程序要从 start 处开始执行。 0xb800 是显存的开始地址。#表明其后是一个立即数。执行语句: mov ax,#oxb800 ax 寄存器的值就变为 0xb800 ,这就是显存的地址。下面再将这个值移至 es 寄存器, es 是附加段寄存器。请记住 8086 有一个分段的体系结构。它的各段寄存器为代码段、数据段、堆栈段和附加段, 对应的寄存器名称分别为 cs、 ds、 ss和 es。事实上, 我们把显存地址送入了附加段,因此,任何送入附加段的东西都会被送到显存中。要在屏幕上显示字符, 就需要向显存中写两个字节。前一个是所要显示字符的 ASC Ⅱ值, 第二个字节表示该字符的属性。属性包括字符的前景色、背景色及是否闪烁等等。 seg es 指明下一个将要执行的指令是指向 es 段的。所以, 我们把值 0x41( 在 ASC Ⅱ中表示的字符是 A) 送到显存的第一个字节中。接下来要把字符的属性送到下一个字节当中。在此输入的是 0x1f ,该属性指的是在蓝色背景下显示白色的字符。因此, 如果执行这个程序, 就可以在屏幕上得到显示在蓝底上的一个白色的 A 。

自己动手写操作系统 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数17
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xxj16588
  • 文件大小0 KB
  • 时间2016-07-05
最近更新