机器如何解释二进制?

问题描述 投票:0回答:4

我只是在想,机器如何解释二进制代码?我所理解的就是你的代码被转换成 1 和 0,这样机器就可以理解它们,但是它们是如何做到的呢?这只是普通的文本到二进制翻译吗?

compiler-construction binary operating-system cpu cpu-architecture
4个回答
14
投票

首先,“二进制”并不意味着你想象的那样(计算机上的任何数据,包括文本都已经是二进制的,只是我们决定显示和处理的方式不同)。

其次,编译并不是对有趣字符的简单转换(如果是的话,我们就不需要针对不同的语言使用不同的编译器)。要真正了解机器代码,您需要了解它所针对的体系结构。计算机架构有很多种,您的 PC 只是其中之一。这是一门非常广泛的学科,需要对计算机体系结构有深入的了解才能掌握。

我将展示一个 MIPS 指令的示例。如果您有兴趣,可以继续阅读并获得有关该主题的一些实际知识,请尝试我的帖子末尾的链接。

MIPS 是一门流行的入门课程,因为它的指令格式是更容易理解的格式之一。 MIPS 指令是 32 位宽。 MIPS中有3种指令:“R”、“I”和“J”。我们来看看“I”指令。

当处理器收到一条指令(32 位数据)时,它会读取该指令并决定如何处理它。 “I”指令如下所示:

|------|-----|-----|----------------|
 opcode   rs    rt    immediate
   6      5     5     16               (the numbers show how wide are each part)

这些的含义:

  • opcode 告诉这是什么指令(例如:加法、减法、乘法等等)。所有指令(包括“R”和“J”类型)都以 6 位操作码开头,这就是处理器如何知道它是哪种类型的。
  • rsrt是寄存器,是处理器中的一种存储装置,可以保存32位值。 MIPS 有 32 个,它们通过编号来识别。这与内存不同,它位于 CPU 本身内部。
  • 立即是一个数字。之所以这样称呼,是因为数字“就在那里”在指令中,而不是在寄存器或内存中。

immediate 添加到寄存器中存储的数字的具体示例:

001000 00001 00010 0000000000000011

在这个例子中,我将指令分成了上面的几个部分。各值的含义如下:

  • 操作码
    001000
    表示
    addi
    或“立即添加”。
  • rs
    00001
    是十进制的
    1
    ,因此这部分指令告诉处理器我们要将寄存器1用作rs
  • rd
    00010
    是十进制的
    2
    ,与 rs 的想法相同。
  • 立即
    0000000000000011
    是十进制的
    3

addi
指令的工作原理如下:它采用在rs中找到的值并将immediate值添加到其中。之后它将结果放入rd。因此,当指令完成后,rd 将包含 3+2=5。

简而言之,编译器解析您的文本并向目标处理器生成指令,该指令执行与您打算对程序执行的操作相同的操作。正如您所看到的,我们程序员编写的程序的文本表示与可运行的机器代码之间存在巨大差距。

一些有关 MIPS 和计算机体系结构的有用资源:


0
投票

你问的是一个很大的话题。我推荐这本优秀的书《计算系统的要素》,概述了计算机和编译器的原理构建方式。它很容易遵循,而且练习起来很有趣。大部分内容都可以通过提供的链接在线获取。

这个问题

也有一些关于该主题的很好的链接。


0
投票


0
投票

这是非常简单的解释。实际工作更复杂。

© www.soinside.com 2019 - 2024. All rights reserved.