什么是 MIPS,它的用途是什么?

What is MIPS and what is it used for?

不解释为什么我想知道这个,到底什么是MIPS?当我们更容易学习和理解编程语言(C++、java、python.. 等)时,汇编语言对我们有什么用?我在大学里听说计算机先将 C++ 程序转换为汇编,然后再转换为一系列 1 和 0,为什么?不能直接从C++/Java语言转换过来吗?

我这里说的是MIPS instruction set

MIPS 本质上是一个处理器,就像 ARM、x86、PowerPC、68K、pdp-11 和许多其他处理器一样。

我们知道英特尔推动或帮助推动了 CISC 的想法,最终不得不求助于基本上使用 RISC 或 vliw 等其他东西的微代码。

另一方面,MIPS 推动或帮助推动了 RISC 的想法。创始人基本上写了一本教科书。推动流水线、缓存等的想法,自从或 re-architected 以来所做的一切都倾向于使用,甚至是微控制器。它与任何用于教育目的的架构一样好,专利使您可以从头开始制作可用的处理器,并避免专利(也可以使用 ARM,但没有一系列的教科书)。以 opencores.org 为例。电气和计算机工程专业的学生可以使用这种架构或其他架构来学习计算机的逻辑设计方面,但这往往是有用的。计算机工程和计算机科学专业的学生可以学习汇编语言,以至少更好地理解他们的语言背后发生的事情。汇编语言本身就是一种语言,尽管有成百上千种语言使用相同的名称:汇编语言,但它们完全不兼容。不过,一旦你学会了一种,通常这会使其他语言只是语法问题,同样它有助于使更高级别的编程语言只是语法问题。

我们可以使用 MIPS 而不是 ARM。对于每个基于 non-arm 的东西,你可能至少有一个基于 ARM 的东西,即使你可能正在阅读这篇文章的 x86,也有一个或一些 ARM 内核。您将不得不询问他们的营销和销售部门为什么他们没有获胜。同样,68K 是芯片而非核心,在 ARM 接手之前占据主导地位(对于每个 x86,然后你可能有一个或两个基于 68K 的东西)。

编译器绝对可以自己完成汇编步骤并输出机器代码而不是汇编语言代码。但是从测试、调试、维护的角度去想。任何新的处理器都首先使用汇编器,然后可能同时使用 linker,然后是编译器,但您总是有一个汇编器,并且该汇编器最初用于开发内核。总有一个汇编程序可用。与机器代码相比,人类编写编译器以 "see" 汇编语言输出要容易得多,他们需要一个反汇编程序来调试他们的程序。现在 JIT 编译器的趋势并不一定需要,但它极大地有助于直接从中间代码转到机器代码,而无需调用另一个或两个程序。所以我们看到了一点。同样,将对象和 link 对象一起编译而不是一次完成所有操作是有意义的。因此,尽管可能并且人们已经做到了,但压倒性的趋势是拥有一个编译为汇编语言的编译器,一个将汇编语言汇编成机器代码对象的汇编器,然后一个 linker 将它们 link 组合在一起进入最终的二进制文件。这就是主要工具链的工作方式。

JAVA 不仅是一种高级语言,而且它有自己的独立于平台的机器语言。编译器将高级编译成这种机器语言。然后你必须有一个用其他语言编写的 jvm,java 运行s on。或 java 运行 的其他方式。一些编译器被设计成可以使用汇编语言,或者将 java 转换成其他一些机器代码。但是使用 java 的正常方法是让这个编译步骤然后是 运行 时间步骤。

Python、pascal 和其他人可以并且已经拥有独立于平台的机器代码,然后需要解释器来执行。

MIPS 和 ARM 制造 IP,逻辑是芯片供应商制造芯片(或制造芯片,因为大多数都是无晶圆厂)购买此 ip 并将其集成到他们的芯片产品中。 PowerPC、intel x86、motorola 68K 和许多其他传统上拥有或制造处理器核心 ip 的人也制造芯片,他们通常不会将这些核心的 ip 出售给其他芯片供应商。每个人都在法庭上捍卫自己的知识产权,这使得制造克隆甚至制造不使用他人专利思想的新指令集变得非常困难。

为什么要在学校学这个?也许是为了了解事情是如何工作的,高级语言的效率有多低,或者优化器和其他技术有多重要,还有很多其他原因。