知识大全 自己动手写操作系统(一)
Posted 文件
篇首语:今日长缨在手,何时缚住苍龙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 自己动手写操作系统(一)相关的知识,希望对你有一定的参考价值。
自由软件社区是一个充满自由和梦想的地方 在 余年的时间里它创造了一个又一个奇迹 然而 这些奇迹的创造者不只是Stallman 也不只是Linus Torvalds 而是活跃在世界各地的不计其数的开发人员 在使用各种功能强大的自由软件时 我总会对其开发者充满崇敬之情 期盼有朝一日自己也能成为他们中的一员 很多对自由社区充满向往之情的人 虽然也想努力融身于其中 但又不知该怎么做 那么 就请与我们一起从编写一个简单的操作系统开始吧! 我们要做的事情 有人可能担心自己既没有学过计算机原理 也没有学过操作系统原理 更不懂汇编语言 对C语言也一知半解 能写操作系统吗?答案是没问题 我将带大家一步一步完成自己的操作系统 当然如果学一学上述内容再好不过 首先要明确处理器(也就是CPU)控制着计算机 对PC而言 启动的时候 CPU都处在实模式状态 相当于只是一个Intel 处理器 也就是说 即使你现在拥有一个奔腾处理器 它的功能也只能是 级别 从这一点上来讲 可以使用一些软件把处理器转换到著名的保护模式 只有这样 我们才可以充分利用处理器的强大功能 编写操作系统开始是对BIOS控制 取出存储在ROM里的程序 BIOS是用来执行POST(Power On Self Test 自检)的 自检是检查计算机的完整性(比如外设是否工作正常 键盘是否连接等) 这一切完成以后 你就会听到PC喇叭发出一声清脆的响声 如果一切正常 BIOS就会选择一个启动设备 并且读取该设备的第一扇区(即启动扇区) 然后控制过程就会转移到指定位置 启动设备可能是一个软盘 光盘 硬盘 或者其它所选择的设备 在此我们把软盘作为启动设备 如果我们已经在软盘的启动扇区里写了一些代码 这时它就被执行 因此 我们的目的很明确 就是往软盘的启动扇区写一些程序 首先使用 汇编来写一个小程序 然后将其拷贝至软盘的启动扇区 为了实现拷贝 要写一个C程序 最后 使用软盘启动计算机 需要的工具 ● as 这是一个汇编程序 它负责把写的代码转换成目标文件 ● ld 这是一个连接器 as 产生的目标代码由它来转换成真正的机器语言 机器语言是 能够解读的形式 ● GCC 著名的C编程器 因为我们需要写一个C程序将自己的OS转移到软盘中 ● 一张空软盘 它用于存储编写的操作系统 也是启动设备 ● 一台装有Linux的计算机 这台机器可以很旧 都可以 在大部分标准Linux发行版中都会带有as 和ld 在我使用的Red Hat 中就包含有这两个工具 并且在默认的情况下 它已经安装在机器里 如果使用的Linux没有这两个工具 可以从网上下载(~mayday/) 这两个工具都包含在一个名为bin 的软件包中 此外 有关的文档也可以在网上获得(/docs/ldp/howto/Assembly HOWTO/l) 开始工作 使用一个你喜欢的编辑器输入以下内容 entry start start: mov ax # xb mov es ax seg es mov [ ] # x seg es mov [ ] # x f loop : jmp loop 这是as 可以读懂的一段汇编程序 第一个句子指明了程序的入口点 声明整个过程从start处开始 第二行指明了start的位置 说明整个程序要从start处开始执行 xb 是显存的开始地址 #表明其后是一个立即数 执行语句 mov ax #oxb ax寄存器的值就变为 xb 这就是显存的地址 下面再将这个值移至es寄存器 es是附加段寄存器 请记住 有一个分段的体系结构 它的各段寄存器为代码段 数据段 堆栈段和附加段 对应的寄存器名称分别为cs ds ss和es 事实上 我们把显存地址送入了附加段 因此 任何送入附加段的东西都会被送到显存中 要在屏幕上显示字符 就需要向显存中写两个字节 前一个是所要显示字符的ASCⅡ值 第二个字节表示该字符的属性 属性包括字符的前景色 背景色及是否闪烁等等 seg es指明下一个将要执行的指令是指向es段的 所以 我们把值 x (在ASCⅡ中表示的字符是A)送到显存的第一个字节中 接下来要把字符的属性送到下一个字节当中 在此输入的是 x f 该属性指的是在蓝色背景下显示白色的字符 因此 如果执行这个程序 就可以在屏幕上得到显示在蓝底上的一个白色的A 接着是一个循环 因为在执行完显示字符的任务后 要么让程序结束 要么使用一个循环使其永远运行下去 把该文件命名为boot s 然后存盘 此处显存的概念说得不是很清楚 有必要进一步解释一下 假设屏幕由 列× 行组成 那么第一行就需要 字节 其中一个字节用于表示字符 另外一个字节用于表示字符的属性 如果要在第三行显示某一字符的话 就要跳过显存的第 和 字节(它们是用于显示第 列的) 第 和 字节(它们是用于显示第 列的) 然后把需要显示字符的ASCⅡ码值入第 字节 把字符的属性写入第 字节 把程序写至启动扇区 下面写一个C程序 把我的操作系统写入软盘第一扇区 程序内容如下 #include <sys/types h> /* unistd h 需要这个文件 */ #include /* 包含有read和write函数 */ #include相关参考
上一期我讲述了如何在软盘的启动扇区写一些代码然后再从软盘启动的过程制作好一个启动扇区在切换到保护模式之前我们还应该知道如何使用BIOS中断BIOS中断是一些由BIOS提供的为了使操作系统的创建
知识大全 本人的动手能力比较差,做事情有种手忙脚乱的感觉,现在想去学小车驾照,但又害怕自己操作能力不行,
本人的动手能力比较差,做事情有种手忙脚乱的感觉,现在想去学小车驾照,但又害怕自己操作能力不行,跟你的动手能力无关,是你自己没有信心而已。做事之前都暗示自己“这个我能做好么?我能不出错么?”所以,你啥都
ASP讲座之十:自己动手编写组件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一组件编写速成—
ASP教程:自己写的数据库操作类 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 程序代码lish
阑尾炎是一种常见病,多发病,弄不好容易有生命危险。所以,得了急性阑尾炎要及时治疗。 1961年冬天,前苏联医生列奥尼德?罗戈佐夫随
天花板用的时间长了难免会显得破旧,有时还会发现墙面起泡、开裂,甚至整片剥落。这时候,我们就要重新粉刷它。如果想感受一下粉刷的乐趣,就自己动手吧,一定要记得先用刷子刷天花板、灯具边缘,再用滚筒作大面积的
宜家效应是指劳动会增加人们对劳动成果的感情,当人们自己动手制作东西时,他们都会觉得自己的创作特别有价值。根据上述定义,下
宜家效应是指劳动会增加人们对劳动成果的感情,当人们自己动手制作东西时,他们都会觉得自己的创作特别有价值。根据上述定义,下列最能体现宜家效应的是_____A、让人们亲手做折纸,然后连同他人做的折纸放在一
银屑病是一种难以治愈的皮肤顽疾,但它并不是什么难治之症,这种皮肤病还是可以完全治愈的。其实在生活中,银屑病就可以自己经常动手做一些菜品或食物就能治疗银屑病。下面就为大家简单介绍几种治疗银屑病的食物:1
银屑病是一种难以治愈的皮肤顽疾,但它并不是什么难治之症,这种皮肤病还是可以完全治愈的。其实在生活中,银屑病就可以自己经常动手做一些菜品或食物就能治疗银屑病。下面就为大家简单介绍几种治疗银屑病的食物:1
文明礼仪伴我行的作文(不要抄网的).急!自己怎么不去写自己动手,丰衣足食回忆校园生活你最难忘的一件事90字急!你好,很高兴为你解答。偶然联络到当年同桌,嘘寒之后,忽地想到那些时日的点点滴滴,不禁心头一