哪种32位/ 64位CPU架构具有最简单的指令集?

时间:2009-09-05 06:35:47

标签: assembly powerpc

我觉得处理32位PowerPC汇编代码非常舒服,但在尝试理解x86代码时我完全迷失了。 ARM,MIPS,Sparc等其他常见架构是否比x86指令集更容易?

9 个答案:

答案 0 :(得分:10)

嗯,大多数RISC非常相似,所以如果你很了解PPC,那么过渡到ARM,MIPS或SPARC都会很容易。我实际上先学习SPARC,然后在几个小时内就能获得MIPS和PPC。

让x86如此混乱的事情并不是它的汇编语言,而是处理器的设计。人们倾向于挂断电话:

  • 分段存储器寻址 - 所有这些ds,cs,es寄存器:它们是什么意思,它们如何与索引寄存器组合以形成完全解析的存储器地址?实际上有三种不同的方式,所以你正在学习一堆不同的模式。
  • 非正交指令集 - 某些指令仅适用于某些寄存器,其他指令具有重叠的含义,有些情况看起来应该很快但速度很慢等等。
  • 寄存器存储器架构 - x86设计为具有少量(命名)寄存器,因此每个操作码通常具有一个作为寄存器的参数和另一个作为存储器地址的参数。这与PPC的加载存储库不同,后者的内存操作是显式的。由于堆栈指针往往会反弹很多,这可能很难找出真正使用的变量!
  • 痉挛堆栈指针 - 大多数PPC调用约定你在进入函数时只需一次移动堆栈指针,然后在返回时移动一次,通常x86代码将是pushpop ping整个地方。你最终计算推送和弹出以找出你的堆栈指针所在的位置,这总是让我的头受伤。

所以,为了适应x86,分而治之:选择其中一个点,了解它是如何工作的,然后继续下一个。首先学习调用约定可能有所帮助,因为这将使引用堆栈指针的所有其他指令更有意义。

答案 1 :(得分:4)

如果没有“简单”的定义我很确定大多数人会同意x86指令集对于主流流行CPU来说是最可怕的。

如果要编写一个在设计指令集时应遵循的良好或最佳实践列表,x86将是所有对立面的一个很好的例子。

  • 不正交,并非所有寄存器的功能都相同。
  • 数量有限的专用寄存器 - 导致堆栈操作过多。
  • 令人讨厌的前缀运营商。
  • ...

答案 2 :(得分:3)

我想你应该定义“简单”对你意味着什么。

我宁愿用正交性来判断机器语言(意思是:指令的任何部分都可以用替代品替换,并且仍然给出有效的指令)

  • 命令(add,sub,mul,div)

  • 参数(注册,记忆,文字)

  • 参数大小(字节,字,长,浮动)

  • 参数的一致顺序(来源x来源 - > dest,或dest< - 来源x来源)

指令的能力/复杂性

  • 可用的寄存器数量

  • 索引编址

  • 隐式/显式参数

和其他人。

与其他架构相比,您可能会举例说明您认为x86的哪些部分“不容易”,以及原因。

答案 3 :(得分:3)

ARM,这是从编写汇编程序最后阶段的人的角度出发的。这是帮助您入门的Architecture Reference Manual

编辑:出于某种原因,我认为你的意思是机器代码格式。 X86组装很容易 - 将它组装到机器代码上......不是那么多。

答案 4 :(得分:3)

我认为您遇到的现象是第二种汇编语言(再次)难以学习(我认为当您开始时学习PPC也很困难,当时)。您熟悉的新架构越来越容易 - 在某些时候,您将享受找到您从未见过的一些架构(错误)功能。

第二种架构的问题在于,您还不清楚什么是通用实践,以及第一种架构的具体内容。因此,您希望在x86上完成某些事情的方式与在PPC上完成的方式相同,而实际上x86有自己的(可能更优雅)的方式。

答案 5 :(得分:3)

我学习了ARM程序集,发现它非常简单和强大。我不认为操纵操作数和这些事情令人困惑。至少是因为我首先学习了ARM asm然后我读了一些关于x86 asm的内容。

我发现x86上缺少的大多数功能都是ARM上的强项,例如多个寄存器存储/读取和条件执行。 Pl.us,我发现有这么多寄存器非常有帮助。

我认为这是通常的'宗教战争'RISC vs CISC,ARM vs x86。恕我直言是太主观,不是一个普遍的原则。例如,Martinv.Löwis发现ARM不优雅,而我发现它比x86更优雅。

我还试着用微控制器asm(德州仪器公司,不记得确切的型号名称)并发现它非常不优雅,而其他许多人可能会发现它是“完美的”asm。

答案 6 :(得分:2)

使用ARM。在作为软件工程师20年后,我每天为各种平台编写汇编程序,但从不需要编写x86汇编程序。部分是因为它太可怕了,部分是因为我永远不会嵌入x86所以我只运行x86和C的台式机/笔记本电脑或者你想在linux / windows上运行的任何东西都足够低。

答案 7 :(得分:2)

魔鬼的倡导者捍卫x86架构

我不打算为MS x86 assembler itself, but see here辩护我的评论。 (您可能希望使用gnu,可能通过Cygwin。)当然缺少寄存器,大多数寄存器的特殊用途性质,以及整体的奇怪,扭曲,非正交组织事情似乎代表了经典的不要这样做的例子。哦,等等,那些史无前例的复杂功能,没有人想要或者曾经真正使用过?你知道,分割单位?

关于学习的难度,我认为编写x86程序集是非常有趣的,尽管我无法完全理解为什么会这样。没有指令集架构真的那么复杂,所以我认为你能够用相当小的努力来理解x86,虽然我同意它肯定比RISC ISA有更多的元素。但它是有趣的,一些非常细分的寄存器,一些其他特殊用途的寄存器,以及许多指令格式,但大多使用相同的1.5地址格式。

回到辩护:

缺乏注册 :这最终无关紧要。即使RISC架构最终也会转到 register renaming ,尽管它们仍然需要更多的架构寄存器,但它们仍然需要更多的性能。所以x86可能更好,因为每个人都有数以万计的自动重命名,但x86只需要保存少量的arch寄存器。

在复杂的ISA上 :英特尔总是处理这个问题,首先是使用强力卓越的流程技术(286当时相当快),今天通过翻译: RAM中的x86操作码被转码为 micro-ops ,因为它们被读入缓存,从而将CPU核心与x86隔离!今天,x86是一种“指令压缩”方案,只是一种在CPU读取程序代码时被解开的编码。他们分裂指示的某些东西,有时它们会连续组合,有时他们只是翻译它们。

答案 8 :(得分:0)

值得一看RISC-V

它是一个开源指令集,旨在易于实现,对现实世界的硬件非常有用。

它的设计是模块化和可扩展的,核心'指令集只处理浮点数是整数的整数。

它支持32位,64位甚至128位指令。还有一个16位'压缩'变体(虽然目前正在开发中)。默认情况下,您可以获得32个寄存器。

以下是specs

还有不错的软件支持。例如Linux,GCC,qemu。

目前,各种供应商正在进行多项实施,并且正在寻求Google, HP and Oracle的支持。有芯片和FPGA的开源设计。

当然,如果你从职业生涯的角度来看,RISC-V在这一点上是相当早的时候。但是,既然它是开放的,它可以相当快地增长。