1 
2018 
RISC-V 手册 
一本开源指令集的指南 
DAVID PATTERSON, ANDREW WATERMAN 
翻译:勾凌睿、黄成、刘志刚 
校阅:包云岗 
 
1 
参考卡 
 
 
2 
 
 
 
 
3 
目录 
参考卡 ..................................................................................................................................................... 1 
致谢 ......................................................................................................................................................... 7 
关于作者 ................................................................................................................................................. 9 
前言 .......................................................................................................................................................10 
译者序 ...................................................................................................................................................12 
翻译团队 ................................................................................................................................................ 12 
第一章  为什么要有 RISC-V? ..........................................................................................................13 
1.1  导言 ................................................................................................................................................. 13 
1.2  模块化与增量型 ISA ................................................................................................................... 14 
1.3 ISA 设计  101 ................................................................................................................................. 15 
1.4  全书的总览 .................................................................................................................................... 19 
1.5  结束语 ............................................................................................................................................. 20 
1.6  扩展阅读 ........................................................................................................................................ 21 
第二章  RV32I:RISC-V 基础整数指令集 ......................................................................................23 
2.1  导言 ................................................................................................................................................. 23 
2.2 RV32I 指令格式 ............................................................................................................................. 23 
2.3 RV32I 寄存器 ................................................................................................................................. 26 
2.4 RV32I 整数计算 ............................................................................................................................. 27 
2.5 RV32I 的 Load 和 Store .............................................................................................................. 29 
2.6 RV32I 条件分支 ............................................................................................................................. 30 
2.7 RV32I 无条件跳转 ........................................................................................................................ 31 
2.8 RV32I 杂项 ...................................................................................................................................... 31 
2.9  使用插入排序比较 RV32I,ARM-32,MIPS-32 和 x86-32 指令集 ........................... 32 
2.10  结束语 .......................................................................................................................................... 32 
2.11  扩展阅读 ...................................................................................................................................... 33 
第三章  RISC-V 汇编语言 ..................................................................................................................41 
3.1  导言 ................................................................................................................................................. 41 
3.2  函数调用规范(Calling convention) ................................................................................. 41 
3.3  汇编器 ............................................................................................................................................. 43 
3.4  链接器 ............................................................................................................................................. 46 
3.5  静态链接和动态链接 ................................................................................................................. 49 
3.6  加载器 ............................................................................................................................................. 49 
3.7  结束语 ............................................................................................................................................. 49 
4 
 
3.8  扩展阅读 ........................................................................................................................................ 50 
第四章  乘法和除法指令 ................................................................................................................... 51 
4.1  导言 ................................................................................................................................................. 51 
4.2  结束语 ............................................................................................................................................ 53 
4.3  扩展阅读 ........................................................................................................................................ 53 
第五章  RV32F 和 RV32D:单精度和双精度浮点数.................................................................... 55 
5.1  导言 ................................................................................................................................................. 55 
5.2 浮点寄存器 .................................................................................................................................... 55 
5.3 浮点加载,存储和算术指令 .................................................................................................... 56 
5.4 浮点转换和搬运 ........................................................................................................................... 60 
5.5 其他浮点指令 ................................................................................................................................ 60 
5.6 使用 DAXPY 程序比较 RV32FD,ARM-32,MIPS-32 和 x86-32 ............................... 62 
5.7 结束语.............................................................................................................................................. 62 
5.8  扩展阅读 ........................................................................................................................................ 62 
第六章  原子指令 ................................................................................................................................ 65 
6.1  导言 ................................................................................................................................................. 65 
6.2  结束语 ............................................................................................................................................ 67 
6.3  扩展阅读 ........................................................................................................................................ 67 
第七章  压缩指令 ................................................................................................................................ 69 
7.1  导言 ................................................................................................................................................. 69 
7.2 RV32GC,Thumb-2,microMIPS 和 x86-32 的比较 ...................................................... 71 
7.3  结束语 ............................................................................................................................................ 71 
7.4  扩展阅读 ........................................................................................................................................ 71 
第八章  向量 ........................................................................................................................................ 75 
8.1  导言 ................................................................................................................................................. 75 
8.2  向量计算指令 ............................................................................................................................... 76 
8.3  向量寄存器和动态类型 ............................................................................................................ 76 
8.4  向量的 Load 和 Store 操作 ...................................................................................................... 78 
8.5  向量操作期间的并行性 ............................................................................................................ 78 
8.6  向量运算的条件执行 ................................................................................................................. 79 
8.7  其他向量指令 ............................................................................................................................... 79 
8.8  例子:用 RV32V 写成的 DAXPY 程序 ................................................................................. 80 
8.9 RV32V,MIPS-32 MSA SIMD 和 x86-32 AVX SIMD 的比较 ......................................... 81 
 
5 
8.10  结束语 .......................................................................................................................................... 83 
8.11  扩展阅读 ...................................................................................................................................... 84 
第九章  RV64:64 位地址指令 ........................................................................................................87 
9.1  导言 ................................................................................................................................................. 87 
9.2 使用插入排序来比较 RV64 与其他 64 位 ISA ..................................................................... 91 
9.3 程序大小 ......................................................................................................................................... 93 
9.4 结束语 .............................................................................................................................................. 93 
9.5 了解更多 ......................................................................................................................................... 94 
第十章  RV32/64 特权架构 ...............................................................................................................99 
10.1  导言 ............................................................................................................................................... 99 
10.2  简单嵌入式系统的机器模式 .............................................................................................. 100 
10.3  机器模式下的异常处理 ....................................................................................................... 101 
10.4  嵌入式系统中的用户模式和进程隔离 ............................................................................ 104 
10.5  现代操作系统的监管者模式 .............................................................................................. 105 
10.6  基于页面的虚拟内存 ............................................................................................................ 106 
10.7  结束语 ....................................................................................................................................... 110 
10.8  扩展阅读 ................................................................................................................................... 111 
第十一章  RISC-V 未来的可选扩展 .............................................................................................. 113 
11.1 “B”标准扩展:位操作 ............................................................................................................ 113 
11.2 “E”标准扩展:嵌入式 ............................................................................................................ 113 
11.3 “H”特权态架构扩展:支持管理程序(Hypervisor) ................................................. 113 
11.4 “J”标准扩展:动态翻译语言 ............................................................................................... 113 
11.5 “L”标准扩展:十进制浮点 ................................................................................................... 113 
11.6 “N”标准扩展:用户态中断 .................................................................................................. 113 
11.7 “P”标准扩展:封装的单指令多数据(Packed-SIMD)指令 ................................... 114 
11.8 “Q”标准扩展:四精度浮点 .................................................................................................. 114 
11.9  结束语 ....................................................................................................................................... 114 
附录 A    RISC-V 指令列表 ............................................................................................................. 115 
 
 
 
 
6 
 
对这本 RISC-V 手册的称赞 
 
 
 
 
我喜欢 RISC-V 和这本书,因为它们优雅——简洁、扼要且完整。书中的评论无偿提供
了一些历史,设计的动机,以及一些对于各种架构的批评。 
——C.  Gordan  Bell,微软公司成员,Digital  PDP-11 和 
VAX-11 指令集架构的设计者 
 
本书讲述了 RISC-V 可以做到什么,以及为什么它的设计师选择赋予它这些能力。更有
趣的是,作者说出了为什么 RISC-V 省略了早期计算机中存在的一些东西。这些原因至
少和 RISC-V 本身能做到什么与忽略了什么一样有意思。 
——Ivan Sutherland,图灵奖获得者,被称作计算机图形学之父 
 
RISC-V 会改变世界,这本书会助你成为改变的一部分。 
——Michael B. Taylor,华盛顿大学教授 
RISC-V 是学生学习指令集架构和汇编级编程的理想选择,而它们是以后用高级语言工
作的基础。这本写得很清楚的书提供了对 RISC-V 的很好的介绍,再加上一些对其演化
历史的深刻见解及与其它常见架构的比较。以过去的指令集架构为鉴,RISC-V 的设计
者能够避免一些不必要的、不合理的特征,这让教学过程变得容易。即使它很简洁,它
也足够强大,能在实际应用中广泛使用。很久以前我教过汇编编程的入门课,如果我现
在去教这门课的话,我会很乐意用这本书作为教材。 
——John  Mashey,MIPS 指令集架构的设计者之一 
 
  这本书对于任何使用 RISC-V  ISA 的人来说都是十分宝贵的参考。为了便于快速查阅,
操作码按几种有用的格式呈现,这让编写和解释汇编代码变得简单。此外,对于如何使
用这个 ISA 的解释和示例也让程序员的工作更容易。和其他 ISA 比较的部分很有意思,
它们解释了 RISC-V 设计者们做出他们的设计决策的原因。 
——Megan  Wachs,博士,SiFive 工程师