前言
掌握好一类汇编语言的使用需要涉及多方面的知识,例如基本的信息表示和处理、处理器的体系架构、存储器的层次结构、程序的生命周期和编译过程,而不仅限于汇编语言本身。对于如此多的知识点,一本书很难做到面面俱到。本书的重点是介绍龙芯汇编语言的使用,围绕如何使用龙芯汇编语言编写程序展开讲解,并扩展介绍部分处理器体系架构、程序编译过程、程序调试工具等相关知识。对于汇编语言涉及的信息表示和处理,例如最基本的二进制和十六进制表示、进制间的转换、基本数学运算、逻辑运算等,本书没有做专门的讲解。因此,本书适合对计算机基础理论有一定了解的读者。对于缺少相关知识的读者,我建议通过其他课程或教材进行学习。
本书第01~04章重点介绍汇编语言的概念和龙芯基础指令集LoongArch,具体包括汇编语言的概念及其使用场景、LoongArch指令特性、C语言到LoongArch指令的编译过程、LoongArch基础整数指令集和LoongArch基础浮点数指令集。龙芯官方发布的龙芯架构参考手册已经对每一条指令的使用都做了单独的功能解释。本书在此基础上,聚焦指令集中整数指令集和浮点数指令集的使用,而且在每一章都穿插了很多示例,以此希望读者可以快速入门龙芯汇编语言。
本书第05~08章重点介绍LoongArch ABI和汇编程序的编写,具体包括整型寄存器和浮点寄存器的使用约定、函数调用约定和栈布局、目标文件的格式、汇编源程序和内嵌汇编的基本语法和编写示例。如果读者希望能够无障碍地阅读汇编程序,甚至能独立编写正确且健壮的汇编程序,那么这部分的知识是必须理解和掌握的。因为这部分内容的工程性很强,所以希望读者在学习此部分的过程中多动手实践,从而更深刻地理解相关内容。
本书第09~10章重点介绍汇编程序的调试手段和程序的性能优化,具体包括程序功能调试工具GDB、程序性能分析工具perf的使用、常见汇编性能优化手段。这部分对上述调试工具的使用仅是概要性的介绍,因为每一类工具的具体使用命令参数非常多,在平时工作中我们也很难全部用到。读者在实际工作如有需要,我建议多多使用工具的帮助文档进行了解。汇编程序的性能优化可以说是涉及的知识面最广、难度最大的一部分。本书尽量对这部分涉及的相关体系架构知识进行简单直白的介绍,并对常见的优化手段、向量指令、指令融合、指令调度、循环展开等进行讲解。
最后,建议读者在阅读本书或实际工作中,常备龙芯官方发布的龙芯架构参考手册,以对使用的每条汇编指令有清晰的认识。如果读者希望对LoongArch指令集有更深入的了解,我推荐阅读《深入理解计算机系统》以及龙芯团队编写的《计算机体系结构 第2版》和《计算机体系结构基础 第3版》。
孙国云
2022年10月