我只是在想,机器如何解释二进制代码?我所理解的就是你的代码被转换成 1 和 0,这样机器就可以理解它们,但是它们是如何做到的呢?这只是普通的文本到二进制翻译吗?
首先,“二进制”并不意味着你想象的那样(计算机上的任何数据,包括文本都已经是二进制的,只是我们决定显示和处理的方式不同)。
其次,编译并不是对有趣字符的简单转换(如果是的话,我们就不需要针对不同的语言使用不同的编译器)。要真正了解机器代码,您需要了解它所针对的体系结构。计算机架构有很多种,您的 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)
这些的含义:
将 immediate 添加到寄存器中存储的数字的具体示例:
001000 00001 00010 0000000000000011
在这个例子中,我将指令分成了上面的几个部分。各值的含义如下:
001000
表示addi
或“立即添加”。00001
是十进制的1
,因此这部分指令告诉处理器我们要将寄存器1用作rs。00010
是十进制的 2
,与 rs 的想法相同。0000000000000011
是十进制的 3
。 addi
指令的工作原理如下:它采用在rs中找到的值并将immediate值添加到其中。之后它将结果放入rd。因此,当指令完成后,rd 将包含 3+2=5。
简而言之,编译器解析您的文本并向目标处理器生成指令,该指令执行与您打算对程序执行的操作相同的操作。正如您所看到的,我们程序员编写的程序的文本表示与可运行的机器代码之间存在巨大差距。
一些有关 MIPS 和计算机体系结构的有用资源:
这是非常简单的解释。实际工作更复杂。