0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

计算机如何执行你写的代码

Q4MP_gh_c472c21 ? 来源:编程技术宇宙 ? 作者:轩辕之风O ? 2021-09-12 09:33 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

计算机如何执行你写的代码?知乎上有人提问:电脑怎样执行编程语言的?

很多刚刚入坑的小白可能对此完全没有概念,或者模模糊糊知道个大概,我们写下的一行行代码,计算机到底是如何在执行的呢?

我们以x86架构的CPU为研究对象,从一个例子出发,来尝试解答这个问题。

1、高级语言为了方便编程,伟大的计算机先驱们发明了一个又一个的编程语言,使得我们可以用人类最容易理解的语法规则去告诉计算机完成我们想要的功能。

比如,一个C语言程序员写下了一行代码:

int sum = a + b;

一句简单的不能再简单的C语言语句。

但即便是如此简单,聪明绝顶的计算机却还是看不懂:这是弄啥捏?

这时候就需要一个翻译,负责把人类编写的高级语言“翻译”成计算机能看得懂的东西,这个翻译就是编译器。

2、编译链接上面的高级语言语句经过编译器编译链接后,生成了一个目标运行平台为x86架构的可执行程序exe/elf,使用反编译工具IDA进行分析,可以看到这行代码编译后的样子是这样的:

5de95ec8-1354-11ec-8fb8-12bb97331649.png

mov eax, a : 将变量a的值存入eax寄存器

add eax, b : 把变量b的值和eax寄存器的值相加,并将结果保存在eax寄存器中

mov sum, eax : 将计算结果从eax寄存器写入sum变量

看到了吗,就像把大象关进冰箱需要分三步,计算机完成程序员的一条加法语句,也分了三步:取出被加数、加上加数、写入结果。

3、机器指令上面的汇编指令只是为了人类理解方便的助记符,计算机同样也不认识这玩意,那几条指令在内存中实际上是这样的一串数据:

十六进制:

8B 45 EC 03 45 E0 89 45 F8

十六进制是为了书写方便,计算机真正能看到的只有二进制的比特流:

10001011 01000101 11101100 00000011 01000101 11100000 10001001 01000101 11111000

接下来,计算机要做的事情就是识别这些二进制流都是什么意思,转换成一条条的指令来执行。

在开始执行之前,先来了解一下指令格式。

4、指令格式x86架构CPU指令集中的指令格式如下:

主要有六个部分:

[非必需] 指令前缀:我们经常用到的原子操作指令前面有一个lock前缀,就属于指令前缀。

[必需] 操作码:指令最核心的部分,标识这条指令是什么功能。

[非必需] ModR/M:内存/寄存器操作数字节

[非必需] SIB:索引寻址描述字节

[非必需] Displacement:常数偏移字节/半字/字

[非必需] Immediate:立即数字节/半字/字

需要注意的是,并不是每一条指令都包含上面的所有部分,许多指令只包含其中一部分字段。

根据操作码的长度不同,指令分为单字节操作码指令、双字节操作码指令、三字节操作码指令。

5、执行指令计算机中真正负责指令执行的核心部件是中央处理器CPU,在CPU中有一个指令寄存器IP,全称是Instruction Pointer,在32位下,它叫EIP,在64位下它叫RIP。

下面开始执行:

指令寄存器EIP指向了第一条指令,开始读取第一个字节:10001011,也就是0x8B。

开始指令译码,翻译出这是一条什么指令。

下面是x86架构的CPU指令操作码表:

CPU中的指令译码模块拿到手一看,呀,不是指令前缀,是个单字节操作码的mov指令,要往eax寄存器里面塞数据,数据从哪来呢?

再往后一看,0x45,再来译码:

好家伙,原来是根据ebp寄存器的值+一个8位的偏移来读取数据。

再往后读取一个字节,就是偏移值:EC。

现在第一条指令就译码出来了:将ebp+0xEC位置处的4个字节的数据取出来,放到eax寄存器中。,这就是这一条指令要干的事情。

同时CPU还得出了另一个信息:这一条指令长度是3个字节,下一条指令的起始地址是在3个字节之后,随后,指令寄存器EIP向后拨动,指向下一条指令的地址:$+3。

指令译码完成之后,开始来正式执行它。

执行完一条以后,又来到指令寄存器EIP指向的地方,随后再次指令译码、执行,不断重复这个过程,依次执行每一条指令。

这其实就是CPU工作最基本的原理。

拓展上面描述的过程是CPU在硬件电路层面完成的,但这种设计思想在软件领域也同样适用。

大家如果去研究Java虚拟机JVM和Python的解释器源代码时,也会发现有相似之处:JVM和解释器通过定义一套自己的“指令集”,然后它们的编译器使用这套指令集将Java和Python代码编译成对应的程序。

运行的时候也类似,虚拟机或者解释器不断识别每一条指令,译码、执行,和CPU执行指令的过程颇有几分相似。

C/C++语言编译的程序,最后是直接编译成了CPU的指令,所以跨平台能力差,如果换到ARM架构平台,原来的程序将无法执行,需要重新编译成新的平台的程序。

而Java、Python这类语言,是自己在软件层面的指令集,因为其自身已经开发了针对不同CPU平台的虚拟机、解释器,所以这些语言编写的程序移植性好,真正做到一次编写,到处运行。

总结我们使用高级语言C、C++编写的程序代码,经过编译器的编译链接,最终变成CPU可以理解的机器指令,随后CPU在执行时通过不断的译码、执行,最终实现高级语言所描述的功能。

现在你知道你用编程语言写下的程序是如何跑起来的了吗?

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11097

    浏览量

    217656
  • 计算机
    +关注

    关注

    19

    文章

    7679

    浏览量

    90993
  • C语言
    +关注

    关注

    180

    文章

    7633

    浏览量

    142135

原文标题:一行代码,揭开CPU执行原理!

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    什么是模块化计算机?搞清楚用途和应用场景,别再瞎选了!

    如果是搞工业自动化、医疗设备、交通控制,甚至是军事装备的,那你大概率已经听过“模块化计算机”这个词。要是还没了解,那这篇文章就是为
    的头像 发表于 06-04 11:00 ?373次阅读
    什么是模块化<b class='flag-5'>计算机</b>?搞清楚用途和应用场景,别再瞎选了!

    云端超级计算机使用教程

    云端超级计算机是一种基于云计算的高性能计算服务,它将大量计算资源和存储资源集中在一起,通过网络向用户提供按需的计算服务。下面,AI部落小编为
    的头像 发表于 12-17 10:19 ?587次阅读

    工业中使用哪种计算机

    在工业环境中,工控机被广泛使用。这些计算机的设计可承受极端温度、灰尘和振动等恶劣条件。它们比标准消费类计算机更耐用、更可靠。工业计算机可控制机器、监控流程并实时收集数据。其坚固的结构和专业功能
    的头像 发表于 11-29 14:07 ?755次阅读
    工业中使用哪种<b class='flag-5'>计算机</b>?

    量子计算机与普通计算机工作原理的区别

    ? 本文介绍了量子计算机与普通计算机工作原理的区别。 量子计算是一个新兴的研究领域,科学家们利用量子力学,制造出具有革命性能力的计算机。虽然现在的量子
    的头像 发表于 11-24 11:00 ?1596次阅读
    量子<b class='flag-5'>计算机</b>与普通<b class='flag-5'>计算机</b>工作原理的区别

    工业计算机类型介绍

    工业领域没有计算机的世界就像没有管弦乐队的交响乐,缺乏实现最佳性能所需的和谐和精确度。计算机彻底改变了工业的运作方式,将效率、准确性和创新推向了新的高度。事实上,根据最近在印度进行的一项研究
    的头像 发表于 11-04 15:56 ?708次阅读
    工业<b class='flag-5'>计算机</b>类型介绍

    ROM对计算机性能的影响

    是一种非易失性存储器,即使在断电的情况下也能保持数据不丢失。它通常用于存储固件,这些固件是计算机启动和运行操作系统所必需的。ROM的内容在制造过程中被写入,并且通常不能被用户更改。 ROM的类型 PROM(可编程ROM) :用户可以通过特殊的编程设备
    的头像 发表于 11-04 10:31 ?1289次阅读

    计算机接口位于什么之间

    计算机接口是计算机硬件和软件之间、计算机与外部设备之间以及计算机各部件之间传输数据、控制信息和状态信息的硬件设备和软件程序。它在计算机系统中
    的头像 发表于 10-14 14:02 ?1391次阅读

    计算机存储系统的工作原理和功能

    计算机存储系统作为计算机系统中至关重要的组成部分,其原理和功能对于理解计算机的运行机制具有关键意义。以下将详细阐述计算机存储系统的原理和功能。
    的头像 发表于 09-26 16:42 ?3034次阅读

    计算机存储系统的构成

    计算机存储系统是计算机中用于存放程序和数据的设备或部件的集合,它构成了计算机信息处理的基础。一个完整的计算机存储系统通常包括多个层次的存储器,从高速缓存(Cache)到主存储器(Mai
    的头像 发表于 09-26 15:25 ?2630次阅读

    计算机进行程序控制工作的基本原理是怎样的

    计算机程序控制是计算机科学中的一个核心概念,它涉及到计算机如何根据预设的指令序列执行任务。 1. 计算机硬件基础 在深入程序控制之前,我们需
    的头像 发表于 09-04 16:57 ?1608次阅读

    简述计算机总线的分类

    计算机总线作为计算机系统中连接各个功能部件的公共通信干线,其结构和分类对于理解计算机硬件系统的工作原理至关重要。以下是对计算机总线结构和分类的详细阐述,内容将涵盖总线的基本概念、内部结
    的头像 发表于 08-26 16:23 ?5291次阅读

    晶体管计算机和电子管计算机有什么区别

    晶体管计算机和电子管计算机作为计算机发展史上的两个重要阶段,它们在多个方面存在显著的区别。以下是对这两类计算机在硬件、性能、应用以及技术发展等方面区别的详细阐述。
    的头像 发表于 08-23 15:28 ?3742次阅读

    晶体管计算机的诞生和特点

    晶体管计算机的诞生标志着计算机技术的一个重要里程碑,它不仅推动了计算机硬件的革新,还促进了计算机软件技术的发展。以下是对晶体管计算机诞生及其
    的头像 发表于 08-23 15:06 ?4342次阅读

    微处理器如何控制计算机系统

    微处理器,作为计算机系统的核心部件,承担着控制整个计算机系统运行的重要任务。它不仅是计算机的运算中心,还是控制中心,负责执行程序指令、处理数据以及协调
    的头像 发表于 08-22 14:21 ?1006次阅读

    简述微型计算机系统的组成

    微型计算机系统,简称微机系统,是一个集硬件和软件于一体的复杂系统,旨在高效处理信息、存储数据和执行用户指令。下面将从硬件和软件两大方面对微型计算机系统的组成进行详细阐述。
    的头像 发表于 08-22 12:37 ?8696次阅读