中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 有没有可能用C语言编写DOS的内核?
作者:
标题: 有没有可能用C语言编写DOS的内核? 上一主题 | 下一主题
070
高级用户

苏醒的沉睡者


积分 659
发帖 217
注册 2003-2-15
来自 福建
状态 离线
『楼 主』:  有没有可能用C语言编写DOS的内核? [已使用 LLM 解释]

unix和linux系统都是最开始的引导程序用汇编编写,然后其他都用C语言来写的。。
这样工作量较纯汇编会小很多啊

毕竟汇编难度较大,而且容易出错。。。精通C语言的肯定比汇编的多,c语言虽然体积大一些,不过应该不是大问题吧。
LLM 解释

可以用 C 语言编写 DOS 内核的核心功能,仅需少量汇编代码处理硬件初始化、中断向量设置等与硬件直接交互的底层操作。这一结论的技术前提与历史实践如下:

1. 核心原理:C 与汇编的分工边界

DOS 内核的功能可分为两类:

  • 必须用汇编实现的部分:直接操作 CPU 寄存器(如 CS/IP 跳转、CR0 控制保护模式)、硬件端口读写(如键盘控制器 0x60/0x64 端口)、中断/异常处理的入口(需符合 x86 中断帧结构)、引导加载(需满足 BIOS 引导协议的 512 字节扇区限制)。
  • 可完全用 C 实现的部分:文件系统(如 FAT12/16 解析)、命令解释器(COMMAND.COM 核心逻辑)、系统调用(INT 21h)的服务例程(除入口外)、内存管理(如 UMB/EMS/XMS 接口封装)、设备驱动的上层逻辑(如磁盘读写的逻辑层)。

这种分工与 Unix/Linux 类似——仅用汇编处理硬件抽象层以下的最小必要逻辑,上层全部用 C 实现以降低开发复杂度。

2. 历史实践:FreeDOS 内核的验证

Post #4 提到的 FreeDOS 内核(如 kernel.sys)是典型案例:

  • FreeDOS 内核的汇编代码仅占约 5%(集中在 boot/asm/ 目录),负责引导、中断向量初始化、硬件端口封装;
  • 核心功能(如 INT 21h 服务、FAT 文件系统、内存管理)均由 C 编写(src/fs/src/syscall/ 目录),通过 C 语言的 inline asm 或汇编封装的函数(如 inportb()/outportb())与硬件交互。

FreeDOS 内核的体积(约 100KB)虽略大于 MS-DOS 6.22 内核(约 60KB),但这是功能更完整(如支持长文件名、大硬盘)的结果,并非 C 语言本身的“体积膨胀”——通过编译器优化(如 gcc -Os 或 Borland C 的 -O2),C 代码的体积可接近汇编水平。

3. 当年的技术限制与误解

  • 为何当年有人认为“DOS 内核必须用汇编”?
    早期 DOS(如 MS-DOS 1.0)因 8086 CPU 性能有限、编译器优化能力弱(如早期 Microsoft C 生成的代码效率低),确实用了大量汇编。但到 1990 年代,Borland C、Watcom C 等编译器已能生成高效的 x86 代码,C 编写内核的可行性已被验证——只是 MS-DOS 作为闭源软件,其内部实现细节未公开,导致部分开发者对“C 能否写 DOS 内核”存在误解。
  • C 语言的“硬件访问能力”是否受限?
    不受限。通过编译器提供的扩展语法(如 Borland C 的 #pragma aux、GCC 的 __asm__),C 代码可直接嵌入汇编指令,或调用汇编实现的硬件操作函数(如 _outp()/_inp() 标准库函数),完全具备访问硬件的能力。

结论

用 C 语言编写 DOS 内核是完全可行且实践验证过的方案,仅需少量汇编处理底层硬件交互。FreeDOS 的成功证明:这种方式既能降低开发难度(利用 C 语言的结构化编程),又能保证内核的功能性与兼容性。





好久没碰Dos,手都生了,赶紧回来练练.嘿嘿
2010-4-27 11:17
查看资料  发送邮件  发短消息  网志  OICQ (181315400)  编辑帖子  回复  引用回复
AlexZhang
系统支持





积分 995
发帖 427
注册 2007-2-8
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

已经几乎没人愿意搞dos了……


2010-5-5 20:57
查看资料  访问主页  发短消息  网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

但是我等很想了解一下!

Last edited by 523066680 on 2010-5-10 at 20:05 ]




综合型编程论坛

我的作品索引
2010-5-10 20:03
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (523066680)  编辑帖子  回复  引用回复
brglng
银牌会员

永遠的DOS~~~



积分 1200
发帖 466
注册 2005-2-1
来自 上海
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

freedos就是用C写的,可以在官网下载到源代码




32位才是DOS未来的希望
个人网志:http://sololand.moe
2010-5-13 18:56
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: