我只是在想,机器如何解释二进制代码?我所理解的是你的代码变成了 1 和 0,所以机器可以理解它们,但它们是怎么做到的?它只是二进制翻译的普通文本吗?
最佳答案
首先,“二进制”并不意味着你认为它的意思(计算机上的任何数据,包括文本已经是二进制的,只是我们决定显示和处理的方式不同)。
其次,编译不是对有趣字符的简单转换(如果是这样,我们就不需要为不同的语言使用不同的编译器)。要真正了解机器代码,您需要了解它所针对的架构。有许多计算机架构,您的 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)
这些的含义:
将立即数添加到存储在寄存器中的数字的具体示例:
001000 00001 00010 0000000000000011
在这个例子中,我把指令分解成上面的部分。值的含义如下:
001000
意味着 addi
或“立即添加”。 00001
是 1
十进制,所以这部分指令告诉处理器我们要使用寄存器 1 作为 rs . 00010
是 2
十进制,与 rs 相同的想法。 0000000000000011
是 3
十进制。 addi
指令的工作方式如下:它采用在 中找到的值rs 并添加 立即对它的值(value)。之后它将结果放入 rd .所以,当指令完成后, rd 将包含 3+2=5。简而言之,编译器解析您的文本并向目标处理器生成指令,这些指令执行您打算对程序执行的相同操作。如您所见,我们程序员编写的程序的文本表示与可运行的机器代码之间存在巨大差距。
关于 MIPS 和计算机体系结构的一些有用资源:
关于compiler-construction - 机器如何解释二进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9547090/