LA32R 指令集学习指导手册
龙架构(LoongArch,后文简称LA)指令集包含三个主要分支,即64位分支(LoongArch64,后文简称LA64)、32位分支(LoongArch32,后文简称LA32)和32位精简版分支(LoongArch32 Reduced,后文简称LA32R)。其中LA32R定位为用于教学科研,具有小而精的设计特点。其用户态整数指令仅有50余条,在CPU硬件不实现浮点指令的情况下也能运行各种软件,同时核心态定义了特权等级、例外与中断和存储管理三部分内容,支持操作系统运行,在实现了存储管理中的TLB MMU情况下还可运行Linux操作系统。
《LA32R 指令集学习指导手册》说明
编写缘起
目前各上游社区和龙芯开源社区上的工作基本上都是针对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用户态整型指令:机器语言与汇编语言表达、算术逻辑移位类指令、数据传输类指令、分支跳转类指令、用LL/SC指令构建基本同步原语、其它用户态指令
- LA32R汇编编程简介:LA32R汇编编程学习环境介绍、常用汇编器指示、LA32R汇编器支持的伪指令汇总、寄存器使用约定、函数调用约定、进程虚拟地址空间布局规范、栈帧布局、汇编编程示例
