0

我不能说我完全理解编译器是如何工作的。而且,我对他们知之甚少。但是,我一直想知道机器是如何理解我们在文档中编写的代码的。

我知道我们写的东西被翻译成某种东西(如果你也可以给我一些编译的细节,那就太好了),然后在某些操作之后出现二进制代码。

但是电路如何理解和操作 0 和 1。我对计算机体系结构有一定的了解,我知道晶体管是如何工作的,ALU 是如何工作的,以及它是如何实现的。我知道 RAM 是如何工作的(或多或少,所以任何进一步的解释也会很棒)以及 HDD。

但是,当我试图想象编译器是如何产生完全适合有形机器的神奇事物(至少对我而言)时,我迷失了方向。

这让我很惊讶。我们每天都认为是理所当然的,它在概念上是如此的伟大。抽象代码和物理机器之间的合作……太神奇了。

如果您的答案有必要,请不要担心深入机器内部,我觉得它真的很有趣,也许您可​​以启发我。您为描述此过程提供的详细信息越多越好。

4

4 回答 4

2

Stackoverflow 不适合此类问题,但如果您只是阅读这本书,它会准确解释您的问题: http ://www.amazon.com/Code-Language-Computer-Hardware-Software/ dp/0735611319

于 2011-10-14T18:59:15.073 回答
1

它什么都不懂。它只是盲目地运行你扔给它的任何原始代码。它究竟是如何做到的,在过去以及不同架构之间发生了很大变化。

Core2 或其他现代 x86 CPU 的工作原理太复杂了,无法找到关于 SO 的答案,但您可以在 Agner Fogs Microarchitecture手册中阅读所有相关内容(当然不是晶体管级别)。

如果您想更深入,可以在OpenCores.org上查看实际实现

于 2011-10-14T19:02:27.593 回答
0

这个问题应该说明“什么是好的资源来理解机器如何理解我们在文档中编写的代码?” 在 SO 线程中解释的内容太多了。像这样的资源是您的朋友,尽管您可能应该寻求更多的硬件学习资源。

于 2011-10-14T19:12:50.907 回答
0

C、C++、JAVA和类似的语言被称为高级语言。您用这些语言编写的所有代码最终都会被翻译成处理器可以理解的另一种称为汇编的语言。汇编是处理器可以理解的指令集。例如,在 mips 进程中,添加 $3、$2、$1 会转换为 32 位或 64 位二进制字符串,从而在处理器中添加两个寄存器。

总而言之,这就是发生的事情:

高级代码 -> 汇编 -> 二进制字符串 -> cpu

于 2011-10-14T19:00:15.717 回答