gpt4 book ai didi

computer-science - 机器代码执行,这是怎么回事?

转载 作者:行者123 更新时间:2023-12-04 00:43:11 24 4
gpt4 key购买 nike

多年来我一直在学习计算机编程,抽象层使我的理解变得模糊。假设我编译了一些源代码并且我有可执行的机器代码。计算机运行此代码后发生了什么?

例如,假设我运行了一个简单的 if then else 语句并获得了机器代码。执行这条指令的计算机电路发生了什么?

最佳答案

这取决于语言,但对于常规可执行文件(如从 C/C++ 获得),机器代码是 CPU 将解释为直接指令的位模式。如果你做过任何汇编,这些机器语言指令与汇编指令一对一映射(如果你正在获得 CS 学位,你应该最终参加一两门学习汇编的类(class),甚至可能需要在汇编之间手动翻译和使用 CPU 引用的机器语言)。

Java 和 C# 等其他语言稍微复杂一些,其中有一个中间“字节码”,在程序运行时被解释并翻译成机器代码,从而使它们能够实现一定的平台独立性。

至于指令本身做什么,这取决于 CPU,但其中一些可能是像下面这样的事情:

  • 将值从寄存器*移动到 RAM 地址,反之亦然
  • 对两个值执行运算(如加法、XOR、AND、OR 等...)
  • 比较两个值(确定它们是否相等或一个是否大于另一个)
  • 根据上次比较的结果(在循环中使用),将当前指令寄存器(跳转)更改为不同的地址
  • 将一个值移入堆栈**,或从堆栈中移除一个值
  • 将我们的位置/状态保存在栈上,并跳转到一个新地址
  • 从堆栈中调用一个保存的位置/状态,并跳回到我们原来所在的位置(最后两个用于函数调用)

可能还有更多。

*寄存器是一些非常小但非常快的内存空间,存在于 CPU 中;某些寄存器用于某些指令。其中之一是当前指令寄存器,它保存下一条要执行的指令的地址。直接更改此值将跳转到新地址,类似于 goto 语句。

**栈是一个内部栈,可以从中以先进后出的方式存储和检索值。函数调用就是这样实现的。就像汉塞尔和格蕾特一样,我们在身后留下面包屑的痕迹,这样我们才能找到回家的路。

此外,对于指令集的组织方式有两种“思想流派”:RISC 和 CISC(精简指令集计算机和复杂指令集计算机)。在 RISC 计算机中,功能较弱的指令要少得多,程序员或编译器需要使用它们的组来完成更复杂的事情。在 CISC 计算机中,指令越来越多,功能也越来越强大,但有一些冗余。基于 Intel 的 CPU 是 CISC。

另见:

关于computer-science - 机器代码执行,这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16535825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com