我已经为我以前的学校编写了x86架构,并且在我正在学习的新课程中需要了解MIPS。这两个世界的概念和架构有哪些主要差异?感谢
答案 0 :(得分:1)
我看了MIPS ASM已经有一段时间了,但是我记得......
根据您对x86汇编语言的熟悉程度,我不认为MIPS ASM太难以接受。显然,作为一个非常纯粹的RISC指令集,它比x86简单得多。您有一些数据移动指令(加载/存储),一些算术指令(加,减,乘,位移和屏蔽)和分支(非/条件跳转)。这些主题没有太多的装饰。
事实上,当您尝试使用MIPS并看到大量通用寄存器时,您可能会觉得有点被宠坏了。你知道x86如何与7-8个通用注册表斗争(取决于你是否计算ESP)?您在MIPS中拥有32个GP注册表。
您必须习惯的一件事是流水线操作,或者更确切地说是流水线操作的含义。如果一条指令执行加法,并且结果应该进入寄存器r5,则在下一条指令执行时,该和可能实际上不可用。在r5保持总和之前,它可能需要另一个周期或2(不记得具体细节)。所以你必须在你的代码中计划。另一个含义是分支指令不立即分支(再次,由于流水线操作,它可能需要一个周期或2)。因此,您需要确保在分支之后发生的指令不会以奇怪的方式搞乱程序状态(如果有疑问,请在分支后放置NO-OP)。
我一直发现学习任何ASM的最佳方法是将程序反汇编到ASM中并开始查找指令。为此,请下载并安装MIPS工具链(here's a great place to get up to date, cross-compiling toolchains for numerous architectures, including MIPS)。用它来编译一个“Hello World”C程序,以及一些基本的数学公式,然后在可执行文件上运行MIPS版本的'objdump -d'。从main()函数开始研究输出。了解C数学如何映射到MIPS ASM。
祝你好运!这并不是微不足道的,但是如果你已经拥有x86熟练程度,我认为你可以学习其他ASM集,而无需在该主题上学习一学期的课程。