从MIPS切换到x86汇编时应该知道什么?

mmc*_*ole 14 x86 assembly mips

在学校,我们已经用MIPS汇编语言编程了一段时间.我有兴趣深入研究x86程序集,我听说这有点难度(甚至我的MIPS教科书都说这个).

在进入x86世界之前,我应该知道哪些核心信息是MIPS程序员?

Cod*_*ous 17

要记住的最重要的事情是:

  • 很少有通用寄存器,而您拥有的寄存器不是纯GP - 许多指令要求您将某些寄存器用于特定目的.
  • x86指令是双操作码形式而不是三操作码,这可以使某些操作更复杂.也就是说,不是添加r0,r1,r2(r0 = r1 + r2),而是添加eax,ebx(eax + = ebx).
  • 受保护模式中的段(DOS之外的所有32位代码,有效)使您的内存寻址方案非常不明显,这可能会让您在开始时遇到麻烦.
  • 您将一直查找由指令设置/清除的标志.学会爱上英特尔手册.
  • 编辑,有一件事我忘了:使用子寄存器(例如,访问eax寄存器的低16位的高8位)可能会使对寄存器的跟踪操作变得非常困难.要小心并大声评论,直到你弄清楚.

除此之外,x86非常简单.当你学会滥用'lea'和'test'等指令时,你会学会喜欢它.另外,protip:英特尔将免费向您发送指令集手册的副本,甚至不必支付运费.查看他们的网站上的履行电子邮件,并通过SKU索取书籍.

  • 我发现考古学最能理解 x86 指令集——如果你已经看到 8080 有什么,它如何模糊地告知 8088 的设计,最后 386 如何在上面添加东西,这一切都是有道理的。否则规则似乎有点武断。 (2认同)

Gre*_*ill 6

与大多数其他架构相比,x86具有非常有限的可用寄存器集.这并没有真正使汇编语言更难学,但有时会使实践中的代码更难实现.

此外,由于x86强大的向后兼容性历史,指令集并不是非常对称的(肯定是RISC之前的版本),并且规则和角落情况可能有很多例外需要注意.

  • @BobbyShaftoe,你是汇编程序员吗?MIPS有32个通用寄存器,据我所知,x86有8个. (3认同)