Assembly 当一段代码被编译并运行时,计算机内部实际发生了什么

Assembly 当一段代码被编译并运行时,计算机内部实际发生了什么,assembly,compilation,operating-system,system-calls,cpu-architecture,Assembly,Compilation,Operating System,System Calls,Cpu Architecture,我很想知道一段代码是如何转换成计算机可以理解的东西的。在许多类似的问题中,一个常见的答案是,从人类可读代码到机器级指令的链或多或少遵循编译链: high-level code --> assembly code --> machine binary code 尽管这个答案的频率很高,但对我来说,电脑里到底发生了什么仍然有点神秘。在某种程度上,我确实理解计算机和CPU背后的基本电子学,但这个特殊的案例对我来说仍然有点神秘 例如,假设我在中编写了经典的“Hello,world!”示例

我很想知道一段代码是如何转换成计算机可以理解的东西的。在许多类似的问题中,一个常见的答案是,从人类可读代码到机器级指令的链或多或少遵循编译链:

high-level code --> assembly code --> machine binary code
尽管这个答案的频率很高,但对我来说,电脑里到底发生了什么仍然有点神秘。在某种程度上,我确实理解计算机和CPU背后的基本电子学,但这个特殊的案例对我来说仍然有点神秘

例如,假设我在中编写了经典的“Hello,world!”示例

#include <iostream>
using namespace std;
int main() 
{
    cout << "Hello, world!";
    return 0;
}
最终转换成二进制序列

10100010101001111...................
然后,“你好,世界!”出现在屏幕上

因此,我的问题是:在这个过程中,在计算机内部这个过程的每个阶段中,电信号电平的物理变化是什么?

我知道我的问题可能过于宽泛,无法完全回答,因此如果您能指出计算机内部发生的主要物理现象(例如硬盘、CPU和RAM之间),我将不胜感激


另外,请让我知道我的问题是否离题,因为计算机工程的不同学科之间的边界并非总是100%明确。在这种情况下,你能推荐另一个SE站点吗?这个问题可能更适合这个站点,谢谢

计算机有CPU、RAM和可以连接的设备

A将程序(源)代码翻译为,其中程序代码和数据编码为数字-另请参阅

将机器代码加载(请参阅)到进程中,并在其开始时启动CPU

CPU是一种硬件,它将数字解释为机器代码指令,这些指令告诉它在机器代码程序的每一步应该做什么,在每一步,下一条机器代码指令应该是什么

一些机器代码指令告诉计算机在内存中加载或存储数据,或者与设备通信。还有一种方法允许设备引起CPU的注意

这个过程是非常元的,因为CPU在编译、链接和运行操作系统的过程中对机器代码进行同样的解释-有这样的机制允许CPU切换作业/程序并扮演不同的角色(操作系统、用户进程A、B等)。除了空闲时,CPU总是在执行一些程序,也就是说,作为机器代码指令的一系列编程步骤

晶体管实现CPU和RAM。在CPU内部有一些功能单元,例如,加法、减法、条件分支等。。这些功能单元由大量晶体管组成。CPU还具有寄存器存储器和高速缓存。它们都根据当前执行的机器代码指令切换值,因为CPU的唯一任务是一条接一条地执行机器代码指令

例如,假设机器代码程序指示计算机添加CPU寄存器中的两个数字,并将答案写回其中一个。硬件将首先获取要执行的指令,然后对其中的数字进行解码,从指定的寄存器中提取值,将这些值提供给一个ALU的输入,指示该ALU执行加法,然后将ALU的输出存储回一个寄存器,以便下一条机器码指令

我们也知道加法可以通过晶体管所能做的许多尽管非常简单的布尔逻辑来执行,参见。将晶体管组装成CPU解释机器代码指令所需的功能单元的想法同样适用于处理器的所有功能

大多数数字电路都是用一种门来构建的,今天称之为门。可以设置门来实现任何布尔函数。这些晶体管被分成两大类电路:和。虽然组合电路仅根据提供的输入计算输出值,但顺序电路有一个反馈回路,使它们能够记住东西。设计者交替使用组合电路和时序电路来构成CPU的功能单元。为了简化,寄存器和内存使用顺序逻辑,而ALU将使用组合逻辑

你也可以看看,这是如何用晶体管构成的


我们还可以注意到,在执行任何一组给定的机器代码指令的过程中,一些电路没有使用,因此我们不关心这些晶体管是触发器还是触发器,除非试图节省电源;其他晶体管只需保持其状态不变,例如当前机器代码指令中未涉及的寄存器和RAM。

您说您对正在发生的事情有了基本的了解,然后询问正在发生的事情。因此,首先,这是一个非常广泛/庞大的课程,即使是四年的电气工程课程,也只涵盖了开始尝试理解一切所需的基础知识。显然不适合任何SE答案(我写的答案证明答案有字符/大小限制)

如果你想了解物理电子学,那么编译的任务与问题无关,与问题无关

CPU是难以置信的愚蠢——它们是对输入的位进行操作的状态机。您的计算机有许多软件层,这些软件在某些方面隐藏了较低层的物理项,如获取存储、usb、pcie硬盘驱动器控制器等的可能方式。仅USB一项,旧的1.1规范就有300个打印页面。这比这里更合适,但这不包括闪存技术、usb到sata或其他方面的任何细节

cpu由re提供机器代码
10100010101001111...................