当前位置:首页 > 工业技术
MIPS处理器设计透视
MIPS处理器设计透视

MIPS处理器设计透视PDF电子书下载

工业技术

  • 电子书积分:14 积分如何计算积分?
  • 作 者:(英)Dominic Sweetman著;赵俊良,张福新,陶品译
  • 出 版 社:北京:北京航空航天大学出版社
  • 出版年份:2005
  • ISBN:7810774301
  • 页数:427 页
图书介绍:本书介绍了有关MIPS处理器的发展历史、运行原理和编程等诸多内容,并分别对MIPS处理器的体系结构、协处理器等进行了详细深入的分析。
《MIPS处理器设计透视》目录

目录 2

第1章 RISC和MIPS 2

1.1 流水线 2

1.1.1 什么使流水线效率降低? 3

1.1.2 流水线和缓存 4

1.2 MIPS的五级流水线 4

1.3 RISC和CISC 6

1.4 迄今为止一些重要的MIPS芯片 7

1.4.1 R2000到R3000 7

1.4.2 R6000:一次偏轨 7

1.4.3 R4000革命 8

1.4.4 R5000和R10000 9

1.5 MIPS和CISC体系结构的比较 11

1.5.1 MIPS指令集的一些规定 11

1.5.2 编址及内存访问 12

1.5.3 MIPS不支持的特征 13

1.5.5 程序员可见的流水线效果 14

1.5.4 可能没有预料到的特征 14

第2章 MIPS体系结构 18

2.1 MIPS汇编语言 18

2.2 寄存器的特点 19

2.3 整数乘法单元和寄存器 22

2.4 加载和存储:寻址方式 23

2.5 存储器和寄存器中的数据类型 24

2.5.1 整数数据类型 24

2.5.3 存储器中的浮点数据 25

2.5.2 未对齐的加载和存储 25

2.6 汇编语言的合成指令 26

2.7 MIPS Ⅰ发展到MIPS Ⅳ:64位(和其他)的扩展 27

2.7.1 迈向64位 28

2.7.2 谁需要64位? 29

2.7.3 关于64位与无模式转换:寄存器中的数据 30

2.7.4 MIPS Ⅲ的一些其他改进 31

2.8 基本地址空间 32

2.8.3 64位CPU的存储映射 34

2.8.2 核心与用户权限 34

2.8.1 简单系统的寻址 34

2.9 流水线冒险 36

第3章 协处理器0:MIPS处理器控制 41

3.1 CPU控制指令 41

3.2 起作用的寄存器及起作用的时机 42

3.3 标准CPU控制寄存器编码 43

3.3.1 处理器ID(PRId)寄存器 43

3.3.2 状态寄存器(SR) 44

3.3.3 原因寄存器(Cause) 49

3.3.4 异常返回地址(EPC) 51

3.3.5 无效虚地址寄存器(BadVaddr) 51

3.4 R4000以后的CPU专有的控制寄存器 51

3.4.1 Count/Compare寄存器:R4000时钟 51

3.4.2 Config寄存器:R4x00配置 52

3.4.3 Load-Linked Address(LLAddr)寄存器 54

3.4.4 调试观测点(WatchLo/WatchHi)寄存器 54

4.2 缓存怎样工作 56

4.1 缓存和缓存的管理 56

第4章 MIPS的缓存 56

4.3 早期MIPS CPU中的写透缓存 58

4.4 近期MIPS CPU中的回写缓存 59

4.5 缓存设计的其他选择 59

4.6 缓存管理 60

4.7 二级和三级缓存 62

4.8 MIPS CPU缓存的构造 63

4.9 对R3000风格的缓存编程 64

4.9.1 使用缓存隔离和交换 65

4.9.2 初始化和判断大小 66

4.9.3 缓存无效 66

4.9.4 测试和探察 67

4.10 对R4000风格的缓存编程 67

4.10.1 CacheERR、ERR和ErrorEPC寄存器:缓存错误处理 68

4.10.2 缓存指令 70

4.10.3 计算缓存的大小和配置方式 71

4.10.4 初始化程序 72

4.11 缓存效率 73

4.10.5 在缓存中无效或者写回一个内存区域 73

4.12 修改软件来影响缓存的效率 75

4.13 写缓冲区和需要关心它的时候 77

4.14 关于MIPS缓存的其他话题 79

4.14.1 多处理器的缓存特征 79

4.14.2 缓存别名 79

第5章 异常、中断和初始化 81

5.1 精确异常 81

5.3 异常向量:异常处理开始的地方 83

5.2 异常发生时刻 83

5.4 异常处理基础 86

5.5 从异常返回 87

5.6 嵌套异常 87

5.7 一个异常处理例程 88

5.8 中断 88

5.8.1 MIPS处理器的中断资源 89

5.8.2 实现中断优先级 91

5.8.3 原子性和对SR的原子改变 92

5.8.4 中断使能下的关键区:MIPS中的信号量机制 93

5.9 启动 94

5.9.1 识别CPU型号 96

5.9.2 启动序列 97

5.9.3 启动一个应用程序 97

5.10 模拟指令 98

第6章 内存管理与TLB 101

6.1 大型计算机上的内存管理 101

6.1.1 基本进程空间布局和保护 101

6.1.3 最佳页映射 103

6.1.2 把进程空间映射到真正的物理内存 103

6.1.4 我们真正想要的 104

6.1.5 MIPS设计的起源 106

6.2 MIPS TLB的特点 106

6.3 MMU的寄存器 109

6.3.1 EntryHi、EntryLo和PageMask寄存器 110

6.3.2 Index寄存器 112

6.3.3 Random寄存器 113

6.3.5 Context寄存器及XContext寄存器 114

6.3.4 Wired寄存器 114

6.4 MMU的控制指令 115

6.5 对TLB编程 116

6.5.1 如何产生重装入 116

6.5.2 使用ASID 117

6.5.3 Random寄存器与被绑定入口 117

6.6 建立内存译码机制 118

6.7 TLB的异常处理代码 119

6.7.1 32位R3000系列CPU的TLB异常处理函数 120

6.7.2 R4x00系列CPU的TLB异常处理函数 122

6.7.3 XTLB的失效处理函数 124

6.8 跟踪已修改的页(模拟dirty位) 124

6.9 内存地址译码和64位指针 125

6.10 使用MIPS的TLB 126

6.11 在非Unix系统中的内存管理 127

第7章 浮点支持 128

7.1 浮点的基本描述 128

7.2 IEEE754标准及其背景 129

7.3 怎样保存IEEE浮点数 130

7.3.2 对使用特殊值时的保留指数值 131

7.3.1 IEEE尾数的标准化 131

7.3.3 MIPS浮点数据格式 132

7.4 IEEE754的MIPS实现 134

7.5 浮点寄存器 135

7.6 浮点异常/中断 136

7.7 浮点控制:控制/状态寄存器 137

7.8 浮点实现/校正寄存器 139

7.9.1 装入/存储 140

7.9 浮点指令指南 140

7.9.2 寄存器间的传送 141

7.9.3 三个操作数算术操作 142

7.9.4 乘加操作 143

7.9.5 一元(可变符号)操作 143

7.9.6 转换操作 143

7.9.7 条件分支和测试指令 144

7.10 指令时序安排的要求 146

7.12 按需初始化和使能 147

7.11 指令时序对速度需求 147

7.13 浮点模拟 148

第8章 MIPS指令集完全指南 149

8.1 一个简单的例子 149

8.2 汇编助记符及其含义 150

8.2.1 U和Non-U(非U)助记符 152

8.2.2 除法助记符 153

8.2.3 指令的详细清单 153

8.3 浮点处理指令 175

8.4.1 向左加载/向右加载(load left/load right):地址非对齐的存取操作 179

8.4 特殊指令及其用途 179

8.4.2 关联加载/条件存储(load-linked/store-conditional) 183

8.4.3 条件拷贝(conditional move)指令 184

8.4.4 可能跳转的指令(branch-likely) 185

8.4.5 整数乘累加指令(interget multiply-accumulate)和乘加指令(multiply-add) 186

8.4.6 浮点乘加指令(floating-point multiply-add) 187

8.4.7 多浮点条件标志位 187

8.4.8 缓存数据预取 188

8.4.9 存取同步屏障:Sync指令 189

8.5 指令的机器编码 190

8.5.1 指令编码中的域 190

8.5.2 指令编码表的注意事项 202

8.5.3 编码方式和处理器实现的简单剖析 203

8.6 指令集的功能分组 203

8.6.1 空操作 204

8.6.2 寄存器间的数据拷贝指令 204

8.6.3 立即数加载指令 204

8.6.4 算术/逻辑操作指令 205

8.6.5 整数乘法、除法以及求余指令 207

8.6.6 整数乘累加指令 208

8.6.7 存取指令 209

8.6.8 跳转、分支和子程序调用指令 211

8.6.9 断点及异常指令 212

8.6.10 0#协处理器(CP0)处理指令 212

8.6.11 浮点操作指令 213

8.6.12 ATMizer-Ⅱ系统的专用浮点指令 215

9.1 一个简单的例子 216

第9章 汇编程序设计 216

9.2 语法简介 220

9.3 指令使用规则 221

9.3.1 带1~3个寄存器的计算型指令 221

9.3.2 带立即数的运算指令 222

9.3.3 关于32/64位指令 223

9.4 寻址模式 223

9.5 汇编伪指令 226

9.5.1 段的选择 226

9.5.2 包含堆栈的程序布局 228

9.5.3 数据的定义与对齐 229

9.5.4 符号绑定属性 231

9.5.5 函数伪指令 233

9.5.6 汇编器控制伪操作(.set) 235

9.5.7 编译/调试支持 237

9.5.8 SGI汇编语言中增加的伪操作 237

10.1 堆栈、子程序链接以及参数传递 239

第10章 MIPS上的C语言编程 239

10.2 堆栈参数结构 240

10.3 使用寄存器传递参数 241

10.4 C库范例 242

10.5 一个特殊的例子传递数据结构 243

10.6 传递不定数量的参数 244

10.7 函数的返回值 245

10.8 扩展寄存器——使用标准SGI n32和n64 245

10.9 堆栈分布、堆栈帧以及辅助调试器 248

10.9.1 leaf函数 250

10.9.2 nonleaf函数 251

10.9.3 适用于复杂堆栈要求的堆栈帧指针 254

10.10 数目可变的参数列表 257

10.11 不同线程间的共享函数和共享库问题 258

10.11.1 单一地址空间的代码共享 259

10.11.2 MIPS ABI中的共享库代码 259

10.12 编译器的优化 261

10.12.1 普通优化 262

10.12.2 优化不友好的代码并且如何避免 264

10.12.3 优化约束 265

10.13 通过C进行器件访问的提示 265

10.13.1 使用“volatile”制约破坏性的优化 266

10.13.2 C中的非对齐数据 267

第11章 可移植性和C代码 270

11.1 MIPS的移植:常见问题清单 270

11.2 一个理想的程序移植过程 272

11.2.1 程序移植的3个选择 272

11.2.2 解决系统相关的问题 273

11.2.3 分离不可移植代码 274

11.2.4 何时使用汇编 274

11.3 可移植C程序和语言标准 275

11.4 C库函数和POSIX 276

11.5 数据表示和对齐 277

11.6 尾端:字、字节和位的顺序 279

11.6.1 尾端和程序员 281

11.6.2 尾端:描述和脑力问题 282

11.6.3 尾端:硬件问题 284

11.6.4 互相对立尾端阵营之间的连接 286

11.6.5 可配置尾端的连接 287

11.6.6 处理MIPS CPU的两种尾端的软件 288

11.6.7 可移植性与尾端无关代码 290

11.6.8 尾端和外部数据 291

11.6.9 尾端问题“预知”和“治愈”的假象 292

11.7 高速缓存会引起什么样的错误?怎样才能阻止它? 292

11.7.1 高速缓存的管理和DMA数据 294

11.7.2 高速缓存的管理和指令数据的写入 295

11.7.3 高速缓存的管理和非高速缓存(或写透)的数据 295

11.8 MIPS的不同实现 295

第12章 软件举例 298

12.1 MIPS的启动 298

12.2 MIPS缓存管理 309

12.2.1 缓存操作:缓存指令出现前的32位MIPS 310

12.2.2 Cache操作:遵从MIPS Ⅲ和Cache指令 320

12.3.1 xcption:为程序员做些什么? 337

12.3 MIPS异常处理 337

12.3.2 xcption:C语言接口代码 338

12.3.3 xcption:低层模块(low-level module) 339

12.4 MIPS中断 355

12.5 MIPS的优化 357

附录A 指令时序与优化 363

A.1 避免冒险:确保代码正确 363

A.2 避免互锁提高性能 364

A.4 避免CP0冒险:要使用多少nop? 365

A.3 乘法单元冒险:hi和lo的早期修正 365

A.5 CP0指令/指令调度(instruction scheduling) 367

A.6 CP0标志位(flags)和指令 369

附录B 汇编语言语法 377

附录C 目标代码 377

C.1 工具 377

C.2 区和段(section segment) 378

C.3 ECOFF(RISC/OS) 379

C.3.1 文件头 379

C.3.2 可选的a.out头 381

C.3.3 调入器(loader)举例 382

C.3.4 进一步阅读 383

C.4 ELF(MIPS ABI) 383

C.4.1 文件头 383

C.4.2 程序头 385

C.4.3 调入器举例 385

C.4.4 进一步阅读 387

C.5 目标代码工具 387

D.1 MIPS16 388

附录D MIPS的发展 388

D.1.1 MIPS16中的特殊编码和指令 389

D.1.2 MIPS16的评价 389

D.2 MIPS Ⅴ/MDMX 390

D.2.1 编译器可以使用多媒体指令吗? 391

D.2.2 MDMX的应用 392

D.2.3 MIPS Ⅴ的应用 393

D.2.4 MDMX/MIPS Ⅴ可能的成功 393

MIPS术语说明 394

相关图书
作者其它书籍
返回顶部