Menu Close

计算机是如何执行代码的?

代码是由开发人员编写的,并且是人类与计算机交互的方式。

代码(软件)是如何与计算机硬件(如中央处理器)交互的?

要理解代码如何在计算机上执行,必须了解计算机的基本原理以及如何进行操作。

首先,让我们先谈论计算机硬件的基本概念,然后再进入软件方面的内容。

什么是二进制?

二进制是一种基于2的数字系统,是处理器和内存的执行代码。

二进制数字只能是1或0,因此它被称为二进制。如果将八个二进制数字(00000000)分组,则称为一个字节(bytes),而单个二进制数字(0)称为一位(Bit)。

一个简单开关如何产生二进制信号?

计算机逻辑的一切始于一个简单的开关。一个简单的开关有两个导体和一个连接和断开机制。连接两个导体允许电流流动,这会产生信号传输到导体的另一端。

另一方面,如果导体被断开,则电流不会流动,这意味着不会产生信号。

开关和二进制数
开关和二进制数

由于开关在某个时刻只能开或关,它们提供了理想的机制来产生用于产生方波信号的高低信号。

方波信号
方波信号

当你切换一个开关时,它会产生一个信号或一个数据位。

智能手机拍摄的常规照片大约有五兆字节的数据,相当于四千万个位。这意味着你需要动开关数千万次才能产生足够的数据来拍摄一张智能手机的照片。

由于开关存在着机械限制,我们需要一些没有任何移动部件并且能提供更快切换速度的器件。

把晶体管用作开关

晶体管用作开关
晶体管用作开关

由于发现了掺杂控制硅等半导体的电导性,工程师们能够制造出电控开关,也就是晶体管。这项新发明使得处理速度更快,所需电压更低,并最终使得在现代中央处理器上堆叠超过十亿个这样的晶体管成为可能。

CPU 构架

晶体管被巧妙地排列在一起以制造逻辑门、半加器、加法器、触发器、多路复用器、寄存器和其他使CPU具备功能的组件。这些组件的堆叠方式定义了所谓的CPU架构。

CPU架构还规定了处理器的ISA(指令集架构)。ISA包含一个内置的指令列表,CPU可以本地执行这些指令。然后,这些指令通过编程语言顺序混合在一起,形成所谓的程序。

通常,CPU上可以轻松使用数百条指令,包括加法、减法、移动、保存和加载等。

这里是一个指令集的示例:

指令集中的每个指令都有自己的二进制代码构成,称为操作码(opcode)和操作数(operand)。操作数包含值和指令所使用的地址;  操作码告诉CPU执行什么指令,而操作数是操作码要操作的对象。

单个指令二进制数的构成
单个指令二进制数的构成

Assembler(汇编器)

Assembler(汇编器)是一种将人类可读的汇编语言代码转换为机器可执行指令的工具。汇编语言是一种更高级别的语言,它使用易于理解的符号来表示二进制指令集中的操作码和操作数。汇编器会将汇编代码转换为可执行的二进制指令,以便CPU可以执行它们。

使用汇编语言编写代码可以比直接使用机器语言更加易于理解和维护。这也使得开发人员可以更高效地编写底层系统代码,例如操作系统内核、驱动程序等。然而,由于汇编语言依赖于底层机器架构,因此它可能不够便携,并且对于不同的CPU和处理器可能需要不同的汇编代码。

机器语言的解释方式取决于汇编器所使用的逻辑类型(汇编器是一种低级程序,用于将代码解码并组装成正确的二进制代码)。

例如,如果我们的汇编器使用ASCII(美国信息交换标准代码)标准,那么汇编器将接受所给的机器代码,并将其解释为与下表中的ASCII相同的内容。

ASCII Binary table
ASCII Binary table

由于我们的汇编器使用ASCII(8位版本),因此二进制中的每八个数字将被解释为一个字符。汇编器将使用给定的标准接受该字节并将其解释。

例如,01000001 01101001 01010100将转换为单词“bit”。

理解汇编语言

汇编语言是一种可读性较强的低级编程语言,直接操作CPU架构的操作码和操作数。

以下是一个使用前面所示指令集的简单汇编代码示例:

 

1. LODA #5
2. LODB #7
3. ADD R3
4. STRE M12

这段代码被存储在RAM中,直到CPU逐行获取每一行代码。

CPU的取指、译码和执行循环

CPU通过一个被称为取指、译码和执行的循环来执行代码。这个序列展示了CPU如何处理每一行代码。

CPU的取指、译码和执行循环
CPU的取指、译码和执行循环

取指:CPU内部的指令计数器从RAM中取出一行指令,以便让CPU知道下一步要执行什么指令。

译码:汇编器将可读性较强的代码块进行解码,并将其组装成计算机可以理解的格式化二进制代码。

1. 00010101
2. 00100111
3. 00110011
4. 01011100

执行:CPU通过将操作码的指令应用到操作数来执行二进制代码。

计算机将按以下方式执行代码:

将第一个寄存器加载为5
将第二个寄存器加载为7
5 + 7 = 12,将12保存到第三个寄存器中
将第三个寄存器的值存储到RAM地址M12

更深入的了解

拥有适当的硬件、汇编器和汇编语言,人们可以相对容易地执行代码。然而,随着程序和计算机硬件变得更加复杂,工程师和程序员不得不想办法使编程更简便,并确保与不同类型的CPU架构兼容。因此,编译器和解释器应运而生。

什么是编译器(Compiler)和解释器 (Interpreter)?

编译器和解释器是转换程序,它们将源代码(由高级编程语言编写的程序)转换为汇编语言,然后汇编器将其解码为二进制代码。

解释器会接收一行代码并立即执行它。这通常在终端上使用,如Linux Bash Shell终端和Windows PowerShell终端。非常适合执行简单的一次性任务。

相比之下,编译器会接收多行代码并将它们编译成程序。这些程序的例子包括Microsoft Word,Photoshop,Google Chrome,Safari和Steam等应用程序。

高级编程语言

高级编程语言是指汇编语言之后的任何编程语言。你可能熟悉的一些编程语言包括C,Python,Java和Swift等都是高级语言。这些编程语言使编程比汇编语言更易读且更简单。

下面是一组对比,说明使用汇编语言编程闭高级编程语言(如Python)编程更复杂且难懂:

汇编语言和Python语言全部打印出“Hello World”. 但汇编语言要复杂得多。但这些高级编程语言可以使开发人员在合理的时间内编写游戏、网站、应用程序和驱动程序等很多应用且便于理解。

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in 微控制器

Related Posts