为什么代码在机器上运行?

时间:2011-10-14 18:55:07

标签: compiler-construction computer-architecture

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

我知道我们编写的内容被翻译成某些东西(如果你也可以给我一些编译的细节,那将是很棒的)然后在某些操作后出现二进制代码。

但是电路如何理解并以0和1运行。我在计算机架构上有一些形式,我知道晶体管如何工作以及ALU如何工作以及如何实现。我知道RAM是如何工作的(或多或少,因此任何进一步的解释也会很棒)以及硬盘。

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

令我惊讶。我们每天都认为这是理所当然的,它在概念上非常棒。 抽象代码与物理机器之间的合作 ......太棒了。

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

它什么都不懂。它只是盲目地运行你抛出的任何原始代码。在过去和不同架构之间,它究竟发生了多大的变化。

Core2或其他现代x86 CPU的工作原理是如此复杂,以及SO的答案,但您可以在Agner Fogs Microarchitecture手册中阅读所有内容(而不是关于晶体管级别)。 / p>

如果您想深入了解,可以查看OpenCores.org

上的实际实施情况

答案 2 :(得分:0)

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

总结这是发生的事情:

高级代码 - > assambly - >二进制字符串 - > CPU

答案 3 :(得分:0)

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

相关问题