二进制如何转换为硬件?

Non*_*biz 22 binary assembly operating-system runtime

我理解代码是如何编译为程序集的,并且该程序集是1:1二进制代码的替代品.有人可以帮助我理解二进制文件如何连接到硬件?二进制文件如何物理读取和运行?if语句如何在硬件中工作?

谷歌搜索我想,也许我的问题标题应该是" 如何将二进制数据放在公交线路上 ",但我不确定.

谢谢.

Mik*_*vey 20

我认为这实际上是一个有趣的问题.我会说"这里是如何通过几个简单的步骤构建计算机".

  • 从一些简单的逻辑电路开始,例如AND,OR,NOT和触发器.触发器是一对晶体管,如果一个是ON,另一个是OFF,反之亦然.这样它就可以"记住"一点信息,因此您可以将其视为存储单个二进制数字.某些输入行可以将其置于一种状态或另一种状态,从而"写入"它.

  • 您可以通过使用一堆触发器来存储更大的数字,并将其称为"寄存器".例如,如果寄存器中有四个触发器,则有16种可能的组合,因此您可以将其视为保持0到15之间的数字.

  • 稍微跳过一点,你可以买一个"内存芯片".这是多少个寄存器,比如16个寄存器.它有4条线("地址"线),它有4根线("数据"线).因此,0到15之间的数字可以作为地址输入,并选择16个寄存器中的一个,其值显示在输出数据线上(因此"读取"它).另外几根导线可能导致数据在数据线上进入,导致数字被放入("写入")寄存器.

  • 现在假设你有一个外部4位寄存器(称之为R)和一些电路,以便它

    1. 将R中的值显示给内存地址
    2. 读取该寄存器的4位值并将其移入R中
    3. 并一遍又一遍地重复这一点

根据已预先加载到内存中的数字,您可以看到此内容将通过一系列数字地址循环,因为每个地址的数字决定了下一个地址的内容.

现在,你可以通过很多方式修饰这个东西.您可以将内存扩展为具有5位地址(32个寄存器).然后,如果其中一个地址线连接到外部世界,它将根据外部世界做不同的事情.这是一个"有限状态机".

您可以用简单的计数器替换R寄存器,并将其称为"程序计数器".您可以从存储器中获取数据并将其称为"指令",并使用其中的一些位来读取其他存储器地址并加载一组算术寄存器.您可以使用一些来控制R寄存器是否增加,或者可能获得存储在其中的新地址.那被称为"跳跃".

当然,这是一台非常简单的计算机,但这大致就是它们的开始.

  • @RafaelDiasdaSilva:对我来说已经很长时间了,但除了基本的电子产品之外,我还喜欢 Mead 和 Conway、Addison Wesley 的“VLSI 系统简介”,尽管它已经有 3 年历史了。它们从基本晶体管一直到 CPU 和内存,特别是在芯片上。 (2认同)

Bob*_*man 10

对你的问题的完整答案将包括一本书,并且相当厚.

当你说"代码"时,我假设你指的是高级编译语言,比如C++.通常,编译器会将此代码转换为机器语言,或者您在问题中声明的二进制文件.我们将整齐地避免所有关于托管代码和非托管代码,p代码等的讨论.也就是说,我们只讨论针对特定处理器/操作系统的编译器.例如,Java编译成一个称为字节码的伪代码.我们还将避免链接编辑或链接的全部问题,即多个源模块如何编译成机器语言然后绑定到单个可执行程序中.

好的,既然我们已经涵盖了大部分我们不会涉及的内容,那么通常会发生这种情况.而"通常",我指的是DOS,Linux或Windows环境中的大多数编译语言.源代码被翻译成机器语言,写入可执行文件.该可执行文件或多或少地包含程序在内存中应该是什么样子的图像.当您告诉操作系统运行程序时,执行操作系统相当于"加载和运行".这意味着可执行文件中的内存映像被加载到内存中,然后操作系统对程序中的第一条指令执行机器语言JUMP.然后CPU盲目地遵循其上的指令,直到遇到EXIT.

整个JUMP ...... EXIT nastiness是现代操作系统的过度简化.正如你可以想象的那样,如果CPU遵循盲目的服从,程序中的指令误入歧途,计算机就会崩溃......或者更糟.这是许多早期错误计划的命运,也是许多BSOD的主要贡献者.


Pre*_*gha 2

(大大简化)

二进制文件(比如来自一行机器代码/asm 的二进制字符串)从磁盘加载到内存中。然后,处理器逻辑将指令发送到存储器控制器,以将存储器的内容加载到处理器本地寄存器中。然后它被解释为处理器要执行的指令。

我通过在大学做微编码学到了这个水平的东西。

实际上,还可能发生更多步骤,具体取决于处理器的复杂性和功率。处理器由各个部分(ALU、寄存器等)组成,它们协作获取指令、数据和处理。如果你对这种程度的理解感兴趣并且我推荐你提出这个问题,我建议你买一本关于计算机体系结构的书。我在大学时使用过 Tanenbaum 的“计算机组织结构” 。