Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从头开始编程_C++_C_Computer Science - Fatal编程技术网

C++ 从头开始编程

C++ 从头开始编程,c++,c,computer-science,C++,C,Computer Science,我想知道的是,在没有任何操作系统的情况下从头开始编程 我知道Windows和Mac,几乎所有的DOS都是用C,C++ Pascal etc.编写的,所以我想我应该知道其中的一种语言,但是对于这个,我需要一个程序,我可以编写代码,也可以编译它,但是没有操作系统和程序,这怎么做呢?他们怎么能做到呢 但这还不够远,C是怎么写的?在什么地方?所以当我指的是从头开始,我指的是从基础开始构建一切。也许现在从0,1,0,1开始,我想这就是确切的起点。但是我该怎么做呢?我应该拥有什么?我应该从哪里开始 谢谢你的

我想知道的是,在没有任何操作系统的情况下从头开始编程

我知道Windows和Mac,几乎所有的DOS都是用C,C++ Pascal etc.编写的,所以我想我应该知道其中的一种语言,但是对于这个,我需要一个程序,我可以编写代码,也可以编译它,但是没有操作系统和程序,这怎么做呢?他们怎么能做到呢

但这还不够远,C是怎么写的?在什么地方?所以当我指的是从头开始,我指的是从基础开始构建一切。也许现在从
0,1,0,1
开始,我想这就是确切的起点。但是我该怎么做呢?我应该拥有什么?我应该从哪里开始


谢谢你的回答

你所说的过去被称为“监控”程序。您可能会在osdev.org上获得一些有趣的信息,并查看colorforth

[事后思考]谷歌搜索里克·霍恩西在comp.lang.forth上的闲话

[稍后再思考]要真正了解基本情况,需要一个插入式电路板、一些旧的EPROM、一个5VDC电源和一个25VDC电源(24应该可以工作,这更常见)。在地址线和数据线上使用上拉或下拉电阻器,并使用开关为地址线和数据线提供接地或电源。使用开关逐步遍历地址,并在数据总线上以1和0的形式输入数据,使用来自25V的脉冲对每个地址进行编程。我从来没有手动完成过,但我曾经写过一个程序(http://jc.unternet.net/hacks/?1994-01-01-01)从Centronics端口执行此操作,并以这种方式烧录了多个程序。这要追溯到当年,英特尔将向您免费提供其所有处理器和辅助芯片的书籍,包括详细的指令集和时序


完成后,将处理器连接到EPROM,给它一些果汁,然后观察发生了什么。在你开始尝试集成键盘和显示器之前,可能先选通一些LED或其他东西。

你所描述的问题通常被称为(以及它与显示器的关系)。这个特定的链接是针对编译器的,但在许多领域——硬件、操作系统等,都存在相同的问题,并且有类似的解决方案。

大多数C编译器都会发出不适合在操作系统上下文中运行的代码(例如,请参阅
memtest86+
codebase),但这将严重限制这些编译器提供的功能集。(特别是,你不会得到像malloc这样的东西。

从基础开始是
1
0
。您需要知道处理器支持哪些指令,存在哪些寄存器和缓存等。然后用机器代码编写一个小的汇编编译器就很方便了(对于可读的
1
0
)。如果你有,你可以为一个简单的高级语言编写第一个真正的编译器,以此类推(每个编译器都是用一种低级的“语言”构建的)。但是,您应该知道,创建一个简单的操作系统可能需要数年的规划,甚至需要更多的时间来开发、调试等(在您想到在屏幕上看到有用的东西之前)。而且这个操作系统除了你的处理器外,不能在任何其他处理器上运行。然后,您需要为每一位硬件提供驱动程序等。还有很多步骤要走。从
1
0
级别开始并不是很有意义,因为你很长时间都看不到任何东西。简单地说,不要这样做。

好吧,你所描述的一切都不存在于现代计算机中。如今,在您和硬件之间,您总是会遇到操作系统层、引导,甚至可能是虚拟化


如果你真的想了解编程的深层秘密以及应用程序是如何在硬件上运行的,我建议你参加一门操作系统课程或阅读它们是如何工作的。例如,Andy Tanenbaum的《操作系统设计与实现》一书可能就是一张门票。

您可以在没有操作系统(OS)的情况下编程,但操作系统为您完成了繁重的工作。例如,C语言(你想知道)的神奇之处不是语言本身,而是编译器。它基本上是这样做的:

C源代码->非优化 中间代码->优化 中间代码->机器代码

现在,机器代码进入操作系统,操作系统本身使用自己的代码将机器代码翻译成二进制形式,这样硬件本身就可以理解您想要做什么


因此,基本上在编写无操作系统运行的程序之前,您需要为您的计算机创建自己的编译器和内核来运行它。

如果您想深入了解硬件,请尝试查看PIC和AVR等微控制器。我最近有机会使用其中一些平台,在这些平台上,您编写的代码(用C或汇编语言编写)实际上是在裸机上运行的

当然,这只意味着您必须自己实现一些核心操作系统服务,比如处理输入的中断例程。大部分代码都可以作为示例代码使用,但仍然小到足以阅读和理解整个系统


至于计算机考古学,试着去最近的大学学习数字电路、计算机架构和编译技术的基础课程。这满足了我的好奇心,也满足了我用原始二进制操作码编写程序的需要:-)

在大多数现代PC风格的计算机上,你不能非常方便地完成你想要的事情,但是有许多便宜的(低于100美元,甚至低于50美元)工具包可用于编程更小的单片微型计算机。一个典型的微处理器将有几十个引脚,在程序控制下可以驱动高引脚和低引脚,以及一个处理器、一些RAM(通常为256字节-8K左右)和一些代码闪存(通常为8K-128K左右)。开发工具包通常具有