写操作系统用的C语言和写应用程序的C语言不是一个
我以前看一本书,名叫 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语言不是一个相关推荐
- c语言最简单的程序编写,C语言简单程序编写.doc
C语言简单程序编写 项目一 C语言简单程序编写 1.1学习目标 本项目达到的目标为: 掌握程序设计的基本思路 掌握C语言的基本结构 了解流程图的符号含义 掌握C语言的关键字 会设计和编写简单的C应用程 ...
- 程序设计基础c语言第二版巫,程序设计基础 (C语言)---2版
图书特色: 1. 实例丰富 本书不仅理论完备,还通过 100 多个实例夯实基础,100 多个课后习题巩固练习,并通过分布在本书第 6.8 和 10 章的 3 个综合应用案例 学生成绩统计程序.学生成绩 ...
- c语言常考的程序,复试C语言常考趣味程序方案.doc
复试C语言常考趣味程序方案 狼追兔子 1 巧夺偶数 2 五猴分桃 3 高次方数 4 借书方案 5 过桥问题 6 数制转换 7 打渔晒网 8 喝酒问题 9 哥德巴赫猜想 10 打印日历 11 抓交通肇事 ...
- c语言小学生加法考试题程序4,c语言编程题与答案4.doc
c语言编程题与答案4 c语言编程题及答案(三) 1. 给小学生出加法考试题 编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程. 程序1 通过输入两个 ...
- c语言复数相加的程序,运用C语言编写复数的四则运算.docx
.. 运用C语言编写复数的四则运算 需求分析 设计一个可进行复数运算的演示程序 实现下列六种基本运算: (1)由于输入的实部和虚部生成一个复数:(2)两个复数求和:(3)两个复数求差:(4)两个复数求 ...
- c语言如何如何入门,程序员C语言新手如何入门?
学习C语言也快一年了.虽然有C语言课,但是老师完全让我们自己看书,在自学的过程中,和周围同学交流中,以及后来在CSDN,BCCN,百度知道看帖回帖中,也看到许多C语言新人常遇到的问题与常犯的错误.为了 ...
- c语言延时30s的程序,用c语言实现后台运行的、每隔30s检查一次的、带有日志功能的断网重新连接程序...
/*这是一个后台运行的.每隔30s检查一次的.带有日志功能的断网重新连接程序. 要想使用它必须要配置好c语言环境,比如安装有mingw的codeblocks 实现的方式就是每隔一段时间就去ping一下 ...
- 刚开始学C 语言 怎么编写小程序,用C 语言 程序怎么样编写一个小程序 工具
在计算机术语缩写通常为 EOF(End Of File),在操作系统决定资料源无更多的资料可读取.资料源通常称为档案或串流. 在 C语言,或更精确地说成 C标准函式库中表示:文件结束符(end of ...
- c语言温度查表程序,温度计C语言程序.doc
温度计C语言程序 /* */ //MCU头文件 #include #include 延时:nop //数据结构定义 #define U8unsigned char 8字节 无符号字符型 2 8 256 ...
- 关于c语言的fib的程序总结,C语言程序设计试卷及答案
C 语言程序设计 笔试试题 试卷说明: 1. 笔试卷面总分100分,取卷面成绩的70%计入总分: 2. 综合成绩为平时成绩(10%)和实验成绩(20%)之和,占总分的30%: 3. 答题时禁止拆开试卷 ...
最新文章
- ASP.NET分页存储过程自定义用户控件
- 睡眠声音识别中的准确率问题(三)--采集的音频测试结果及分析
- 【kafka】Kafka管理与监控
- mysql connector开源协议_Spring Boot 集成 MariaDB Connector/J 连接 MySQL
- full join 和full outer join_28.MySQL中的左(右)外连接 LEFT(RIGHT) [OUTER] JOIN
- PAT (Basic Level) Practice1001 害死人不偿命的(3n+1)猜想
- 【统计学】10个必知必会的统计学问题 (附答案)
- 【C++】黑白矩阵(美团)
- [译] Dweb: Beaker--去中心化的浏览器 (中英)
- mysql中between..and的用法
- 机电一体化综合实训考核装置
- linux activemq 打印日志,Log4j.xml配置日志按级别过滤并将指定级别的日志发送到ActiveMQ...
- 【Mac 教程系列第 10 篇】如何在 Mac 上破解带有密码的 ZIP 压缩文件
- 零基础学c语言如何开始
- C++获取字符串长度
- selenium+python自动抢购源码
- 《Arduino》开发 之 基于 u8g2 库 的 OLED 菜单界面
- 还没35岁的我已经快秃了
- P6786 「SWTR-6」GCDs LCMs(数学推导)
- 基于神经网络算法LSTM模型对股票指数进行预测
热门文章
- NS安装问题收集(3)
- 软件设计原则——依赖倒转原则
- MySQL 数据库linux系统下修改配置文件设置mysql是否大小写敏感实例演示
- Python 技术篇-利用pyqt5库监听剪切板变动,clipboard.dataChanged.connect()剪切板监听
- MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
- 微信小程序中阻止事件冒泡
- 在Vue组件中获取全局的点击事件
- 批量修改编码格式小工具
- 【C language】C语言感悟之const
- pascal--生成Pascal矩阵