预售 预计2月下旬发货 RISC-V体系结构编程与实践 编程语言香山处理器指令集汇编语言内存管理 寄存器编译环境
运费: | ¥ 0.00-20.00 |
商品详情
定价:129.8
ISBN:9787115603609
作者:奔跑吧Linux社区
版次:第1版
出版时间:2023-03
内容提要:
本书旨在介绍RISC-V体系结构的设计和实现。本书*介绍RISC-V体系结构的基础知识、实验环境搭建、常用指令、函数调用规范与栈,然后讲述GNU汇编器、链接器、链接脚本和GCC内嵌汇编代码,接着讨论RISC-V体系结构中的异常处理、中断、内存管理、高速缓存、缓存一致性、TLB管理、原子操作、内存屏障指令,*阐述RSIC-V体系结构中的压缩指令扩展、虚拟化扩展等。
本书不仅适合软件开发人员阅读,还可以作为计算机相关专业和相关培训机构的教材。
作者简介:
作者简介
奔跑吧Linux社区 由一群热爱开源的工程师组成,致力于开源硬件和开源软件的推广。
审校者简介
香山处理器团队
面向世界的体系结构创新开源平台,目前已形成由多家企业组成的香山联合开发团队。其中,香山处理器是由中国科学院计算技术研究所发起的开源高性能RISC-V处理器核项目。
龙蜥社区RISC-V SIG
坚持开放、开源,致力于龙蜥社区以及 RISCV 软硬件生态的共建和推广。
进迭时空
专注研发新一代高性能RISC-V处理器和计算系统,让*基于RISC-V芯片更自由地开发更有创意的新应用。
目录:
目 录
第 1章 RISC-V体系结构基础知识1
1.1 RISC-V介绍1
1.1.1 RISC-V指令集优点1
1.1.2 RISC-V指令集扩展2
1.1.3 RISC-V商业化发展2
1.2 RISC-V体系结构介绍3
1.2.1 RISC-V体系结构3
1.2.2 采用RISC-V体系结构的常见处理器3
1.2.3 RISC-V体系结构中的基本概念4
1.2.4 SBI服务5
1.3 RISC-V寄存器6
1.3.1 通用寄存器6
1.3.2 系统寄存器7
1.3.3 U模式下的系统寄存器8
1.3.4 S模式下的系统寄存器9
1.3.5 M模式下的系统寄存器11
1.4 香山处理器介绍15
1.4.1 香山处理器体系结构15
1.4.2 香山处理器的前端子系统16
1.4.3 香山处理器的后端子系统18
1.4.4 香山处理器的访存子系统20
1.4.5 香山处理器的L2/L3高速缓存25
第 2章 搭建RISC-V实验环境29
2.1 实验平台29
2.1.1 QEMU29
2.1.2 NEMU30
2.2 搭建实验环境31
2.2.1 实验2-1:输出“Welcome RISC-V!”31
2.2.2 实验2-2:单步调试BenOS和MySBI32
2.3 BenOS和MySBI基础实验代码解析34
2.3.1 MySBI基础代码分析34
2.3.2 BenOS基础代码分析37
2.3.3 合并BenOS和MySBI41
2.4 QEMU + RISC-V + Linux实验平台41
第3章 基础指令集44
3.1 RISC-V指令集介绍44
3.2 RISC-V指令编码格式45
3.3 加载与存储指令46
3.4 PC相对寻址49
3.5 移位操作53
3.6 位操作指令55
3.7 算术指令56
3.8 比较指令57
3.9 无条件跳转指令58
3.10 条件跳转指令59
3.11 CSR指令61
3.12 寻址范围62
3.13 陷阱:为什么ret之后*进入死循环62
3.14 实验64
3.14.1 实验3-1:熟悉加载指令64
3.14.2 实验3-2:PC相对地址寻址64
3.14.3 实验3-3:memcpy()函数的实现65
3.14.4 实验3-4:memset()函数的实现65
3.14.5 实验3-5:条件跳转指令165
3.14.6 实验3-6:条件跳转指令266
3.14.7 实验3-7:子函数跳转66
3.14.8 实验3-8:在汇编中实现串口输出功能66
第4章 函数调用规范与栈67
4.1 函数调用规范67
4.2 入栈与出栈70
4.3 RISC-V栈的布局72
4.3.1 不使用FP的栈布局72
4.3.2 使用FP的栈布局74
4.3.3 栈回溯76
4.4 实验78
4.4.1 实验4-1:观察栈布局78
4.4.2 实验4-2:观察栈回溯78
第5章 GNU汇编器79
5.1 编译流程与ELF文件79
5.2 一个简单的汇编程序82
5.3 汇编语法84
5.3.1 注释84
5.3.2 符号84
5.4 常用的伪指令85
5.4.1 对齐伪指令85
5.4.2 数据定义伪指令86
5.4.3 与函数相关的伪指令87
5.4.4 与段相关的伪指令87
5.4.5 与宏相关的伪指令89
5.4.6 与文件相关的伪指令91
5.5 RISC-V依赖特性91
5.5.1 RISC-V特有的命令行选项91
5.5.2 RISC-V特有的伪指令92
5.6 实验92
5.6.1 实验5-1:汇编语言练习—查找*数92
5.6.2 实验5-2:汇编语言练习—通过C语言调用汇编函数92
5.6.3 实验5-3:汇编语言练习—通过汇编语言调用C函数92
5.6.4 实验5-4:使用汇编伪操作实现一张表92
5.6.5 实验5-5:汇编宏的使用93
第6章 链接器与链接脚本94
6.1 链接器94
6.2 链接脚本95
6.2.1 一个简单的链接程序95
6.2.2 设置入口点96
6.2.3 基本概念97
6.2.4 符号赋值与引用97
6.2.5 当前位置计数器98
6.2.6 SECTIONS命令99
6.2.7 常用的内置函数101
6.3 加载重定位103
6.3.1 BenOS重定位103
6.3.2 OpenSBI和Linux内核重定位105
6.4 链接重定位与链接器松弛优化108
6.4.1 链接重定位108
6.4.2 函数跳转优化112
6.4.3 符号地址访问优化114
6.5 实验116
6.5.1 实验6-1:分析链接脚本116
6.5.2 实验6-2:输出每个段的内存布局116
6.5.3 实验6-3:加载地址不等于运行地址117
6.5.4 实验6-4:设置链接地址117
6.5.5 实验6-5:链接器松弛优化1117
6.5.6 实验6-6:链接器松弛优化2117
6.5.7 实验6-7:分析Linux 5.15内核的链接脚本117
第7章 内嵌汇编代码118
7.1 内嵌汇编代码基本用法118
7.1.1 基础内嵌汇编代码118
7.1.2 扩展内嵌汇编代码118
7.1.3 内嵌汇编代码修饰符120
7.1.4 使用汇编符号名字121
7.1.5 内嵌汇编代码与宏结合122
7.1.6 使用goto修饰词122
7.1.7 小结123
7.2 案例分析124
7.3 注意事项128
7.4 实验128
7.4.1 实验7-1:实现简单的memcpy()函数128
7.4.2 实验7-2:使用汇编符号名写内嵌汇编代码128
7.4.3 实验7-3:使用内嵌汇编代码完善memset()函数129
7.4.4 实验7-4:使用内嵌汇编代码与宏的结合129
7.4.5 实验7-5:实现读和写系统寄存器的宏129
7.4.6 实验7-6:goto模板的内嵌汇编代码129
第8章 异常处理130
8.1 异常处理基本概念130
8.1.1 异常类型130
8.1.2 同步异常和异步异常131
8.1.3 异常入口和返回131
8.1.4 异常返回地址132
8.1.5 异常返回的处理器模式133
8.1.6 栈的选择133
8.2 与M模式相关的异常寄存器133
8.2.1 mstatus寄存器134
8.2.2 mtvec寄存器134
8.2.3 mcause寄存器135
8.2.4 mie寄存器135
8.2.5 mtval寄存器136
8.2.6 mip寄存器136
8.2.7 mideleg和medeleg寄存器136
8.2.8 中断配置137
8.3 与S模式相关的异常寄存器137
8.3.1 sstatus寄存器137
8.3.2 sie寄存器137
8.3.3 sip寄存器138
8.3.4 scause寄存器138
8.3.5 stvec寄存器138
8.3.6 stval寄存器139
8.4 异常上下文139
8.4.1 保存异常上下文141
8.4.2 恢复异常上下文141
8.5 案例分析8-1:实现SBI系统调用142
8.5.1 调用ECALL指令142
8.5.2 实现SBI系统调用143
8.6 案例分析8-2:BenOS的异常处理148
8.6.1 设置异常向量表148
8.6.2 保存和恢复异常上下文149
8.6.3 异常处理151
8.6.4 委托中断和异常153
8.6.5 触发异常153
8.7 实验154
8.7.1 实验8-1:在SBI中实现串口输入功能154
8.7.2 实验8-2:在BenOS中触发非法指令异常155
8.7.3 实验8-3:输出触发异常时函数栈的调用过程155
8.7.4 实验8-4:在MySBI中模拟实现RDTIME伪指令155
第9章 中断处理与中断控制器156
9.1 中断处理基本概念156
9.1.1 中断类型156
9.1.2 中断处理过程157
9.1.3 中断委派和注入158
9.1.4 中断优先级158
9.2 CLINT159
9.3 案例分析9-1:定时器中断160
9.3.1 访问mtimer160
9.3.2 在MySBI中实现定时器服务160
9.3.3 定时器中断处理161
9.3.4 打开中断总开关163
9.3.5 小结164
9.4 PLIC164
9.4.1 中断号165
9.4.2 中断优先级166
9.4.3 中断使能寄存器166
9.4.4 中断待定寄存器166
9.4.5 中断优先级阈值寄存器167
9.4.6 中断请求/完成寄存器167
9.5 案例分析9-2:串口中断167
9.5.1 初始化PLIC168
9.5.2 使能串口0的接收中断169
9.5.3 处理中断169
9.6 实验171
9.6.1 实验9-1:定时器中断171
9.6.2 实验9-2:使用汇编函数保存和恢复中断现场171
9.6.3 实验9-3:实现并调试串口0中断171
第 10章 内存管理172
10.1 内存管理基础知识172
10.1.1 内存管理的“远古时代”172
10.1.2 地址空间的抽象174
10.1.3 分段机制175
10.1.4 分页机制175
10.2 RISC-V内存管理178
- 人民邮电出版社有限公司 (微信公众号认证)
- 人民邮电出版社微店,为您提供最全面,最专业的一站式购书服务
- 扫描二维码,访问我们的微信店铺
- 随时随地的购物、客服咨询、查询订单和物流...