如果没有进一步解释为什么我想知道这一点,MIPS究竟是什么?当我们更容易学习和理解编程语言(C ++,java,python等)时,汇编语言对我们有什么用?我在大学时被告知计算机将C ++程序转换为汇编程序,然后转换为1和0的串行,为什么?难道不能直接从C ++ / Java语言转换吗?
我在这里讲的是MIPS instruction set
答案 0 :(得分:1)
MIPS本质上是一个处理器,如ARM,x86,PowerPC,68K,pdp-11以及许多其他处理器。
我们知道英特尔推动或帮助推动了CISC的想法,并最终不得不使用其他类似RISC或vliw的基本微码。
另一方面,MIPS推动或帮助推动了RISC的理念。创始人基本上写了一本教科书。推动流水线,缓存等所有事情,从那以后所做的一切或重新设计的东西都倾向于使用,甚至是微控制器。它与任何用于教育目的的架构一样好,专利是这样的,你可以从头开始制作一个可用的处理器,并避免使用专利(也可以与ARM一起使用,但不存在一系列与之相关的教科书)。以opencores.org为例。电气和计算机工程专业的学生可以使用这种架构或其他人学习计算机的逻辑设计方面,但这往往是一个有用的。计算机工程和计算机科学的学生可以学习汇编语言,以便至少更好地了解他们语言背后的情况。汇编语言本身就是一种语言,尽管有数百或数千种语言使用相同的名称:汇编语言,但完全不兼容。一旦你学会了一个,通常这使得其他人只是语法问题,同样它有助于使更高级别的编程语言只是语法问题。MIPS可能是我们使用的而不是ARM。对于每个基于非arm的东西,你可能至少有一个基于ARM的东西,即使是你可能正在阅读它的x86,也有一个或一些ARM内核。你不得不问他们的营销和销售他们为什么没有赢。同样地,68K是一个芯片而不是核心,在ARM接管之前占主导地位(对于每个x86,你可能有一两个68K的东西)。
绝对一个编译器当然可以自己组装步骤并输出机器代码而不是汇编语言代码。但从测试,调试,维护的角度来考虑它。任何新处理器首先使用汇编程序,然后可能是同时使用链接器,然后是编译器,但是您始终使用汇编程序,并且最初使用该汇编程序来开发核心。总有一个汇编程序可用。人类编写编译器“看”汇编语言输出比机器代码容易得多,他们需要一个反汇编程序来调试他们的程序。现在JIT编译器的趋势并不一定是必需的,但是从中间代码直接到机器代码而不调用另一个或两个程序非常有帮助。所以我们看到了一点。同样,编译到对象并将对象链接在一起而不是一次性完成所有操作是有意义的。因此尽管可能并且人们已经做到了,但压倒性的趋势是让编译器编译成汇编语言,汇编器将汇编语言汇编成机器代码对象,然后将链接器连接到最终二进制文件中。这就是主要工具链的工作方式。
JAVA不仅是一种高级语言,而且还拥有自己的平台独立机器语言。编译器将高级别编译为此机器语言。然后你必须用一些其他语言写的jvm,java运行。或者其他一些运行java的方法。一些编译器已经被用于汇编语言,或者将java转换为其他一些机器代码。但是使用java的常规方法是使用此编译步骤然后执行运行时步骤。
Python,pascal和其他人可以拥有一个独立于平台的机器代码,然后需要一个解释器来执行。
MIPS和ARM制造IP,一个芯片供应商制造芯片的人(或者由于大多数制造芯片而制造芯片)的逻辑购买了这个IP并将其集成到他们的芯片产品中。 PowerPC,intel x86,motorola 68K和许多其他人传统上是拥有或制造处理器核心ip的人也制造芯片,他们不会将这些核心的ip通常卖给其他芯片供应商。每个人都在法庭上为自己的知识产权辩护,这样就很难制作克隆,甚至制作一套不使用别人专利意见的新指令集。为什么要在学校学习这个?也许要了解事情是如何运作的,高级语言效率如何低,或者优化器和其他技术有多重要,还有很多其他原因。