assembly - MIPS vs Intel x86 vs LLVM是第一种要学习的汇编语言?

标签 assembly compiler-construction x86 llvm mips

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

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

最佳答案

以上都不是。 x86是您要学习的最后一种汇编语言。 MIPS出于很多原因是很有教育意义的,但是它不是一个好的第一条指令集,主要是因为它有点不标准,不使用标志,具有分支延迟槽,您必须学习一些东西才能移到另一个处理器。 MIPS可能排名第二或第三。

LLVM并不是真正的汇编程序,它是一个字节码。我为此创建了一个文件lsasim,可在GitHub上搜索它。即使您实际上没有运行示例,也请花半个小时或更短的时间阅读示例。它应该为许多其他指令集奠定基础。 Thumb(无Thumb-2扩展名)是很好的。 MSP430真的很好,LatticeMico8很好。 AVR不错。 ARM很好。适应三三两两,然后选择MIPS或DLX。如果您不介意的话,x86应该是最后一个。如果您不愿意,请先学习8088/86,然后朝着现在的方向努力。

每套指令集变得更容易了,到了第三或第四,您就可以在编写时学习它,您只需在快速引用卡上查找指令,偶尔就可以从完整的手册中获得详细信息,但大多只是敲出汇编代码。至少对于那些理智的人,您需要做一些研究才能理解所有规则。您不想在硬件上运行以学习这些知识,而是先找到模拟器,然后再找到硬件(如果需要)。

您可以将任何东西用作后端(实际上是中间)的后端。编译器的前端应解析为内部代码(不是汇编语言),然后从内部代码解析为目标特定的后端(汇编语言或机器代码)。 LLVM中间件已发布,可以以这种方式实际使用它,其他编译器中间/内部代码充其量只能用于调试,但实际上并不能按原样使用。我不会在汇编中间使用汇编语言。如果您想编写一个后端,请从LLVM或其他现有的可重定向目标的编译器开始,然后编写一个后端(vbcc编译器是第一个编译器后端的不错选择,或者获取LCC书籍,也可以是一本 super 简单的书) :Small-C)。如果您想为某种新语言或现有语言编写前端,那么LLVM可能不是一个不好的内部代码,后端是免费的。

关于assembly - MIPS vs Intel x86 vs LLVM是第一种要学习的汇编语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10628558/

相关文章:

javascript - 为什么 ARM 芯片有一条指令名称中带有 Javascript 的指令(FJCVTZS)?

assembly - 在哪里可以找到8080 x86汇编程序转换工具?

c++ - 使用 GCC 程序集向左/向右旋转移动次数

compiler-construction - 自学编译器类(class)/好的入门编译器书籍?

c++ - 编译器对循环进行向量化

compiler-construction - 为运行字节码编写 VM 的源代码

linux - 为什么 x86 的引导加载程序首先使用 16 位代码?

c++ - 从 uint8_t 数组修改数据很慢?

c - 在 NASM 中实现 strstr 的问题

assembly - 8086程序中.model small的含义是什么?