我觉得处理32位PowerPC汇编代码非常舒服,但在尝试理解x86代码时我完全迷失了。 ARM,MIPS,Sparc等其他常见架构是否比x86指令集更容易?
答案 0 :(得分:10)
嗯,大多数RISC非常相似,所以如果你很了解PPC,那么过渡到ARM,MIPS或SPARC都会很容易。我实际上先学习SPARC,然后在几个小时内就能获得MIPS和PPC。
让x86如此混乱的事情并不是它的汇编语言,而是处理器的设计。人们倾向于挂断电话:
push
和pop
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)
我不打算为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在这一点上是相当早的时候。但是,既然它是开放的,它可以相当快地增长。