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

haz*_*ziz 5 compiler-construction x86 assembly mips llvm

我应该学习哪种汇编语言作为我的第一种汇编语言?MIPS(更容易并经常用于教育目的),Intel x86(无所不在)或LLVM项目背后的可移植汇编语言?

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

old*_*mer 9

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

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

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

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