机器如何解释二进制?

The*_*Cat 5 compiler-construction binary cpu operating-system cpu-architecture

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

Tam*_*lei 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)
Run Code Online (Sandbox Code Playgroud)

这些意思是:

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

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

001000 00001 00010 0000000000000011
Run Code Online (Sandbox Code Playgroud)

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

  • 操作码:001000表示addi或"立即添加".
  • rs:000011十进制的,所以这部分指令告诉处理器我们要将寄存器1用作rs.
  • rd:000102十进制的,与rs一样的想法.
  • 即时:00000000000000113十进制.

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

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

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