《安腾体系结构 理解64位处理器和EPIC原理》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:James S.Evans,Gregory L.Trimper著;蒋敬旗等译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2005
  • ISBN:7302096082
  • 页数:416 页
图书介绍:本书全面介绍了新型的64位安腾体系结构及其具有突破性的性能。通过使用标准命令行工具和大量实例,循序渐进地介绍了安腾汇编语言,以及安腾显示并行指令计算(EPIC)的指令集、寻址、寄存器栈引擎、谓词、I/O技术、过程调用、浮点操作等内容,并结合当代计算机体系结构的发展,详细阐述了安腾体系结构设计。书中提供了大量的参考书目和丰富的网上资源,并且每章都包括翔实的数字、论述以及编程练习。本书可作为计算机及相关专业学生学习计算机体系结构或汇编语言的教材,也是研究人员系统了解安腾体系结构的必备资源。

目录 1

第1章 体系结构和实现方法 1

1.1 类比:钢琴的体系结构 1

1.2 计算机语言的类型 2

1.3 为什么要学习汇编语言 3

1.4 二进制倍数的词头 4

1.5 指令集体系结构 4

1.6 计算机体系结构的生命周期 5

1.6.1 32位Intel?体系结构及其先前结构 5

1.6.2 AlphaTM体系结构及其先前结构 6

1.6.3 安腾体系结构及其先前结构 7

1.6.4 体系结构和实现方法的命名 8

1.7 SQUARES:第一个编程实例 9

1.7.1 C、FORTRAN和COBOL语言描述 9

1.7.2 安腾体系结构的汇编语言描述 11

1.8 记数系统的回顾 13

1.8.1 位置系数和权值 13

1.8.2 二进制和十六进制表示 14

1.8.3 带符号整数 15

本章总结 16

参考文献 16

练习题 18

第2章 计算机结构和数据表示 20

2.1 计算机结构 20

2.1.2 存储器 21

2.1.1 中央处理器 21

2.1.3 输入输出系统 23

2.2 指令的执行 24

2.3 指令集体系结构的类别 25

2.4 向64位体系结构过渡 26

2.5 安腾体系结构的信息单位和数据类型 28

2.5.1 整数 29

2.5.2 浮点数 29

2.5.3 字母数字字符 32

本章总结 35

参考文献 35

练习题 36

3.1 编程环境 38

第3章 汇编程序和调试程序 38

3.2 程序开发步骤 39

3.3 比较源文件的不同 41

3.4 汇编语句的类型 42

3.4.1 语句格式 42

3.4.2 符号地址 43

3.4.3 汇编语言操作符的种类 43

3.5 符号汇编程序的功能 44

3.5.1 常量 44

3.5.2 符号或标识符 45

3.5.3 存储器分配 45

3.5.4 单元计数器 47

3.5.5 表达式 48

3.5.7 清单文件的组成部分 49

3.5.6 控制语句 49

3.6 汇编过程 51

3.7 连接过程 52

3.8 调试程序 55

3.8.1 调试程序的功能 55

3.8.2 使用gdb(Linux?和HP-UX?)运行SQUARES 56

3.8.3 使用adb(HP-UX)运行SQUARES 57

3.8.4 调试命令举例 58

3.9 编写程序的约定 61

本章总结 62

参考文献 62

练习题 63

第4章 安腾指令格式和寻址方式 65

4.1.1 指令包 66

4.1 安腾指令格式概述 66

4.1.2 指令位字段格式 67

4.1.3 安腾指令类型 67

4.2 整数算术指令 69

4.2.1 加法和减法 69

4.2.2 算术溢出 70

4.2.3 左移相加指令 71

4.2.4 算术操作的特殊情况 71

4.2.5 16位带符号整数的乘法 72

4.2.6 全宽度的乘法和除法 73

4.3 安腾指令的位编码 73

4.4 HEXNUM:使用算术指令 76

4.5.1 安腾高速缓存结构 78

4.5 数据存取指令 78

4.5.2 整型存储指令 80

4.5.3 整型装入指令 80

4.5.4 长立即数传送指令 81

4.5.5 存取简单的记录结构 82

4.5.6 存取专用CPU寄存器 83

4.6 其他ALU指令 84

4.6.1 符号扩展指令 84

4.6.2 零扩展指令 85

4.6.3 宽度小于64位的指令 85

4.7 DOTPROD:使用数据存取指令 85

4.8.3 寄存器间接寻址 88

4.8.2 寄存器直接寻址 88

4.8.1 立即寻址 88

4.8 安腾寻址方式 88

4.8.4 自动增量寻址 89

4.8.5 安腾寻址方式小结 89

4.8.6 前面程序中的寻址细节 89

4.9 其他体系结构中的寻址 94

4.9.1 基于寄存器间接寻址的方式 94

4.9.2 基于偏移寻址的方式 94

4.9.3 体系结构寻址方式的比较 95

本章总结 96

参考文献 96

练习题 96

5.1 控制流的硬件基础 99

第5章 比较、转移和判断 99

5.1.1 条件码 100

5.1.2 状态管理方法 100

5.1.3 谓词寄存器 101

5.2 整数比较指令 102

5.2.1 带符号比较和等式 102

5.2.2 无符号比较 103

5.3 程序转移 104

5.3.1 普通转移指令 104

5.3.2 转移的时间考虑 105

5.3.3 if...then...else结构 106

5.3.4 循环结构 108

5.3.6 局部性和程序性能 109

5.3.5 转移的寻址范围 109

5.4 DOTLOOP:使用计数循环 110

5.5 暂停、指令组和性能 111

5.5.1 DOTLOOP中的暂停和分组 111

5.5.2 数据相关性的简化规则 113

5.5.3 安腾汇编程序处理暂停的方法 115

5.5.4 循环的局部标号 115

5.5.5 循环、转移和整体性能 115

5.6 DOTCLOOP:使用循环计数寄存器 115

5.7 其他结构化程序设计成分 117

5.7.1 无条件比较指令 118

5.7.2 嵌套的if...then...else结构 118

5.7.3 多路转移 119

5.7.4 简单的分情况结构 120

5.8 MAXIMUM:使用条件指令 122

本章总结 123

参考文献 124

练习题 124

第6章 逻辑操作、移位操作和字节操作 126

6.1 逻辑函数 126

6.1.1 两个变量的布尔函数 126

6.1.2 逻辑指令 128

6.1.3 逻辑函数的应用 128

6.1.4 一位测试指令 129

6.1.5 并行(逻辑)条件 130

6.1.6 加法的逻辑基础 131

6.2 HEXNUM2:使用逻辑掩码 132

6.3 位操作和字段操作 134

6.3.1 移位指令 134

6.3.2 移位操作的应用 135

6.3.3 右移对指令 135

6.3.4 提取指令和存放指令 135

6.4 SCANTEXT:处理字节 137

6.5 整数乘法和除法 138

6.5.1 乘法的Booth算法 138

6.5.2 无符号乘法 141

6.5.3 使用已知倒数的除法 141

6.6 DECNUM:将整数转换成十进制格式 143

6.7 使用C语言进行ASCII输入和输出 145

6.7.2 IO_C:一个简单的测试程序 146

6.7.1 GETPUT:封装C函数 146

6.7.3 其他概念 148

6.8 BACKWARD:使用字节操作 148

本章总结 150

参考文献 151

练习题 152

第7章 子例程、过程和函数 155

7.1 存储器栈 155

7.1.1 CISC体系结构的栈寻址 155

7.1.2 装入/存储体系结构的栈寻址 156

7.1.3 安腾体系结构的栈寻址 156

7.1.4 用户定义的栈 158

7.2 DECNUM2:使用栈操作 159

7.3 寄存器栈 161

7.3.1 SPARC?寄存器窗 162

7.3.2 安腾寄存器栈 163

7.3.3 alloc指令 163

7.3.4 寄存器栈引擎(RSE) 164

7.3.5 存储体寄存器 164

7.4 程序分段 165

7.4.1 源级模块性 165

7.4.2 传统子例程 166

7.4.3 协同例程 166

7.4.4 过程和函数 167

7.4.5 共享库函数 167

7.5 调用约定 167

7.5.2 调用和返回转移指令 168

7.5.1 寄存器竞争和使用约定 168

7.5.3 变元传送:位置 171

7.5.4 变元传送:方法 172

7.5.5 开始部分和结束部分 172

7.5.6 .regstk命令 176

7.6 DECNUM3和BOOTH:建立一个函数 176

7.6.1 定义接口 176

7.6.2 BOOTH:可调用的函数 177

7.6.3 DECNUM3:测试程序 178

7.6.4 位置独立的代码 180

7.7 整数商和余数 181

7.7.1 高级语言使用的例程 181

7.8 RANDOM:一个可调用的函数 182

7.7.2 Intel公司的开放源例程 182

7.8.1 选择一个算法 183

7.8.2 RANDOM:函数的开发 183

7.8.3 高级语言调用程序 186

本章总结 187

参考文献 188

练习题 189

第8章 浮点操作 191

8.1 整数指令和浮点指令之间的并行性 191

8.2 浮点值的表示 192

8.2.1 IEEE特殊值 192

8.2.2 安腾浮点寄存器中的值 193

8.3.1 浮点存储指令 194

8.3 复制浮点数据 194

8.3.2 浮点装入指令 195

8.3.3 浮点装入对指令 196

8.3.4 用于寄存器-寄存器复制的浮点伪指令 197

8.3.5 浮点合并指令 198

8.4 浮点算术指令 198

8.4.1 加法、减法和乘法 198

8.4.2 熔丝型乘-加和乘-减指令 199

8.4.3 规范化为另一个特例 200

8.4.4 最大值和最小值操作 200

8.4.5 舍入、异常和浮点控制 200

8.5 HORNER:计算一个多项式 201

8.6 基于浮点值的判断 203

8.6.1 浮点比较指令 204

8.6.2 浮点类指令 204

8.7 浮点执行部件中的整数操作 205

8.7.1 数据转换指令 206

8.7.2 整数乘法指令 208

8.7.3 乘法策略 209

8.7.4 浮点逻辑指令 209

8.8 倒数和平方根的近似 209

8.8.1 浮点倒数的近似 210

8.8.2 倒数平方根的近似 211

8.8.3 浮点除法 211

8.9 APPROXPI:使用浮点指令 212

8.8.4 Intel公司的开放源例程 212

本章总结 216

参考文献 216

练习题 217

第9章 文本的输入和输出 219

9.1 文件系统 220

9.1.1 Unix?I/O软件 220

9.1.2 Linux?I/O软件 221

9.2 键盘和显示器I/O 221

9.2.1 未格式化的I/O行 221

9.2.2 格式化的I/O 222

9.3 SCANTERM:使用C的标准I/O 223

9.4 SORTSTR:排序串 226

9.5.1 目录级的访问 230

9.5 文本文件I/O 230

9.5.2 未格式化的I/O行 231

9.5.3 格式化的I/O 232

9.6 SCANFILE:文件的输入输出 232

9.7 SORTINT:对文件中的整数进行排序 236

9.8 二进制文件 240

本章总结 241

参考文献 241

练习题 241

第10章 性能考虑 244

10.1 处理器级的并行性 244

10.1.1 简化的指令流水线 244

10.1.2 超标量流水线 245

10.1.3 安腾2处理器流水线 246

10.1.4 流水线冒险 247

10.2 指令级并行性 249

10.2.1 RISC方法 249

10.2.2 VLIW思想 250

10.2.3 EPIC:体系结构发展的一个方向 250

10.3 安腾处理器中的显式并行性 250

10.3.1 指令模板 251

10.3.2 数据相关和猜测 254

10.3.3 控制相关和猜测 257

10.3.4 组合的控制和数据猜测 258

10.4 软件流水线循环 258

10.4.2 软件流水线 259

10.4.1 传统的循环展开 259

10.4.3 循环式寄存器 260

10.4.4 循环阶段 260

10.4.5 软件流水线的转移指令 261

10.5 按模调度一个循环 262

10.5.1 DOTCTOP:独立实现的调度 262

10.5.2 DOTCTOP2:安腾2处理器的调度 266

10.5.3 进一步的考虑 267

10.6 程序优化因素 269

10.6.1 指令宽度 269

10.6.2 寻址方式 270

10.6.3 指令能力 270

10.6.4 程序长度 270

10.6.7 指令重新排序 271

10.6.6 直接插入式函数的使用 271

10.6.5 将数据预取到高速缓存中 271

10.6.8 递归及相关因素 272

10.7 斐波纳契数 272

10.7.1 FIB1:使用递归的函数 273

10.7.2 FIB2:无递归的函数 275

10.7.3 FIB3:使用寄存器栈的函数 275

10.7.4 TESTFIB:显示递归的开销 276

本章总结 278

参考文献 278

练习题 279

第11章 查看编译程序的输出 281

11.1 类RISC系统的编译程序 281

11.1.1 开放源码编译程序的优化级别 282

11.1.2 Intel编译程序的优化级别 283

11.1.3 HP UX编译程序的优化级别 284

11.1.4 附加的优化可能性 284

11.2 编译一个简单程序 285

11.2.1 比较gcc和ecc(Linux)的输出 286

11.2.2 比较gcc和g77(Linux)的输出 289

11.2.3 比较cc_bundled和f90(HP-UX)的输出 292

11.3 优化一个简单程序 295

11.3.1 比较g77(Linux)的-O1级别和-O2级别的输出 296

11.3.2 编译程序信息 298

11.3.3 f90(HP-UX)的循环的长度和优化 299

11.4 直接插入式优化 304

11.6 调试经过优化的程序 306

11.5 剖面制导的优化或其他优化 306

11.7 重访斐波纳契数的递归 307

本章总结 309

参考文献 310

练习题 311

第12章 并行操作 313

12.1 计算系统的分类 313

12.2 整数并行操作 315

12.3 整数乘法的应用 316

12.3.1 源操作数32×32位得到32位无符号乘积 316

12.3.2 源操作数32×32位得到64位无符号数 317

12.5 浮点并行操作 319

12.4 机遇和挑战 319

12.6 支持并行处理的信号量 320

12.6.1 先前的体系结构 321

12.6.2 安腾体系结构 321

本章总结 324

参考文献 324

练习题 325

第13章 实现方法的变异 326

13.1 为什么改变实现方法 327

13.1.1 需求和机遇 327

13.1.2 摩尔定律的含义 327

13.1.3 期望体系结构具有较长的生命周期 328

13.2 如何改变实现方法 328

13.3.1 与安腾2处理器的对比 329

13.3 最初的安腾处理器 329

13.3.2 高速缓存的层次结构 330

13.3.3 执行部件和发射端口 331

13.3.4 流水线 331

13.3.5 等待因子 332

13.3.6 转移预测 332

13.3.7 其他区别和特征 334

13.4 软件的主要作用 334

13.4.1 新的体系结构 335

13.4.2 新的实现方法 335

13.4.3 新的指令或者更多的寄存器 336

13.6 确定扩展和实现方案 337

13.5 IA-32指令集模式 337

本章总结 338

参考文献 338

练习题 340

附录A 命令行环境 341

参考文献 344

练习题 344

附录B 推荐的系统资源 345

B.1 系统硬件 345

B.1.1 安腾工作站或服务器 345

B.1.2 IA-32 Linux系统上的Ski模拟器 345

B.1.3 Linux虚拟机上的Ski模拟器 346

B.1.4 其他模拟器 346

B.2.1 Linux 347

B.2.2 HP-UX 347

B.2 系统软件 347

B.2.3 Ski模拟器 348

B.2.4 64位Windows? 350

B.2.5 FreeBSD 350

B.2.6 OpenVMS? 351

B.3 桌面客户访问软件 351

B.3.1 Linux个人计算机 351

B.3.2 Macintosh个人计算机 351

B.3.3 Windows个人计算机 352

参考文献 353

附录C 安腾指令集 354

表C-1 按功能排列的安腾指令 354

表C-2 按汇编程序操作码排列的安腾指令 360

参考文献 366

附录D 安腾寄存器及其用途 367

D.1 指令指示字 367

D.2 通用寄存器和NaT位 367

D 3 谓词寄存器 369

D.4 转移寄存器 369

D.5 浮点寄存器 370

D.6 应用寄存器 370

D.7 状态管理寄存器 372

D.8 系统信息寄存器 373

D.9 系统控制寄存器 373

参考文献 374

E.1 显式停止的干扰 375

附录E 条件汇编和宏(GCC汇编程序) 375

E.2 重复块 376

E.2.1 简单重复块 376

E.2.2 使用.irp命令的不定重复块 377

E.2.3 使用.irpc命令的不定重复块 378

E.3 条件汇编 379

E.4 宏的处理 380

E.4.1 宏的定义 381

E.4.2 宏的调用 381

E 4.3 定位参数的处理 383

E.4.4 默认值和关键词参数的处理 383

E.4.5 串参数的处理 384

E.5 宏标号的使用 384

E.6 递归宏 385

E.7 目标文件段 386

E.8 MONEY:用于说明段的宏 387

本章总结 389

参考文献 390

练习题 390

附录F 直接插入式汇编 392

F.1 HP-UX的C编译程序 392

F.2 用于Linux的GCC编译程序 394

F.3 Intel的Linux编译程序 395

参考文献 395

参考文献汇总 396

部分练习题答案及提示 403

术语表 410