新客网
首页 | 新闻 | 系统·网络·服务器·安全 | 工具·办公 | 编程·数据库 | 图象·网页·运营 | 硬件·存储 | 专题教程 | 旧版
 → 当前位置:首页 > 教程 > 操作系统 > DOS > 正文

编程过把瘾:自己动手写操作系统

XKER.COM   2006-10-3 10:00:30  来源:网络收集整理  点击:



此处显存的概念说得不是很清楚,有必要进一步解释一下。假设屏幕由80列× 25行组成,那么第一行就需要160字节,其中一个字节用于表示字符,另外一个字节用于表示字符的属性。如果要在第三行显示某一字符的话,就要跳过显存的第0和1字节(它们是用于显示第1列的),第2和3字节(它们是用于显示第2列的),然后把需要显示字符的ASCⅡ码值入第4字节,把字符的属性写入第5字节。

把程序写至启动扇区下面写一个C程序,把我的操作系统写入软盘第一扇区。程序内容如下:
#include /* unistd.h 需要这个文件 */
#include /* 包含有read和write函数 */
#include
int main()
{
char boot_buf[512];
int floppy_desc, file_desc;
file_desc = open("./boot", O_RDONLY);
read(file_desc, boot_buf, 510);
close(file_desc);
boot_buf[510] = 0x55;
boot_buf[511] = 0xaa;
floppy_desc = open("/dev/fd0", O_RDWR);
lseek(floppy_desc, 0, SEEK_CUR);
write(floppy_desc, boot_buf, 512);
close(floppy_desc);
}


首先,以只读模式打开boot文件,然后在打开文件时把文件描述符复制到 file_desc变量中。从文件中读取510个字符,或者读取直到文件结束。在本例中由于文件很小,所以是读取至文件结束。然后关闭文件。 最后4行代码打开软盘驱动设备(一般来说是/dev/fd0)。使用lseek找到文件开始处,然后从缓冲中向软盘写512个字节。

在read、write、open和lseek的帮助页中,可以看到与函数所有有关的参数及 其使用方法。程序中有两行比较难懂:
boot_buf[510] = 0x55;
boot_buf[511] = 0xaa;

该信息是用于BIOS的,如果它识别出该设备是一个可启动的设备,那么在第 510和511的位置,该值就应该是0x55和0xaa。程序会把文件boot读至名为 boot_buf的缓冲中。它要求改变第510和第511字节,然后把boot_buf写至软盘 之上。如果执行代码,软盘上的前512字节就包含了启动代码。最后,把文件存为write.c。

编译运行
使用下面的命令把文件变为可执行文件:
as86 boot.s -o boot.o
ld86 -d boot.o -o boot
cc write.c -o write

首先将boot.s文件编译成目标文件boot.o,然后将该文件连接成最终的boot文 件。最后C程序编译成可执行的write文件。 插入一个空白软盘,运行以下程序:

./write
重新启动电脑,进行BIOS的界面设置,并且把软盘设为第一个启动的设备。然 后插入软盘,电脑从软盘上启动。 启动完成后,在屏幕上可以看到一个字母A(蓝底白字),启动速度很快,几乎是在瞬间完成。这就意味着系统已经从我们制作的软盘上启动了,并且执行了刚才写入启动扇区的程序。现在,它正处在一个无限循环的状态。所以,如果想进入Linux,必需拿掉软盘,并且重启机器。 至此,这个操作系统就算完成了,虽然它没有实现什么功能,但是它已经可以启动机器了。

下一期我将在这个启动扇区程序里加入一些代码,使它可以做一些比较复杂的事情(比如使用BIOS中断、保护模式切换等等)。自己动手写操作系统(二)
作者:伊梅

上一期,我讲述了如何在软盘的启动扇区写一些代码,然后再从软盘启动的过程。制作好一个启动扇区,在切换到保护模式之前,我们还应该知道如何使用BIOS中断。BIOS中断是一些由BIOS提供的、为了使操作系统的创建更容易的低级程序。在本文中,我们将学习处理BIOS的中断。

为什么要用BIOS

BIOS会把启动扇区拷贝至RAM中,并且执行这些代码。除此之外,BIOS还要做很多其它的事情。当一个操作系统刚开始启动时,系统中并没有显卡驱动、软盘驱动等任何驱动程序。因此,启动扇区中不可能包含任何一个驱动程序,我们要采取其它的途径。这个时候,BIOS就可以帮助我们了。BIOS中包含有各种可以使用的程序,包括检测安装的设备、控制打印机、计算内存大小等用于各种目的的程序。这些程序就是所说的BIOS中断。

本新闻共6页,当前在第2页  1  2  3  4  5  6  

上一篇教程:DOS下看真彩BMP位图的小程序
下一篇教程:DOS可以当积木来砌
收藏本文】 【我要投稿】 【打印本文】 【论坛讨论】 【关闭窗口

相关文章
·解析Windows操作系统两大进程·单机双操作系统杀毒有技巧!
·不输密码照样登陆操作系统·用脚本文件简单修改注册表
·注册表中几个对编程特别有用的地方·注册表数据类型(二)
·注册表数据结构(一)·C++Builder中注册表的操作
·在VC++中访问和修改系统注册表·VB4.0对注册表操作的命令
·编程解决注册表问题所需的函数详解·在VB中调用API操作注册表
·用VB函数轻松访问系统注册表·对注册表进行编程的“捷径”
·用注册表给应用程序加口令·MS-DOS方式下对注册表的编程

学院文章搜索
  
推荐文章
·编程过把瘾:自己动手写操
·数据恢复指南 专题
·硬盘“逻辑锁”解决办法
·DOS使用中的常见问题解答
·DOS下常用的相关网络命令
·Win2000优化技巧篇之:硬件
·惊心8小时:破译Windows运行
·菜鸟必备:超实用低级格式
·硬件有价数据无价 硬盘开盘
·国内数据恢复市场内幕揭秘
阅读排行
·免费代理IP(每日更新)
·DB2 9数据库专题
·关于 Apache 的几种常见应
·站长手册:WIN2003下Web服
·QQ千人好友浮出水面 会员抢
·DOS下对系统重新进行分区
·Fdisk分区详解
·Firefox出现新高危0Day漏洞
·dos如何进行系统配置
·dos慎用命令
专题教程
·数据恢复指南 专题
·Web服务器专题
·DB2 9数据库专题
·ghost教程 专题
·局域网技术专题
·虚拟机专题
·CDN加速技术专题
·注册表教程专题
·电脑技巧 专题
·Linux与虚拟化技术
最新文章
·Firefox出现新高危0Day漏洞
·QQ千人好友浮出水面 会员抢
·DOS下对系统重新进行分区
·Fdisk分区详解
·DOS常用命令
·dos如何进行系统配置
·dos慎用命令
·Ver、Vol、Ctty命令使用说
·Tree、Unformat、Vsafe命令
·Setver、Share、Subst命令
设为首页 - 加入收藏 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyright © 2003 - 2006 XKER Inc. All Rights Reserved
新客网 版权所有