MIPS - 重要吗?

时间:2008-09-19 02:58:31

标签: assembly mips

我的问题:MIPS编程语言是否有助于了解?

我是一名CS学生,正在参加一个专注于MIPS的集会课程。我很高兴用高级语言写作,但Mips让我有点失望。

MIPS是否应该真正关注并尝试完全掌握它?它将来会对我有帮助吗?

12 个答案:

答案 0 :(得分:34)

在某一时刻(90年代),MIPS衍生的处理器是世界上最畅销的处理器,使英特尔x86处理器的销售相形见绌。这是因为他们在嵌入式市场中的巨大影响力。我认为现在基于ARM的处理器可能已经接管了这个标题,但仍有大量的嵌入式系统使用MIPS。

即使您在职业生涯中从未在汇编程序中编写MIPS芯片,汇编语言也很有用。如果您对编译器将要发出的内容有所了解,它可以帮助您编写更高效的高级代码。它仍然使用的其他领域包括编译器(自己编写),设备驱动程序和多媒体编程(需要MMX或SSE的代码通常仍然在汇编程序中手工编写)。

每种CPU类型都有不同的指令集,但是有足够的共性,一旦你学会了一种汇编方言(在你的情况下是MIPS),其他的应该很容易拿起。

答案 1 :(得分:9)

理解计算机的低级别是有帮助的。例如,有开发人员会说CPU执行某种“新对象”指令。当然没有这样的指令,对象的管理发生了几层抽象。理解这种区别是很好的,因此您可以理解为什么对象创建可能很昂贵(或者不是),或者为什么受保护的地址空间可以使系统更加健壮。

当我在学校时,使用System / 360指令集在IBM大型机上讲授组装课程。在我职业生涯的任何一点上,我从未在这样的机器上工作过,但是知道CPU的外观是很有价值的。

现在我在使用MIPS处理器的嵌入式系统上工作。实际上,我花费了大量时间研究MIPS汇编列表,并为引导向量和同步原语编写了一些MIPS程序集。然而即使你从未真正在汇编中写任何东西,理解CPU操作仍然很有价值。

答案 2 :(得分:8)

大约两年前,我参加了一个mips的集会班。我发现自己用类似mips的asm语言编写GameBoy Advance游戏。不能说我很喜欢它。

虽然我认为了解汇编代码的内部工作原理(从高级到低级)是很好的。我觉得这让我更了解电脑的实际运作方式。此外,我无法抗拒在不久之后制作一些虚拟机,设计我自己的汇编语言:)

答案 3 :(得分:4)

通过“mips编程语言”,我认为你的意思是MIPS汇编语言。

学习汇编语言有助于了解它,它可以帮助您将您编写的代码映射到它在硬件上运行的方式。这可以帮助您解决更多低级问题,例如缓存未命中,分支,乱序执行以及您不会考虑编写高级代码的其他问题。

天气学习MIPS汇编对您有用取决于您计划遵循的职业。我个人认为x86 / x64(在PC上很流行,如果你在PC上编写C ++或C#就直接适用),PPC(越来越受欢迎,用于游戏机,也让你暴露给RISC)或ARM(用于很多嵌入式设备)比如手机)可能是更好的学习选择。

答案 4 :(得分:4)

MIPS是一种学习汇编的好语言。你有很多通用寄存器可以让你的程序编写不那么繁琐,而且它是一个RISC架构,因此你需要记忆的指令就少了。

很多人提到的一些主流用途是N64,Playstation 1,Playstation 2和PSP都使用了MIPS处理器。

答案 5 :(得分:3)

汇编语言总是值得学习。您可能没有被教授或看到编译器如何将高级语言代码转换为汇编代码,但我认为知识是了解汇编语言的最重要的好处。令人清醒的是,即使在最高优化级别,许多编译器效率也很低。 (大多数编译器会根据请求为您转储汇编代码,而不是继续使用机器代码和链接。)

那就是说,MIPS asm可能没用,因为现在几乎没有人使用MIPS。 (SGI曾经,但现在他们的机器都在x86 / IA-64芯片上。)如果你发现汇编语言很有吸引力并希望进一步在汇编中工作,那么学习ARM指令集。 ARM只比MIPS复杂一点,几乎所有的手机,智能手机和PDA现在都使用ARM芯片(由数十家制造商生产)。 iPod使用ARM,就像(我认为)Zune一样。

答案 6 :(得分:2)

Mips似乎又回归嵌入式系统。 @ [sk]给出了比我更好的总结,但我有一个最近的例子:

Broadcom似乎现在使用MIPS或ARM芯片制作Wifi卡(我不确定哪个,文档说一个,固件说另一个)。然而,在更新的芯片上,我们仍然在等待所有功能启用的Linux支持,所以出于这个原因,我很高兴你正在学习。 (现在给我写一些司机:P)

答案 7 :(得分:2)

在您的情况下,我认为MIPS被用作辅导辅助工具。这是一个计算机科学课,而不是给你代码猴工具,他们试图教你广泛的概念,这些概念在MIPS而不是x86这样的简单架构上更容易举例说明。

不要指望它进入“程序员的工具箱”。出于编写低级代码的实际目的,您最好在之后学习x86汇编语言。

答案 8 :(得分:1)

我去年研究过MIPS。 MIPS是一种重要的语言,但不幸的是,您可能永远不会使用MIPS。您将学习一些基础知识,但不要浪费时间尝试学习超出您需要的知识,因为与其他语言相比,MIPS中没有多少工作。

答案 9 :(得分:1)

以下是学习装配的3个理由。

  1. 某些小型程序在汇编时比在高级语言中写得更好。
  2. 可能需要调试或增强旧的汇编程序。
  3. 学习汇编程序将帮助您为处理器的功能和编译器的功能开发精确的模型。
  4. 第三个原因是迄今为止最重要的原因。了解您的硬件如何工作将极大地加深您对计算机科学的理解,从而帮助您成为更好的开发人员。

答案 10 :(得分:0)

我认为这取决于你想要在毕业后想要射击的CS区域。如果计算机架构是你想要做的,那么在我看来我说的是。我认为一位优秀的软件工程师会对汇编语言如何工作+绕过和转发以及最终如何针对缓存性能进行优化的一般概念进行讨论。 (空间位置/时间局部性)

答案 11 :(得分:0)

MIPS通常不如理解asm那么重要,因此您对编译高级源时会发生什么有所了解。了解一点asm可以帮助您理解高级代码中的错误症状。 (例如,当您在数组外部写入时,通过虚假指针覆盖错误的数据,或修改堆栈上的其他本地数据)。

当你知道实际运行的是编译器生成的asm时,显然理解如何使C或C ++快速运行会容易得多。如果你不是已经大部分都知道发生了什么,那么设计好的微基准测试是不可能的。

一旦您学会了MIPS汇编,就可以轻松学习其他任何。所有其他主流CPU也是基本相同的注册机器:

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

每个架构都有自己的额外皱纹,但这些基础知识不会发生变化,是您在学习第一种汇编语言时真正学到的东西。 MIPS的主要皱纹之一是the branch-delay slot(MARS和SPIM模拟器默认隐藏/禁用)

MIPS是一种非常好的汇编语言。它简单而正交,很好地引导了对流水线CPU的讨论,因为它是为它设计的。 (没有微编码指令,以及非常常规的机器码格式,易于解码。)

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

你可以在x86上学习所有这些,特别是如果你想在桌面/笔记本电脑上进行性能实验。