通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>操作系统>>DOS专区>>正文 新版上线![旧版]
注:打开慢时请稍等

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

http://www.iyit.net  日期:2006-10-5 12:04:00  来源:  点击:
参加讨论

此处显存的概念说得不是很清楚,有必要进一步解释一下。假设屏幕由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可以当积木来砌
下一篇:DOS下看真彩BMP位图的小程序
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
装扮Windows操作系统中的DOS命令提示 高手谈Windows操作系统优化 高手也谈Windows操作系统的优化
快速安装Windows操作系统独家秘籍 不输密码照样登陆操作系统
最新更新 热点排行 推荐新闻
4DOS的用法
双机互联的工具LapLink的使用
DOS环境变量“全家福”
DOS命令淘金——ECHO命令的使用
终极DOS任务
4DOS的用法
双机互联的工具LapLink的使用
DOS环境变量“全家福”
DOS命令淘金——ECHO命令的使用
终极DOS任务
MSDOS.SYS文件的设置
我的系统恢复盘
DOS使用中的常见问题解答
CMOS密码破解全攻略
DOS复兴运动
DOS系统的安装
DOS教程 DOS命令基础应用
低格、分区、高格的应对--DOS命令应用
恢复误删文件--DOS命令应用实例(一)
一劳永逸--批处理命令(一)
QQ密码被盗怎么办!我教你找回密码
轻易破解Winrar,Winzip密码
备份软件GHOST使用教程
Ghost批处理命令用法详解
如何控制我的电脑只允许登录我自己的Q
QQ2006 Beta3隆重发布 实用功能一一奉
美国微软总部相中重庆15岁网络奇才(图
百度声明称遭受有史以来最大规模黑客攻
被删除系统文件恢复全攻略
使用身份验证来禁止内部用户上网 
快速安装Windows操作系统独家秘籍
30秒清除Windows系统所有垃圾
系统盘符错乱的解决方案
由Windows远程桌面想到的复制粘贴问题
不输密码照样登陆操作系统
Windows下的虚拟主机设置全功略
Windows操作系统完美维护技巧
Ghost备份问题精彩解决方法集锦
菜鸟学电脑之端口基础知识
QQ号码激活的常见问题及案例分析 
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息