MIPS - Is it important?我的问题:熟悉MIPS编程语言吗? 我是一名CS学生,正在参加针对MIPS的装配课。 我用高级语言写作很自在,但是Mips使我有些沮丧。 我应该真正关注MIPS并设法完全掌握它吗? 将来对我有帮助吗? 在某一时刻(在90年代),源自MIPS的处理器是世界上最畅销的处理器,这使Intel x86处理器的销量相形见war。这是因为它们在嵌入式市场上的巨大份额。我认为现在基于ARM的处理器可能已经取代了这个头衔,但是仍然有大量使用MIPS的嵌入式系统。 即使您在职业生涯中从未使用汇编器对MIPS芯片进行编程,汇编语言也可能对学习有用。如果您对编译器将要发出的内容有所了解,它可以帮助您编写更高效的高级代码。仍然使用它的其他领域包括编译器(编写自己的代码),设备驱动程序和多媒体编程(其中需要MMX或SSE的代码通常仍是由汇编器手工编写的)。 每种CPU类型都有不同的指令集,但是有足够的共性,一旦您学习了一种汇编方言(在您的情况下为MIPS),其他的方言就应该很容易理解。 了解计算机的最低级别很有帮助。例如,有些开发人员会说CPU执行某种"新对象"指令。当然没有这样的指令,对象的管理发生在更高层次的抽象上。最好理解区别,因此您可以理解为什么对象创建可能昂贵(或不昂贵)或为什么受保护的地址空间可以使系统更健壮。 当我在学校时,使用System / 360指令集在IBM大型机上教授了组装课程。在我的职业生涯的任何时候,我都从来没有接近使用这种机器进行工作,但是了解CPU的外观非常有价值。 如今,我在使用MIPS处理器的嵌入式系统上工作。我实际上花了相当多的时间研究MIPS程序集列表,并为引导向量和同步原语编写了一些MIPS程序集。但是,即使您从未真正用汇编语言编写任何东西,理解CPU的操作仍然很有价值。 大约两年前,我参加了一次装配课,做了一些技巧。我发现自己以类似mips的asm语言编写GameBoy Advance游戏。不能说我喜欢它。 虽然我认为最好了解汇编代码的内部工作原理(从高层次到低层次)。我觉得这使我对计算机的实际工作有了更多的了解。另外,在设计自己的汇编语言之后不久,我忍不住制造了几台虚拟机:) MIPS是学习汇编的一种很棒的语言。您拥有大量的通用寄存器,从而使编写程序的过程变得不那么繁琐,并且它是RISC架构,因此您需要记住的指令更少。 很少有人提到的一些主流用法是N64,Playstation 1,Playstation 2和PSP都使用MIPS处理器。 我认为" mips编程语言"是指MIPS汇编语言。 学习汇编语言是有益的,它可以帮助您将编写的代码映射到如何在硬件上运行。这可以帮助您解决更底层的问题,例如缓存未命中,分支,乱序执行以及其他您不会想到的编写高级代码的事情。 天气学习MIPS组装对您有用,取决于您打算从事的职业。我个人认为x86 / x64(在PC上很受欢迎,如果您在PC上编写C ++或C#,则直接适用),PPC(在游戏机中使用,从而获得普及,也使您接触RISC)或ARM(在许多嵌入式设备中使用)例如手机)可能是更好的学习选择。 汇编语言总是值得学习的。您可能没有在教书,也没有看到编译器如何将高级语言代码转换为汇编代码,但是我想说,知识是了解汇编语言最重要的好处。令人震惊的是,即使在最高优化级别上,许多编译器的效率也低下。 (大多数编译器会根据请求为您转储汇编代码,而不是继续进行机器代码和链接。) 就是说,MIPS组件可能没有用,因为现在几乎没有人使用MIPS。 (SGI曾经使用过,但是现在他们的机器都在x86 / IA-64芯片上。)如果您发现汇编语言很有吸引力并且想进一步从事汇编工作,请学习ARM指令集。 ARM仅比MIPS复杂一点,几乎所有的移动电话,智能电话和PDA现在都使用ARM芯片(由数十家制造商生产)。 iPod使用ARM,Zune也使用ARM。 在您的情况下,我认为MIPS可用作辅导工具。这是一门计算机科学课程,而不是给您代码猴子工具,而是试图教给您广泛的概念,这些概念在MIPS之类的简单体系结构上而不是x86上更易于示例。 不要指望它进入"程序员的工具箱"。出于编写低级代码的实际目的,您最好在以后学习x86汇编语言。 嵌入式系统似乎再次出现了误点。 @ [sk]提供了比我更好的总结,但是我有一个最近的例子: 如今,Broadcom似乎在制造带有MIPS或ARM芯片的Wifi卡(我不确定文档中的哪一个固件是另一种固件)。但是,在较新的芯片上,我们仍在等待启用所有功能的Linux支持,因此,很高兴您正在学习。 (现在给我写一些驱动程序:P) 这是三个学习汇编的好理由。 第三个原因是迄今为止最重要的。了解硬件的工作原理将大大加深您对计算机科学的理解,进而帮助您成为更好的开发人员。 我去年学习过MIPS。 MIPS是一种重要的语言,但是很不幸,您可能永远不会使用MIPS。您将学习一些基础知识,但不要浪费时间尝试学习过多的知识,因为与其他语言相比,MIPS中的工作并不多。 特别是,MIPS的重要性不如一般地理解asm重要,因此您对编译高级源代码时会发生的事情有所了解。了解一点汇编语言可以帮助您理解高级代码中的错误症状。 (例如,通过伪造的指针覆盖错误的数据,或者在数组外进行写入时修改堆栈上的其他局部变量)。 当您知道实际运行的是编译器生成的asm时,很容易理解如何使C或C ++快速运行。如果您还不太了解发生了什么,那么就不可能设计好的微基准来测试任何东西。 一旦您学习了MIPS组装,学习其他任何东西都将非常容易。所有其他主流CPU也是注册机,其工作方式基本相同:
每种体系结构都有其自身的不足之处,但是这些基础知识不会改变,这是您学习第一门汇编语言时真正学到的知识。 MIPS的主要缺点之一是分支延迟插槽(MARS和SPIM模拟器默认隐藏/禁用该功能) MIPS是一种非常不错的汇编语言,可供您学习。它是简单且正交的,并且很好地引导了流水线CPU的讨论,因为这正是它的设计目的。 (没有微码指令,并且非常容易解码的非常规则的机器代码格式。) 此外,还有不错的MIPS模拟器,MARS和SPIM,它们具有一个编辑器/汇编器/模拟器+调试器。还有一些做高级事情的"系统调用",例如从用户键盘读取一个整数到寄存器中。普通操作系统的系统调用仅允许您读取/写入字符,并且您必须调用库函数或编写自己的integer-> string函数。这是一个祝福和诅咒:如果您不认识到MARS系统调用基本上是具有特殊调用约定的库函数,则您可能不会意识到您可以编写自己的代码来执行某些操作,或者不是系统调用以这种方式正常工作。 不过,您可以在x86上学习所有这些知识,特别是如果您想在台式机/笔记本电脑上进行性能实验。 我认为这取决于您毕业后要朝CS的哪个领域射击。如果您想做的是计算机体系结构,那么我认为是。我认为,优秀的软件工程师会摒弃汇编语言的工作原理+绕过和转发以及最终如何优化代码以提高缓存性能的一般概念。 (空间位置/时间位置) |