前言
欢迎!
RISC-V自2010年诞生以来迅速发展并普及。我们认为一本精巧的程序员指南将有助于推动它的发展,还能让初学者理解RISC-V指令集具有吸引力的原因,并了解它与传统指令集架构(ISA)的不同之处。
本书受到其他指令集架构书籍的启发,但由于RISC-V自身非常简洁,我们希望能写得比500多页的优秀书籍(如See MIPS Run)更精巧。我们把篇幅控制在这些优秀书籍的1/3,至少在这个意义上我们成功了。实际上,书中前10章介绍了模块化RISC-V指令集的每个组成部分,总共只用了136页,尽管平均每页插入了一张图片(共97张)。
阐释指令集设计原则后,我们展示了RISC-V架构师如何从过去40年的指令集中吸取经验教训,取其精华,去其糟粕。要评价一款ISA,既要究其所取,也要究其所舍。
随后,我们通过一系列章节介绍这个模块化架构的每个组成部分。每章都包含一个RISC-V汇编语言程序,以展示该章所述指令的用法,从而帮助汇编语言程序员学习RISC-V代码。有时,我们还会用ARM、MIPS和x86列出同一个程序的代码,从而突出RISC-V的简洁性,以及在成本、功耗、性能之间权衡的优势。
为提升本书的趣味性,我们在页边加入约50段花絮,用于介绍关于正文内容的有趣评论。我们还充分利用页边的空间,在页边加入约110张图片,用于强调好的ISA设计示例。最后,我们为愿意钻研的读者在全书中加入约30段补充说明。如果你对某个主题感兴趣,可以深入研读这些可选部分。略过此部分不会影响你对书中其他内容的理解,所以,如果你不感兴趣,则可以放心跳过它们。我们为计算机体系结构爱好者援引约30篇论文和书籍,它们能够开阔你的视野。在编写本书的过程中,我们也从中获益匪浅!
为什么这么多名言引用
我们认为名言引用能提升本书的趣味性,因此在全书中穿插了25段名言。这些名言是向初学者传递先驱智慧的一种有效方式,同时也有助于为好的ISA设计建立文化标准。我们希望读者能了解一些领域发展史,因此在全书中引用了众多著名计算机科学家和工程师的名言。
导言和参考
我们希望这本精巧的书能成为对RISC-V的介绍和参考资料,供有兴趣编写RISC-V代码的学生和嵌入式系统程序员使用。本书假设读者已了解至少一款指令集;否则,你可能会希望阅读我们编写的基于RISC-V的体系结构入门书籍:Computer Organization and Design RISC-V Edition,Second Edition:The Hardware Software Interface[1]。
本书中参考性质的内容包括:
• 参考卡——这一页(两面)的RISC-V总览囊括了RV32GCV和RV64GCV,其中包含基础指令集和所有已定义的指令扩展:RVI、RVM、RVA、RVF、RVD、RVC,以及尚处在开发阶段的RVV[2]。
• 指令示意图——每章的第一张图片以半页的图形方式分别介绍每个指令扩展,其中通过一种易读的格式列出所有RISC-V指令的全称,让你轻松查看每条指令的不同变种。见图2.1、图4.1、图5.1、图6.1、图7.1、图8.1、图9.1、图9.2、图9.3、图9.4和图10.1。
• 操作码表——这些表格在一页中展示一个指令扩展的指令布局、操作码、格式类型和指令助记符。见图2.3、图3.3、图3.4、图4.2、图5.2、图5.3、图6.2、图7.4、图7.5、图7.6、图9.5和图10.2。
• 指令列表——附录A是对每条RISC-V指令和伪指令的详细介绍[3][4],包括操作名称和操作数、自然语言描述、寄存器传输语言定义、所在的RISC-V扩展、指令全称、指令格式、一张带操作码的指令编码示意图,以及对应的压缩形式。令人惊讶的是,这些内容加起来不到50页。
• 指令翻译方法——附录B通过表格列出与RV32I指令等价的ARM-32和x86-32指令,这对经验丰富的汇编语言程序员有帮助。此外,还列出一个简单的树遍历C程序在三种指令集架构下的编译结果,以及三者之间惊人的细微差别。附录结尾包含把已有架构代码翻译到RISC-V的若干建议,翻译工作也许比你想象的更简单。
• 索引——它按字典序排列,有助于你通过指令全称或助记符找到描述指令说明、定义或示意图的页面。
勘误和补充内容
我们计划收集勘误,每年发布若干次更新。本书将在网站上发布最新版本,同时简单介绍相对上一版本的变动。读者可在本书的网站(“链接1”)上查看历史勘误,或提交新的勘误。我们提前为你在此版本中发现的问题致歉,同时也期待你的反馈意见,来帮助我们改进本书。
本书的历史
在2017年5月8日—11日于上海举办的第六届RISC-V研讨会上,我们了解到从业者对这本书的需求,几周后我们开始编写本书。考虑到帕特森在书籍撰写方面的丰富经验,我们当时计划请他编写大部分章节。我们两人共同组织内容结构,并担任彼此的首位审稿人。帕特森编写了第1、2、3、4、5、6、7、8、9、11章、参考卡和前言,沃特曼编写了第10章和附录A(本书篇幅最长的部分)、附录B,并编写了书中全部程序。沃特曼还维护了阿曼多·福克斯(Armando Fox)提供的LaTeX工具,使我们能制作本书。
我们在2017年秋季学期为加州大学伯克利分校的800名学生提供了本书的beta版本。当时读者只找到了一些笔误和LaTeX程序的问题,这些问题已在第1版中修正/订。我们还改进了页边的图标,让其更容易记忆,同时也修订了若干印刷效果不如预期的图片。
更重要的是,第1版丰富了第10章,增加了超过60个控制状态寄存器的介绍,还增加了附录B,从而帮助那些想把已有ISA的汇编代码转换成RISC-V的程序员。
第1版于2017年11月28日—30日在硅谷举办的第七届RISC-V研讨会上准时发布。
RISC-V是伯克利一个研究项目[5]的副产品,该项目致力于简化并行软硬件构建技术。
致谢
我们感谢阿曼多·福克斯(Armando Fox),因为我们使用了他的LaTeX工具,同时他还向我们提供了出版方面的个人建议。
我们把最深切的感谢献给那些阅读本书的初稿并提供宝贵建议的人:克尔斯泰·阿桑诺维奇(Krste Asanović)、尼克尔·阿瑟雷亚(Nikhil Athreya)、切斯特·戈登·贝尔(C.Gordon Bell)、斯图尔特·霍德(Stuart Hoad)、戴维·坎特尔(David Kanter)、约翰·马沙(John Mashey)、伊凡·苏泽兰(Ivan Sutherland)、泰德·斯皮尔斯(Ted Speers)、迈克尔·泰勒(Michael Taylor)、梅根·瓦克斯(Megan Wachs)。
最后,我们感谢加州大学伯克利分校的学生在调试方面的帮助以及他们对本书的持续热忱!
我们还要感谢各位译者,他们让读者能免费获取本书的中文、日语、葡萄牙语和西班牙语版本(见“链接3”)。
大卫·帕特森 安德鲁·沃特曼
2017年11月16日于加州伯克利
[1] 译者注:该书的第1版有中文翻译版——《计算机组成与设计:硬件/软件接口》(RISC-V版)。
[2] 译者注:到2023年2月,已定义的指令扩展还包括RVQ、RVB、RVK、RVH等,RVV也已冻结。我们暂时按原书第1版的说法翻译,并在脚注中补充若干译者翻译时得知的最新信息。
[3] 3RVV小组尚未在本书编写时完成RV32V指令集beta版本的冻结,所以,我们未在附录A中列出这些指令。我们在第8章中尽可能猜测RV32V的最终内容,但预计最后仍有少量变动。
[4] 4译者注:RVV 1.0版本于2021年9月冻结,彼时原书作者正在开展原书第2版的编写工作。但在译本的翻译工作接近尾声时,原书第2版尚未完成编写,因此译本仍然沿用原书第1版的大部分内容。
[5] 见“链接2”。