机器代码如何与处理器通信?

时间:2012-03-17 20:59:46

标签: interpreter processor machine-code microcoding

我们以Python为例。如果我没有弄错,当你在其中编程时,计算机首先将代码“翻译”为C.然后再从C到汇编。汇编是用机器代码编写的。 (这只是一个模糊的想法,我有这个,所以纠正我,如果我错了)但是什么是机器代码写的,或者更确切地说,处理器如何处理其指令,它如何“找出”该怎么办?

4 个答案:

答案 0 :(得分:8)

  

如果我没有记错,当你编程时,计算机首先将代码“翻译”为C.

不,不。除了它是用于系统编程的最广泛的编程语言之外,C并不特别。

Python解释器将Python代码转换为由虚拟机执行的所谓P-Code。该虚拟机是读取P-Code的实际解释器,并且P-Code的每个blip使得解释器执行预定义的代码路径。这与本机二进制机器代码控制CPU的方式不同。更现代的方法是将P代码转换为本机代码。

CPython解释器本身是用C编写的,并且已经编译成本机二进制文件。基本上,本机二进制文件只是一长串数字(操作码),其中每个数字指定一定的操作。一些操作码告诉机器,其后面的数字的定义数量不是操作码而是参数。

CPU本身包含一个所谓的指令解码器,它按编号读取本机二进制数,并且对于读取的每个操作码,它为实现此特定操作码的CPU电路供电。有操作码,用于寻址存储器,将数据从存储器加载到寄存器中的操作码等等。

  

处理器如何处理其指令,它如何“找出”该怎么做?

对于每个操作码,它只是一个二进制模式,CPU上有一个自己的电路。如果操作码的模式与启用此操作码的“开关”匹配,则此电路将对其进行处理。

这是一本关于它的维基书: http://en.wikibooks.org/wiki/Microprocessor_Design

几年前,一些人用简单的功能逻辑和存储器IC构建了一台完整的工作计算机,即没有涉及微控制器或类似设备。名为"Big Mess o' Wires"的整个项目或多或少都是从头开始构建的CPU。唯一一个nerdier会用单个晶体管构建那个东西(实际上并没有那么多的困难)。他还提供了一个模拟器,它允许您查看CPU如何在内部工作,解码每条指令并执行它:Big Mess o' Wires Simulator

答案 1 :(得分:2)

机器代码不“与处理器通信”。

相反,处理器“知道如何评估”机器代码。在[广泛] Von Neumann架构中,这个机器代码(程序)可以被认为是一个可索引的数组,其中每个单元包含一个机器代码指令(或数据,但我们现在忽略它)。

CPU“查看”当前指令(通常由PC或Program Counter识别)并决定要做什么(这可以直接用晶体管/“裸机”完成,或者它可以被翻译甚至更低级别的代码):这被称为fetch-decode-execute周期。

执行指令时会发生副作用,例如设置控制标志,将值放入寄存器或跳转到程序中的其他索引(更改PC)等。请参阅此simple overview of a CPU,其中包含上述内容。

每条指令的评估 - 正如遇到的那样 - 以及导致传统处理器运行的副作用的相互作用。

(当然,现代CPU 非常复杂并做了很多巧妙的事情!)

答案 2 :(得分:1)

电力。电路,存储器和逻辑门。

另外,我认为Python通常被解释,而不是通过C→汇编→机器代码编译。

答案 3 :(得分:1)

这叫做microcode。它是CPU中的代码,它读取机器代码指令并将其转换为低级数据流。

例如,当CPU遇到add指令时,微代码描述了如何获取这两个值,将它们提供给ALU进行计算,以及将结果放在何处。