x86汇编程序员转换为MIPS,我应该知道什么?

x86汇编程序员转换为MIPS,我应该知道什么?,x86,mips,assembly,X86,Mips,Assembly,我在上一所学校用x86体系结构编程,在我正在学习的一门新课程中,我需要MIPS知识。这两个世界在概念和架构上的主要区别是什么?谢谢我已经有一段时间没有看MIPS ASM了,但从我的记忆中 根据您对x86汇编语言的了解程度,我认为学习MIPS ASM不会太困难。显然,作为一个非常纯的RISC指令集,它比x86简单得多。您有一些数据移动指令(加载/存储)、一些算术指令(加法、减法、乘法、位移位和掩蔽)和分支(无条件跳转)。在这些主题上没有太多的修饰 事实上,当您尝试MIPS并看到您可以使用的数量惊人

我在上一所学校用x86体系结构编程,在我正在学习的一门新课程中,我需要MIPS知识。这两个世界在概念和架构上的主要区别是什么?谢谢

我已经有一段时间没有看MIPS ASM了,但从我的记忆中

根据您对x86汇编语言的了解程度,我认为学习MIPS ASM不会太困难。显然,作为一个非常纯的RISC指令集,它比x86简单得多。您有一些数据移动指令(加载/存储)、一些算术指令(加法、减法、乘法、位移位和掩蔽)和分支(无条件跳转)。在这些主题上没有太多的修饰

事实上,当您尝试MIPS并看到您可以使用的数量惊人的通用寄存器时,您可能会感到有点被宠坏了。您知道x86与7-8个通用reg之间的矛盾(取决于您是否计算ESP)?您在MIPS中有32个GP注册表

您必须习惯的一件事是管道,或者更确切地说是管道的含义。如果一条指令执行加法,并且结果应该进入寄存器r5,那么在下一条指令执行时,总和可能实际上不可用。它可能需要另一个循环或2个循环(不记得具体细节),然后r5才能保持总和。因此,您必须在代码中对此进行规划。另一个含义是分支指令不会立即分支(同样,由于流水线,它可能需要一个或两个周期)。因此,您需要确保恰好位于分支之后的指令不会以奇怪的方式扰乱程序状态(如果有疑问,请在分支之后放置NO-OP)

我总是发现学习任何ASM的最好方法是将程序分解成ASM并开始查找指令。为此,请下载并安装MIPS工具链()。使用它编译一个“Hello World”C程序,以及一些基本的数学公式,然后在可执行文件上运行MIPS版本的“objdump-d”。从main()函数开始研究输出。了解C数学如何映射到MIPS ASM


祝你好运!这并不简单,但如果您已经精通x86,我认为您可能可以学习其他ASM集,而不必参加一学期的课程。

如果您不知道,那么您确实应该先参加MIPS课程。所以,答案不是教育的替代品,我们不能把一个学期塞进一个答案。