MIPS vs Intel x86 vs LLVM作为第一个学习汇编语言?

时间:2012-05-17 00:43:51

标签: assembly compiler-construction x86 llvm mips

我应该学习哪种汇编语言作为我的第一种汇编语言? MIPS(更容易并经常用于教育目的),英特尔x86(无所不在)或LLVM project背后的便携式汇编语言?

LLVM程序集的一个优点是我可能会尝试将它用作学习练习,以便在将来使用LLVM作为后端编写一个简单的编译器。

3 个答案:

答案 0 :(得分:9)

以上都不是。 x86是您想要学习的最后一种汇编语言。 MIPS由于多种原因而具有相当的教育性,但它不是一个好的第一指令集,主要是因为它有点不标准,不使用标志,有分支推迟插槽,你必须忘记一些东西移动到另一个处理器。 MIPS可能是第二或第三。

LLVM不是真正的汇编,而是字节码。我有一个我为此创建的, lsasim ,在GitHub上搜索它。即使你实际上没有运行这些例子,也要给它读半小时或更少。它应该为许多其他指令集奠定基础。 Thumb(没有Thumb-2扩展名)很好。 MSP430非常好,LatticeMico8非常好。 AVR并不错。 ARM非常好。熟悉三对,然后是MIPS或DLX。 x86应该是最后一个,如果你甚至打扰。如果你烦心的话,先学习8088/86然后按照自己的方式走向现在。

随着每个指令集变得更容易,第三或第四,您可以在编写时学习它,您只需在快速参考卡上查找说明,偶尔从完整手册中获取详细信息,但大部分只是爆炸汇编代码。至少对于理智的人来说,有一些你必须做一些研究才能理解所有的规则。您不希望在硬件上运行以便学习这些内容,首先找到模拟器,如果需要,可以稍后找到硬件。

你可以使用任何东西作为前端的后端(实际上是中间)。编译器的前端应解析为内部代码(不是汇编语言),然后从内部代码解析为目标特定的后端(汇编语言或机器代码)。 LLVM中间版已经发布,并且可以以这种方式实际使用它,其他编译器中间/内部代码最好被转储用于调试,但实际上并没有真正使用。我不会在编译器中使用汇编教育。如果你想编写一个后端,请从LLVM或其他现有的,可重新定位的编译器开始,然后编写一个后端(vbcc编译器是第一个编译器后端的好选择,或者获取LCC书籍,或者一个超级简单的:Small-C)。如果你想编写一个前端,对于一些新的或现有的语言,那么LLVM可能不是一个糟糕的内部代码,后端可以作为免费赠品。

答案 1 :(得分:3)

我从8085微处理器组件开始,然后转到8051微控制器。

然后我加入了8038680486个微处理器。

对于学习,我认为从最简单和最基本的芯片开始是有意义的。

答案 2 :(得分:0)

8085是开始时的理想处理器。大多数指令集的基本原理几乎相同。一旦完成8085,像AVR指令集这样的东西可能会很有趣(主要是因为8085基于von-neumann架构而AVR具有哈佛架构。多种多样)。

LLVM ..我不会建议你学习它的汇编语言。首先,该语言在假设的体系结构之上工作,该体系结构假设无限寄存器并且期望​​组件的SSA格式。注意:LLVM非常适合编写编译器,但开始学习汇编级别的东西绝对不好。

完整的x86指令集有点太复杂,不值得任何人感兴趣。我相信你会很难看到集合中的所有指令。

总结:去8085