Compiler construction 机器如何解释二进制?

Compiler construction 机器如何解释二进制?,compiler-construction,binary,operating-system,cpu,cpu-architecture,Compiler Construction,Binary,Operating System,Cpu,Cpu Architecture,我在想,机器如何解释二进制代码?我所知道的就是你的代码被转换成1和0,这样机器就可以理解它们了,但是它们是怎么做到的呢?这只是一个普通的文本到二进制的翻译吗?这是一个巨大的主题,你在问什么。我想推荐这本优秀的书来概述计算机和编译器在原则上是如何构造的。这很容易理解,而且练习也很有趣。大部分内容可通过提供的链接在线获取 在这个主题上也有一些很好的链接。首先,“二进制”并不是你认为它的意思(计算机上的任何数据,包括文本,都已经是二进制的,只是我们决定显示和处理的方式不同) 其次,编译并不是对有趣字符

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

这是一个巨大的主题,你在问什么。我想推荐这本优秀的书来概述计算机和编译器在原则上是如何构造的。这很容易理解,而且练习也很有趣。大部分内容可通过提供的链接在线获取

在这个主题上也有一些很好的链接。

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

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

我将展示一个MIPS指令的示例。如果你感兴趣,你可以继续阅读并获得一些关于这个主题的实际知识,试试我文章末尾的链接

MIPS是一门很受欢迎的入门课程,因为它的教学格式是比较容易理解的。MIPS指令的宽度为32位。MIPS中有三种指令:“R”、“I”和“J”。我们将看一看“I”说明

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

|------|-----|-----|----------------|
 opcode   rs    rt    immediate
   6      5     5     16               (the numbers show how wide are each part)
其含义如下:

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

001000 00001 00010 0000000000000011
在本例中,我将指令分解为如上所述的部分。这些值的含义如下:

  • 操作码
    001000
    表示添加或“添加即时”
  • rs
    00001
    是十进制的
    1
    ,因此指令的这一部分告诉处理器我们希望将寄存器1用作rs
  • rd
    00010
    是十进制的
    2
    ,与rs的概念相同
  • 立即
    00000000000000 11
    是十进制的
    3
addi
指令的工作原理如下:它获取在rs中找到的值,并将立即值添加到其中。然后将结果放入rd。因此,当指令完成时,rd将包含3+2=5

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

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

  • 允许您使用MIPS机器代码

    • 这样想吧。您有8个电源开关,每个开关都有off(0)或on(1)。计算机会将所有8个开关视为1。它现在很像一个组合锁。键盘上的每个符号都有其组合