机器如何解释二进制?

时间:2012-03-03 15:00:29

标签: compiler-construction binary operating-system cpu cpu-architecture

我只是想,机器如何解释二进制代码?我所理解的是你的代码变成了1和0,所以机器可以理解它们,但它们是如何做到的?它只是二进制翻译的普通文本吗?

3 个答案:

答案 0 :(得分:13)

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

其次,编译不是对有趣角色的简单转换(如果是,我们不需要针对不同语言的不同编译器)。要真正了解机器代码,您需要了解它所针对的体系结构。有许多计算机架构,您的PC只是其中之一。这是一个非常广泛的主题,需要牢牢掌握计算机体系结构才能掌握。

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

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

当处理器获得一条指令(32位数据)时,它会读取它并决定如何处理它。 “我”说明如下:

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

这些的含义:

  • 操作码告诉它是什么类型的指令(例如:加法,减法,乘法和许多其他指令)。所有指令(包括“R”和“J”类型)都以6位操作码开头,这就是处理器知道它的类型。
  • rs rt 是寄存器,处理器中的一种存储,可以容纳32位值。 MIPS有32个,它们的编号由它们识别。这与内存不同,它在CPU本身内部。
  • 立即是一个数字。之所以这样称呼,因为数字在指令中是“正确的”,而不是在寄存器或存储器中。

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

001000 00001 00010 0000000000000011

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

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

addi指令的工作方式如下:它采用 rs 中的值,并为其添加立即值。之后,它将结果放入 rd 。因此,当指令完成时, rd 将包含3 + 2 = 5。

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

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

答案 1 :(得分:0)

这是一个很大的主题,你要问的是什么。我会推荐优秀的书籍The elements of computing systems,以概述原则上如何构建计算机和编译器。这很容易理解,练习很有趣。其中大部分内容可通过所提供的链接在线获取。

This question在此主题上也有一些很好的链接。

答案 2 :(得分:0)

这样想。您有8个电源开关,每个开关关闭(0)或开启(1)。计算机将所有8个开关视为1.现在很像组合锁。键盘上的每个符号都有组合。