我已经为我以前的学校使用 x86 架构编程,并且在我正在上的一个需要 MIPS 知识的新课程中进行编程。这两个世界在概念和架构上的主要区别是什么?谢谢
1 回答
自从我查看 MIPS ASM 以来已经有一段时间了,但据我回忆......
根据您对 x86 汇编语言的了解程度,我认为 MIPS ASM 不会太难学。显然,作为一个非常纯粹的 RISC 指令集,它比 x86 简单得多。您有一些数据移动指令(加载/存储)、一些算术指令(加、减、乘、位移位和屏蔽)和分支(无条件跳转)。这些主题没有太多的点缀。
事实上,当您尝试 MIPS 并看到可供您使用的大量通用寄存器时,您可能会觉得有点被宠坏了。你知道 x86 是如何与 7-8 个通用 regs 斗争的吗(取决于你是否计算 ESP)?您在 MIPS 中有 32 个 GP regs。
您必须习惯的一件事是流水线,或者更确切地说是流水线的含义。如果一条指令执行加法,并且结果应该进入寄存器 r5,那么到下一条指令执行时,总和实际上可能不可用。在 r5 保持总和之前,它可能需要另一个周期或 2 个(不记得具体细节)。因此,您必须在代码中对此进行计划。另一个含义是分支指令不会立即分支(同样,由于流水线,它可能需要一个或 2 个周期)。因此,您需要确保发生在分支之后的指令不会以一种奇怪的方式弄乱程序状态(如果有疑问,请在分支之后放置一个 NO-OP)。
我一直发现学习任何 ASM 的最佳方法是将程序反汇编成 ASM 并开始查找指令。为此,请下载并安装 MIPS 工具链(这里是获取最新的交叉编译工具链的好地方,适用于包括 MIPS 在内的众多架构)。用它来编译一个“Hello World”C 程序,以及一些基本的数学公式,然后在可执行文件上运行 MIPS 版本的 'objdump -d'。从 main() 函数开始研究输出。了解 C 数学如何映射到 MIPS ASM。
祝你好运!这不是微不足道的,但是如果您已经精通 x86,我认为您可能可以学习其他 ASM 集,而无需参加为期一学期的主题课程。