引言
龙架构(LoongArch,后文简称LA)指令集包含三个主要分支,即64位分支(LoongArch64,后文简称LA64)、32位分支(LoongArch32,后文简称LA32)和32位精简版分支(LoongArch32 Reduced,后文简称LA32R)。

其中LA32R定位为用于教学科研,具有小而精的设计特点。其用户态整数指令仅有50余条,在CPU硬件不实现浮点指令的情况下也能运行各种软件,同时核心态定义了特权等级、例外与中断和存储管理三部分内容,支持操作系统运行,在实现了存储管理中的TLB MMU情况下还可运行Linux操作系统。
目前各上游社区和龙芯开源社区上的工作基本上都是针对LA64的,同时各类龙架构相关的教材、参考书籍也基本上都是围绕LA64进行介绍的。尽管说LA32R和LA64的设计风格是一致的,指令码是相同的,但是让初学者仅依据LA32R指令集手册并参考LA64相关学习资料来摸索着掌握LA32R,确实存在一定的难度且发生理解偏差。因此我们萌生了编写一个LA32R指令集学习指导手册的想法,希望能给初学者提供一些便利。
整本手册在内容安排上还是偏向软件开发者视角多一些。如果您的需求更多偏向于CPU硬件设计开发,那么可以参考《CPU设计实战:LoongArch版》这本书。本手册中我们试图从软件开发者视角出发,针对指令集中的技术内容“为什么这样设计”、“软硬件如何协同”谈一些我们的理解。同时为了控制整本手册的篇幅,在行文的详略尺度方面,我们会侧重于指令架构相关的内容,而指令架构无关的本领域公共基础知识,如ELF文件格式、链接与装载的共性概念、GDB调试命令、Linux内核中公共代码的处理流程等,我们会提及但不会展开。相关知识建议读者们自行查阅资料。我们也会在讲述到相关内容时推荐一些参考材料供读者进一步阅读。
我们希望本手册的读者事先已了解过至少一个指令集,而且最好是RISC型的指令集。如果没有的话,强烈建议通过学习一些经典教材来建立这方面的认识。推荐《Computer Organization and Design: The Hardware Software Interface》这本教材。第4版或第5版就可以,MIPS版、ARMv8版或者RISC-V版也都可以。指令集的基础共性知识已很成熟,不同指令集间都是相通的。这本教材讲授的内容很丰富,时间有限的话可以只看其中介绍指令集的章节。
此外还建议读者阅读本手册过程中,多参看LA32R的指令集手册《龙芯架构32位精简版参考手册》。
本手册主要包括以下两方面的内容:
- LA32R的用户态整型指令应用讲解;
- LA32R的汇编编程基本知识;
以上第1方面将尽可能从读者较为熟悉的C语言的功能切入,关联到对应的指令,除了介绍LA32R指令集手册中定义的指令(本手册中我们称之为“真实指令”),也会介绍汇编器支持的伪指令。第2方面对于汇编编程进行初步介绍,希望能够帮助初学者达到看得懂汇编程序,能写一些简单的汇编程序的状态。