我的问题:了解 MIPS 编程语言有用吗?
我是一名计算机科学专业的学生,正在上一门专注于 MIPS 的组装课程。我很擅长用高级语言写作,但 Mips 让我有点失望。
MIPS 是我真正应该关注并尝试完全掌握的东西吗?将来会对我有帮助吗?
在某一时刻(在 90 年代),源自 MIPS 的处理器是世界上最畅销的处理器,使 Intel x86 处理器的销量相形见绌。这是因为它们在嵌入式市场中占有巨大的份额。我认为现在基于 ARM 的处理器可能已经取代了这个头衔,但是仍然有大量的嵌入式系统使用 MIPS。
即使您在职业生涯中从未使用汇编程序编写 MIPS 芯片,学习汇编语言也很有用。如果您对编译器将要发出的内容有所了解,它可以帮助您编写更高效的高级代码。仍在使用它的其他领域包括编译器(编写您自己的)、设备驱动程序和多媒体编程(需要 MMX 或 SSE 的代码通常仍然在汇编器中手动编写)。
每种 CPU 类型都有不同的指令集,但有足够的共性,一旦你学习了一种汇编语言(在你的例子中是 MIPS),其他的应该很容易学会。
了解计算机的极低级别很有帮助。例如,有些开发人员会说 CPU 执行某种“新对象”指令。当然没有这样的指令,对象的管理发生在更高的几个抽象层。最好理解这种区别,这样您就可以理解为什么创建对象可能很昂贵(或不昂贵)或者为什么受保护的地址空间可以使系统更加健壮。
当我在学校时,组装课程是在 IBM 大型机上使用 System/360 指令集教授的。在我的职业生涯中,我从来没有接近过在这样的机器上工作,但是了解 CPU 的外观是很有价值的。
现在我在使用 MIPS 处理器的嵌入式系统上工作。实际上,我花了相当多的时间研究 MIPS 程序集列表,并为引导向量和同步原语编写了一些 MIPS 程序集。然而,即使你从来没有真正用汇编写过任何东西,理解 CPU 操作仍然很有价值。
大约两年前,我参加了一个组装班,做 mips。我发现自己在用类似 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 asm 可能没用,因为现在几乎没有人使用 MIPS。(SGI 过去是,但现在他们的机器都在 x86/IA-64 芯片上。)如果您发现汇编语言很有吸引力并且想进一步使用汇编语言工作,请学习 ARM 指令集。ARM 只比 MIPS 复杂一点,现在几乎所有的手机、智能手机和 PDA 都使用 ARM 芯片(由数十家制造商制造)。iPod 使用 ARM,(我认为)Zune 也是如此。
在您的情况下,我认为 MIPS 被用作辅导辅助工具。这是一门计算机科学课程,而不是给你代码猴子工具,他们试图教你广泛的概念,这些概念在 MIPS 等更简单的架构上比在 x86 上更容易举例说明。
不要指望它会进入你的“程序员工具箱”。出于编写低级代码的实际目的,您最好在之后学习 x86 汇编语言。
Mips 似乎在嵌入式系统中回归。@[sk] 给出了比我更好的总结,但我有一个最近的例子:
Broadcom 这些天似乎在制造带有 MIPS 或 ARM 芯片的 Wifi 卡(我不确定是哪一个,文档说一个,固件说另一个)。但是,在更新的芯片上,我们仍在等待启用所有功能的工作 linux 支持,因此,我很高兴您正在学习。(现在给我写一些驱动程序:P)
我去年学习了MIPS。MIPS 是一种重要的语言,但不幸的是,您可能永远不会使用 MIPS。您将学习一些基础知识,但不要浪费时间尝试学习比您需要的更多的东西,因为与其他语言相比,MIPS 中的工作并不多。
以下是您学习装配的 3 个充分理由。
第三个原因是迄今为止最重要的。了解您的硬件是如何工作的将大大加深您对计算机科学的理解,进而帮助您成为更好的开发人员。
我认为这取决于您毕业后想在CS中的哪个领域拍摄。如果计算机体系结构是您想要做的,那么我认为我说的是。我认为一个好的软件工程师会放弃汇编语言如何工作+绕过和转发的一般概念,最后是如何优化你的代码以提高缓存性能。(空间局部性/时间局部性)
特别是 MIPS 不如一般理解 asm 重要,因此您对编译高级源代码时会发生什么有所了解。了解一点 asm 可以帮助您理解高级代码中错误的症状。(例如,通过伪造的指针覆盖错误的数据,或者当您在数组外部写入时修改堆栈上的其他局部变量)。
显然,当您知道实际运行的是编译器生成的 asm 时,理解如何使 C 或 C++ 快速运行会容易得多。如果您还不知道发生了什么,就不可能设计出好的微基准来测试任何东西。
一旦你学会了 MIPS 汇编,学习任何其他的 . 所有其他主流 CPU 也是寄存器机器,它们的工作方式基本相同:
每个架构都有其额外的皱纹,但这些基础知识不会改变,并且是您在学习第一门汇编语言时真正学到的东西。MIPS 的主要问题之一是分支延迟槽(MARS 和 SPIM 模拟器默认隐藏/禁用)
MIPS 是一种非常好学的汇编语言。它简单且正交,很好地引发了对流水线 CPU 的讨论,因为这就是它的设计目的。(没有微码指令,非常规则的机器码格式,很容易解码。)
此外,还有很好的 MIPS 模拟器,MARS 和 SPIM,它们将编辑器/汇编器/模拟器+调试器合二为一。还有一些“系统调用”,它们执行高级操作,例如将用户键盘上的整数读入寄存器。普通操作系统有系统调用,只允许你读/写字符,你必须调用库函数或编写你自己的整数->字符串函数。这是福也是祸:如果您没有意识到 MARS 系统调用基本上是具有特殊调用约定的库函数,您可能不会意识到您可以编写自己的代码来完成其中的一些事情,或者它不是系统调用以这种方式工作的“正常”。
不过,您可以在 x86 上学习所有这些,特别是如果您想在台式机/笔记本电脑上进行性能实验。