我以前看一本书,名叫 30天自制操作系统;大概翻了一下,感觉也不是太难;因为比如,它有一整章在讲,C语言指针、C语言画一个矩形;你要是熟悉C语言的话,指针肯定理解;在没有窗口的情况下,用Turbo C 2.0画一个矩形也不是什么难事;
    后来有一天准备照书实践一下,仔细看了一下,原来问题不是一般的多;首先一个,不能用写应用程序的C语言去写一个操作系统;因为C本身很多功能依赖于操作系统,你去写一个操作系统的时候这个时候还没有操作系统,像C最常用的printf函数这个时候是不能用的;如果硬要运行此类C功能,会导致保护性错误,CPU罢工。
    原作者的意思是,不管你用C或C++来写一个操作系统,如果你不能理解C或C++是如何转换为汇编语言的,你是无法写出一个操作系统的;他肯定是对的。
    原来原作者是自己从gcc改装了一个C编译器来,然后还附带了一堆工具;才能把代码构建为可运行的操作系统代码。
    下面按原书附带的工具,来构建它的第一个C程序;他提供的编译器名为cc1.exe;就是把他提供的东西拷贝到一个单独的目录执行了看;
    
    一共有6个步骤把一个C语言程序构建为操作系统可用的代码;
   1 使用cc1.exe从bootpack.c生成bootpack.gas;
   2 使用gas2nask.exe从bootpack.gas生成bootpack.nas;
   3 使用nask.exe从bootpack.nas生成bootpack.obj;
   4 使用obi2bim.exe从bootpack.obj生成bootpack.bim;
   5 使用bim2hrb.exe从bootpack.bim生成bootpack.hrb;
    到此做成了机器语言;那么书中的汇编程序是nasm语法的;
   然后使用copy命令将asmhead.bin与bootpack.hrb结合起来,做成haribote.sys;

步骤1

cc1.exe没有帮助的,但它应该是gcc的语法;操作了几次,把.gas做出来;.gas就是汇编代码了;

步骤2,生成.nas;

步骤3,生成.obj;

拷过来它的一个工具,执行一步操作;到此没有错;

步骤4,生成.bim;

一直出错;此步要链接一些C库;是在原书附带的光盘;

把这些C头文件和库拷到操作的临时目录;还是不能构建出.bim文件;它还有一个规则文件.rul;

到此就不能执行;必须按作者提供的光盘内容的目录结构,以及makefile文件,才能构建代码;自己拷工具和代码文件到单独目录构建的话需要自己写makefile和规则文件;下回再搞;

写操作系统用的C语言和写应用程序的C语言不是一个相关推荐

  1. c语言最简单的程序编写,C语言简单程序编写.doc

    C语言简单程序编写 项目一 C语言简单程序编写 1.1学习目标 本项目达到的目标为: 掌握程序设计的基本思路 掌握C语言的基本结构 了解流程图的符号含义 掌握C语言的关键字 会设计和编写简单的C应用程 ...

  2. 程序设计基础c语言第二版巫,程序设计基础 (C语言)---2版

    图书特色: 1. 实例丰富 本书不仅理论完备,还通过 100 多个实例夯实基础,100 多个课后习题巩固练习,并通过分布在本书第 6.8 和 10 章的 3 个综合应用案例 学生成绩统计程序.学生成绩 ...

  3. c语言常考的程序,复试C语言常考趣味程序方案.doc

    复试C语言常考趣味程序方案 狼追兔子 1 巧夺偶数 2 五猴分桃 3 高次方数 4 借书方案 5 过桥问题 6 数制转换 7 打渔晒网 8 喝酒问题 9 哥德巴赫猜想 10 打印日历 11 抓交通肇事 ...

  4. c语言小学生加法考试题程序4,c语言编程题与答案4.doc

    c语言编程题与答案4 c语言编程题及答案(三) 1. 给小学生出加法考试题 编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程. 程序1 通过输入两个 ...

  5. c语言复数相加的程序,运用C语言编写复数的四则运算.docx

    .. 运用C语言编写复数的四则运算 需求分析 设计一个可进行复数运算的演示程序 实现下列六种基本运算: (1)由于输入的实部和虚部生成一个复数:(2)两个复数求和:(3)两个复数求差:(4)两个复数求 ...

  6. c语言如何如何入门,程序员C语言新手如何入门?

    学习C语言也快一年了.虽然有C语言课,但是老师完全让我们自己看书,在自学的过程中,和周围同学交流中,以及后来在CSDN,BCCN,百度知道看帖回帖中,也看到许多C语言新人常遇到的问题与常犯的错误.为了 ...

  7. c语言延时30s的程序,用c语言实现后台运行的、每隔30s检查一次的、带有日志功能的断网重新连接程序...

    /*这是一个后台运行的.每隔30s检查一次的.带有日志功能的断网重新连接程序. 要想使用它必须要配置好c语言环境,比如安装有mingw的codeblocks 实现的方式就是每隔一段时间就去ping一下 ...

  8. 刚开始学C 语言 怎么编写小程序,用C 语言 程序怎么样编写一个小程序 工具

    在计算机术语缩写通常为 EOF(End Of File),在操作系统决定资料源无更多的资料可读取.资料源通常称为档案或串流. 在 C语言,或更精确地说成 C标准函式库中表示:文件结束符(end of ...

  9. c语言温度查表程序,温度计C语言程序.doc

    温度计C语言程序 /* */ //MCU头文件 #include #include 延时:nop //数据结构定义 #define U8unsigned char 8字节 无符号字符型 2 8 256 ...

  10. 关于c语言的fib的程序总结,C语言程序设计试卷及答案

    C 语言程序设计 笔试试题 试卷说明: 1. 笔试卷面总分100分,取卷面成绩的70%计入总分: 2. 综合成绩为平时成绩(10%)和实验成绩(20%)之和,占总分的30%: 3. 答题时禁止拆开试卷 ...

最新文章

  1. ASP.NET分页存储过程自定义用户控件
  2. 睡眠声音识别中的准确率问题(三)--采集的音频测试结果及分析
  3. 【kafka】Kafka管理与监控
  4. mysql connector开源协议_Spring Boot 集成 MariaDB Connector/J 连接 MySQL
  5. full join 和full outer join_28.MySQL中的左(右)外连接 LEFT(RIGHT) [OUTER] JOIN
  6. PAT (Basic Level) Practice1001 害死人不偿命的(3n+1)猜想
  7. 【统计学】10个必知必会的统计学问题 (附答案)
  8. 【C++】黑白矩阵(美团)
  9. [译] Dweb: Beaker--去中心化的浏览器 (中英)
  10. mysql中between..and的用法
  11. 机电一体化综合实训考核装置
  12. linux activemq 打印日志,Log4j.xml配置日志按级别过滤并将指定级别的日志发送到ActiveMQ...
  13. 【Mac 教程系列第 10 篇】如何在 Mac 上破解带有密码的 ZIP 压缩文件
  14. 零基础学c语言如何开始
  15. C++获取字符串长度
  16. selenium+python自动抢购源码
  17. 《Arduino》开发 之 基于 u8g2 库 的 OLED 菜单界面
  18. 还没35岁的我已经快秃了
  19. P6786 「SWTR-6」GCDs LCMs(数学推导)
  20. 基于神经网络算法LSTM模型对股票指数进行预测

热门文章

  1. NS安装问题收集(3)
  2. 软件设计原则——依赖倒转原则
  3. MySQL 数据库linux系统下修改配置文件设置mysql是否大小写敏感实例演示
  4. Python 技术篇-利用pyqt5库监听剪切板变动,clipboard.dataChanged.connect()剪切板监听
  5. MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
  6. 微信小程序中阻止事件冒泡
  7. 在Vue组件中获取全局的点击事件
  8. 批量修改编码格式小工具
  9. 【C language】C语言感悟之const
  10. pascal--生成Pascal矩阵