关于组装:MIPS-重要吗?

关于组装:MIPS-重要吗?

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也是注册机,其工作方式基本相同:

    • 有寄存器和内存
    • 包括指针在内的所有内容都只是存储器或寄存器中的位和字节,即整数。
    • 每个指令都是独立的,并根据其简单规则更新架构状态(寄存器值)。它只关心其输入(通常是寄存器,有时还包括内存)。没有魔术。
    • 除跳转/转移指令外,程序从地址增加的地址中的一条指令继续执行到下一条指令。
    • 编写程序/函数只是为机器构造一系列步骤,这些步骤将导致数据以所需的方式移动和处理。就像在算法中设计步骤
    • ASM是调试器真正发挥作用的地方:它可以向您显示机器的完整体系结构状态(因为寄存器数量有限),并向您显示当单步执行一条指令时哪些寄存器值发生了变化。

    每种体系结构都有其自身的不足之处,但是这些基础知识不会改变,这是您学习第一门汇编语言时真正学到的知识。 MIPS的主要缺点之一是分支延迟插槽(MARS和SPIM模拟器默认隐藏/禁用该功能)

    MIPS是一种非常不错的汇编语言,可供您学习。它是简单且正交的,并且很好地引导了流水线CPU的讨论,因为这正是它的设计目的。 (没有微码指令,并且非常容易解码的非常规则的机器代码格式。)

    此外,还有不错的MIPS模拟器,MARS和SPIM,它们具有一个编辑器/汇编器/模拟器+调试器。还有一些做高级事情的"系统调用",例如从用户键盘读取一个整数到寄存器中。普通操作系统的系统调用仅允许您读取/写入字符,并且您必须调用库函数或编写自己的integer-> string函数。这是一个祝福和诅咒:如果您不认识到MARS系统调用基本上是具有特殊调用约定的库函数,则您可能不会意识到您可以编写自己的代码来执行某些操作,或者不是系统调用以这种方式正常工作。

    不过,您可以在x86上学习所有这些知识,特别是如果您想在台式机/笔记本电脑上进行性能实验。


    我认为这取决于您毕业后要朝CS的哪个领域射击。如果您想做的是计算机体系结构,那么我认为是。我认为,优秀的软件工程师会摒弃汇编语言的工作原理+绕过和转发以及最终如何优化代码以提高缓存性能的一般概念。 (空间位置/时间位置)


    推荐阅读