当前位置:首页 > 工业技术
64位微处理器系统编程和应用编程
64位微处理器系统编程和应用编程

64位微处理器系统编程和应用编程PDF电子书下载

工业技术

  • 电子书积分:20 积分如何计算积分?
  • 作 者:周明德编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2009
  • ISBN:9787302207757
  • 页数:726 页
图书介绍:本书综合了Intel公司和AMD公司的x86系列的64位处理器的应用和系统编程。反映了当代微处理器的最新发展。本书详尽介绍了64位处理器的应用编程,也介绍了64处理器体系结构系统编程的主要方面,对于应用编程和系统编程的开发者都是十分重要和有用的。
《64位微处理器系统编程和应用编程》目录

第1章 引言 1

1.1符号约定 1

1.1.1位与字节顺序 1

1.1.2保留位与软件兼容性 1

1.1.3十六进制与二进制数 2

1.1.4分段的寻址 2

1.1.5对CPUID、CR和MSR值的新句法 3

1.1.6异常 3

1.2 Intel 64和IA-32体系结构的简要历史 4

1.2.1 16位处理器与分段 4

1.2.2 Intel 286处理器 4

1.2.3 Intel 386处理器 4

1.2.4 Intel 486处理器 4

1.2.5 Intel Pentium(奔腾)处理器 5

1.2.6处理器的P6族(系列) 5

1.2.7 Intel Pentium 4处理器系列 6

1.2.8 Intel Xeon处理器 6

1.2.9 Intel Pentium M处理器 6

1.2.10 Intel Pentium处理器极品版 6

1.2.11 Intel Core Duo和Intel Core Solo处理器 7

1.2.12 Intel Xeon处理器5100系列和Intel Core 2处理器系列 7

1.3更多的关于特定的先进技术 8

1.3.1 P6族微体系结构 8

1.3.2 Intel NetBurst微体系结构 9

1.3.3 Intel Core微体系结构 11

1.3.4 SIMD指令 13

1.3.5超线程技术 14

1.3.6多核技术 15

1.3.7 Intel 64体系结构 16

1.3.8 Intel虚拟化技术 17

第2章 基本执行环境 18

2.1操作方式 18

2.1.1 Intel 64体系结构 18

2.1.2 x86-64的操作方式 19

2.2基本执行环境概要 21

2.2.1 64位方式执行环境 22

2.3内存组织 24

2.3.1 IA-32方式 25

2.3.2分页和虚拟存储器 26

2.3.3 64位方式的内存组织 26

2.3.4操作方式与内存模型 26

2.3.5 32位和16位地址与操作数尺寸 26

2.3.6在保护方式扩展的物理寻址 27

2.3.7在64位方式的地址计算 27

2.4基本程序执行寄存器 28

2.4.1通用寄存器 28

2.4.2段寄存器 30

2.4.3 EFLAGS寄存器 32

2.5指令指针 35

2.6操作数尺寸和地址尺寸属性 35

2.7操作数寻址 36

2.7.1立即数 37

2.7.2寄存器操作数 37

2.7.3存储器操作数 38

2.7.4规定段选择子 38

2.7.5规定偏移量 39

2.7.6汇编程序和编译器寻址方式 40

2.7.7 I/O端口寻址 40

第3章 数据类型 41

3.1基本数据类型 41

3.2数字数据类型 42

3.2.1整数 42

3.2.2浮点数据类型 43

3.3指针数据类型 45

3.4位字段数据类型 46

3.5串数据类型 46

3.6组合的SIMD数据类型 47

3.6.1 64位SIMD组合的数据类型 47

3.6.2 128位组合的SIMD数据类型 47

3.7 BCD和组合的BCD整数 48

3.8实数和浮点格式 49

3.8.1实数系统 49

3.8.2浮点格式 49

3.8.3实数和非数字编码 51

3.8.4舍入 54

3.9浮点异常概要 55

3.9.1浮点异常条件 56

3.9.2浮点异常优先权 59

3.9.3浮点异常处理程序的典型动作 60

第4章Intel 64 (AMD x86-64)和IA-32系统体系结构概要 61

4.1系统级体系结构概要 62

4.1.1全局和局部描述符表 62

4.1.2系统段、段描述符和门 64

4.1.3任务状态段和任务门 64

4.1.4中断和异常处理 65

4.1.5存储管理 65

4.1.6系统寄存器 66

4.1.7其他系统资源 66

4.2操作方式 67

4.3在EFLAGS寄存器中的系统标志和字段 68

4.4存储管理寄存器 70

4.4.1全局描述符表寄存器(GDTR) 70

4.4.2局部描述符表寄存器(LDTR) 70

4.4.3中断描述符表寄存器(IDTR) 70

4.4.4任务寄存器(TR) 71

4.5控制寄存器 71

4.6系统指令概要 75

4.6.1装入和存储系统寄存器 77

4.6.2验证访问权 77

4.6.3装入和存储调试寄存器 77

4.6.4无效缓存和TLB 78

4.6.5控制处理器 78

4.6.6读性能监视和时戳计数器 78

4.6.7读和写模型特定寄存器 79

第5章 保护方式存储管理 80

5.1存储管理概要 80

5.2使用分段 81

5.2.1基本平面模型 81

5.2.2保护的平面模型 82

5.2.3多段模型 82

5.2.4在IA-32e方式中的分段 83

5.2.5分页和段 83

5.3物理地址空间 84

5.4逻辑和线性地址 84

5.4.1在IA-32e方式中逻辑地址的转换 85

5.4.2段选择子 85

5.4.3段寄存器 85

5.4.4在IA-32e方式中的段装入指令 86

5.4.5段描述符 87

5.5系统描述符类型 90

5.5.1段描述符表 91

5.5.2在IA-32e方式中的段描述符表 92

5.6分页(虚拟存储器)概要 93

5.6.1分页选项 93

5.6.2页表和页目录 94

5.7使用32位物理寻址的页转换 94

5.7.1线性地址转换(4KB页) 94

5.7.2线性地址转换(4MB页) 95

5.7.3混合4KB和4MB页 96

5.7.4内存混合 96

5.7.5页目录的基地址 96

5.7.6页目录和页表项 96

5.7.7页目录和页项不存在 99

5.8使用PAE分页机制的36位物理寻址 99

5.8.1增强的传统PAE分页 100

5.8.2具有PAE启用的(4KB页)的线性地址转换 100

5.8.3具有PAE启用的(2MB页)的线性地址转换 101

5.8.4访问具有扩展的页表结构的全扩展物理地址空间 101

5.8.5具有扩展的地址启用的页目录和页表 102

5.9使用PSE-36分页机制的36位物理寻址 103

5.10在IA-32e方式中PAE启用的分页 104

5.10.1 IA-32e方式线性地址转换(4KB页) 105

5.10.2 IA-32e方式线性地址转换(2MB页) 106

5.10.3增强的分页数据结构 106

5.11映射段至页 109

5.12转换查找缓冲器 110

5.13输入输出 111

5.13.1 I/O端口寻址 111

5.13.2 I/O端口硬件 111

5.13.3 I/O地址空间 111

5.13.4 I/O指令 112

5.13.5保护方式I/O 113

5.13.6顺序I/O 114

第6章 内存缓存控制 116

6.1内部缓存、TLB和缓冲器 116

6.2缓存的术语 119

6.3缓存可用的方法 120

6.3.1写组合内存单元的缓冲 121

6.3.2选择内存类型 122

6.3.3在不可缓存的内存中取代码 123

6.4缓存控制协议 123

6.5缓存控制 123

6.5.1缓存控制寄存器和位 124

6.5.2缓存控制的优先级 126

6.5.3阻止缓存 127

6.5.4禁止和启用L3缓存 128

6.5.5缓存管理指令 128

6.5.6 L1数据缓存环境方式 129

6.6自修改代码 129

6.7隐含的缓存(Pentium 4、 Intel Xeon和P6族处理器) 129

6.8显式缓存 130

6.9无效转换查找缓冲器 130

6.10存储缓冲器 131

6.11内存类型范围寄存器 131

6.11.1 MTRR特性标识 132

6.11.2用MTRR设置内存范围 133

6.11.3基地址和屏蔽计算举例 136

6.11.4范围尺寸和对齐要求 137

6.11.5 MTRR初始化 138

6.11.6重新映射内存类型 138

6.11.7 MTRR维护编程接口 138

6.11.8在MP系统中MTRR考虑 141

6.11.9大页尺寸考虑 142

6.12页属性表(PAT) 142

6.12.1检测对PAT特性的支持 143

6.12.2 IA32_ CR_ PAT MSR 143

6.12.3从PAT选择一内存类型 144

6.12.4编码PAT 144

第7章 保护 146

7.1启用与禁止段和页保护 146

7.2段级和页级保护所用的字段与标志 147

7.3界限检查 149

7.4类型检查 150

7.5特权级 151

7.6当访问数据段时的特权级检查 152

7.7当装入SS寄存器时的特权级检查 154

7.8在码段之间传送程序控制的特权级检查 154

7.8.1直接调用或跳转至码段 154

7.8.2门描述符 156

7.8.3调用门 156

7.8.4通过调用门访问码段 158

7.8.5堆栈切换 160

7.8.6从被调用过程返回 162

7.8.7用SYSENTER和SYSEXIT指令执行快速调用至系统过程 162

7.8.8在64位方式中快速系统调用 164

7.9特权指令 165

7.10指针确认 166

7.10.1访问权检查(LAR指令) 166

7.10.2检查读写权限(VERR和VERW指令) 166

7.10.3检查偏移量在界限内(LSL指令) 167

7.10.4调整调用者的访问权(ARPL指令) 167

7.10.5检查对齐 169

7.11页级保护 169

7.11.1页保护标志 169

7.11.2限制可寻址的域 169

7.11.3页类型 169

7.11.4组合页表的两级保护 170

7.11.5超越页保护 171

7.12组合页与段保护 171

7.13页级保护与执行禁止位 171

7.13.1检测与启用执行禁止位功能 172

7.13.2执行禁止位页保护 172

7.13.3保留位检查 173

7.13.4异常处理 174

第8章 中断和异常处理 175

8.1中断和异常概要 175

8.2异常和中断向量 175

8.3中断源 177

8.3.1外部中断 177

8.3.2可屏蔽的硬件中断 177

8.3.3软件生成的中断 177

8.4异常的源 178

8.4.1程序差错异常 178

8.4.2软件生成的中断 178

8.4.3机器检查异常 178

8.5异常分类 178

8.6程序或任务重启动 179

8.7非屏蔽中断 180

8.8启用与禁止中断 180

8.8.1屏蔽可屏蔽的硬件中断 180

8.8.2屏蔽指令断点 181

8.8.3屏蔽当切换堆栈时的异常和中断 181

8.9在同时发生中断和异常之间的优先级 181

8.10中断描述符表(IDT) 182

8.11 IDT描述符 183

8.12异常和中断处理 184

8.12.1异常或中断处理程序过程 185

8.12.2中断任务 187

8.13出错码 188

8.14在64位方式中的异常和中断处理 188

8.14.1 64位方式IDT 189

8.14.2 64位方式堆栈帧 190

8.14.3在IA-32e方式中的IRET 190

8.14.4在IA-32e方式中的堆栈切换 190

8.14.5中断堆栈表 191

8.15异常和中断引用 191

8.15.1中断0——除法错误异常(# DE) 192

8.15.2中断1——调试异常(# DB) 192

8.15.3中断2—— NMI中断 193

8.15.4中断3——断点异常(#BP) 193

8.15.5中断4——溢出异常(# OF) 194

8.15.6中断5——BOUND范围超出异常(#BR) 194

8.15.7中断6——无效操作码异常(# UD) 194

8.15.8中断7——设备不可用异常(# NM) 195

8.15.9中断8——双故障异常(# DF) 196

8.15.10中断9——协处理器段超出 198

8.15.11中断10——无效异常(# TS) 198

8.15.12中断11——段不存在(# NP) 201

8.15.13中断12——堆栈故障异常(# SS) 202

8.15.14中断13——通用保护异常 202

8.15.15中断14——页故障异常 204

8.15.16中断15——x87 FPU浮点出错(# MF) 207

8.15.17中断16——对齐检查异常(# AC) 208

8.15.18中断17——机器检查异常处理程序(# MC) 209

8.15.19中断18—— SIMD浮点异常(# XF) 210

8.15.20中断32~255——用户定义的中断 211

第9章 指令集小结 213

9.1通用指令 214

9.1.1数据传送指令 214

9.1.2二进制算术运算指令 221

9.1.3十进制算术运算指令 225

9.1.4逻辑指令 227

9.1.5移位和旋转指令 228

9.1. 6位和字节指令 230

9.1.7控制传送指令 233

9.1.8串指令 243

9.1.9 I/O指令 247

9.1.10进入和离开指令 249

9.1.11标志控制指令 250

9.1.12段寄存器指令 254

9.1.13杂项指令 254

9.2 x87 FPU指令 256

9.2.1 x87 FPU数据传送指令 256

9.2.2 x87 FPU基本算术运算指令 260

9.2.3 x87 FPU比较指令 270

9.2.4 x87 FPU超越指令 273

9.2.5 x87 FPU装入常数指令 278

9.2.6 x87 FPU控制指令 278

9.3 x87 FPU和SIMD状态管理指令 282

9.4 MMX指令 288

9.4.1 MMX数据传送指令 288

9.4.2 MMX转换指令 289

9.4.3 MMX组合的算术运算指令 291

9.4.4 MMX比较指令 295

9.4.5 MMX逻辑指令 295

9.4.6 MMX移位和旋转指令 296

9.4.7 MMX状态管理指令 298

9.5 SSE指令 298

9.5.1 SSE SIMD单精度浮点指令 298

9.5.2 SSE MXCSR状态管理指令 310

9.5.3 SSE 64位SIMD整数指令 311

9.5.4 SSE缓存控制、预取和指令按序指令 314

9.6 SSE2指令 316

9.6.1 SSE2组合的和标量双精度浮点指令 317

9.6.2 SSE2组合的单精度浮点指令 329

9.6.3 SSE2 128位SIMD整数指令 330

9.6.4 SSE2缓存控制指令和按序指令 333

9.7 SSE3指令 336

9.7.1 SSE3 x87 FPU整数转换指令 336

9.7.2 SSE3特定的128位未对齐的数据装入指令 337

9.7.3 SSE3 SIMD浮点组合的加/减指令 337

9.7.4 SSE3 SIMD浮点水平加/减指令 338

9.7.5 SSE3 SIMD浮点装入/传送/复制指令 341

9.7.6 SSE3代理同步指令 342

9.8补充的流扩展3指令 344

9.8.1水平加减指令 344

9.8.2组合的绝对值 345

9.8.3乘和加组合的符号的和无符号的字节 345

9.8.4用舍入和伸缩组合地乘高 345

9.8.5组合地抽取字节 346

9.8.6组合的符号 346

9.8.7组合的右对齐 346

9.9系统指令 347

9.10 64位方式指令 360

第10章用x87 FPU编程 363

10.1 x87 FPU执行环境 363

10.1.1在64位方式和兼容方式中的x87 FPU 364

10.1.2 x87 FPU数据寄存器 364

10.1.3 x87 FPU状态寄存器 365

10.1.4条件分支和条件传送 367

10.1.5 x87 FPU控制字 368

10.1.6无穷大控制标志 369

10.1.7 x87 FPU标记字 369

10.1.8 x87 FPU指令和数据指针 370

10.1.9最后的指令操作码 370

10.1.10用FSTENV/FNSTENV和FSAVE/FNSAVE保存x87 FPU的状态 371

10.1.11用FXSAVE保存x87 FPU的状态 372

10.2 x87 FPU数据类型 372

10.2.1不确定 373

10.2.2不支持的扩展双精度浮点编码和伪非规格化 373

10.3 x87 FPU指令集 374

10.3.1换码指令 375

10.3.2 x87 FPU指令操作数 375

10.3.3数据传送指令 375

10.3.4装入常数指令 376

10.3.5基本算术运算指令 376

10.3.6比较和分类指令 378

10.3.7三角函数指令 379

10.3.8 π 380

10.3.9对数、指数和伸缩 381

10.3.10超越指令精度 381

10.3.11 x87 FPU控制指令 381

10.3.12等待的与非等待的指令 382

10.3.13不支持的x87 FPU指令 382

10.4 x87 FPU浮点异常处理 383

10.4.1算术与非算术指令 383

10.5 x87 FPU浮点异常条件 384

10.5.1无效操作异常 384

10.5.2非规格化操作数异常(# D) 386

10.5.3被零除异常(# Z) 386

10.5.4数字溢出异常(# O) 386

10.5.5数字下溢异常(# U) 387

10.5.6不精确结果(精度)异常(# P) 388

10.6 x87 FPU异常同步 388

10.7用软件处理x87 FPU异常 389

10.7.1本身方式 389

10.7.2 MS-DOS兼容子方式 390

10.7.3用软件处理x87 FPU异常 390

10.8 8087程序设计举例 391

第11章64位和128位媒体与科学编程 419

11.1概要 420

11.2能力 420

11.2.1并行操作 421

11.2.2数据转换和重组 422

11.2.3矩阵运算 425

11.2.4饱和 426

11.2.5分支删除 426

11.2.6浮点向量运算 427

11.3 MMX技术、SSE和SSE2编程环境 428

11.3.1在64位方式和兼容方式中的SSE 428

11.3.2 MMX寄存器 429

11.3.3 XMM寄存器 429

11.3.4 MXCSR控制和状态寄存器 430

11.3.5 SSE扩展与SSE2/SSE3/MMX和x87 FPU的兼容性 433

11.3.6其他寄存器 433

11.3.7 rFLAGS寄存器 433

11.4操作数 433

11.4.1数据类型 434

11.4.2操作数尺寸和超越 436

11.4.3操作数寻址 436

11.4. 4数据对齐 436

11.4.5整型数据类型 437

11.4.6 64位媒体浮点数据类型 438

11.4.7 128位媒体浮点数据类型 439

11.4.8浮点数表示 440

11.4.9浮点数编码 442

11.4.10浮点舍入 444

11.5指令摘要——整型指令 444

11.5.1语法 445

11.5.2退出媒体状态 446

11.5.3数据传送 446

11.5.4数据转换 450

11.5.5数据重组 450

11.5.6算术运算 454

11.5.7移位 459

11.5.8比较 460

11.5.9逻辑指令 462

11.5.10保存和恢复状态 462

11.6指令摘要——浮点指令 463

11. 6.1语法 463

11.6.2数据转换 463

11.6.3数据传送 465

11.6.4数据重组 467

11.6.5算术运算 469

11.6.6比较 473

11.6.7 128位媒体逻辑指令 475

11.6.8存储顺序指令 475

11.6.9 PAUSE指令 476

11.7指令对标志的影响 476

11.8指令前缀 476

11.8.1支持的前缀 476

11.8.2特殊使用和保留的前缀 477

11.8.3引起异常的前缀 477

11.9特征检测 477

11.10异常 477

11.10.1通用异常 478

11.10.2 x87浮点异常(# MF) 479

11.10.3 128位媒体指令引起的SIMD浮点异常 479

11.10.4生成 SIMD浮点异常 482

11.10.5 SIMD异常处理 482

11.10.6 SIMD浮点异常优先级 483

11.10.7 SIMD和x87 FPU浮点异常的交互作用 485

11.11在执行64位媒体指令上采取的动作 485

11.12混合媒体码和x87码 486

11.12.1混合代码 486

11.12.2清MMXTM状态 487

11.13状态保存 487

11.13.1状态保存和恢复 487

11.13.2状态保存指令 487

11.13.3参数传递 488

11.13.4在MMX寄存器中访问操作数 488

11.14性能考虑 488

11.14.1用小的操作数尺寸 488

11.14.2为并行操作重组织数据 489

11.14.3删除分支 489

11.14.4用流存储 489

11.14.5对齐数据 489

11.14.6为可缓存性组织数据 489

11.14.7预取数据 489

11.14.8为传送数据用128位媒体码 490

11.14.9保留中间结果至MMX或XMM寄存器中 490

11.14.10用128位媒体码替换GPR码 490

11.14.11用128位媒体码替换x87码 490

11.15用SSE/SSE2扩展的应用程序 490

11.15.1使用SSE/SSE2扩展的通用指南 490

11.15.2检查对SSE/SSE2的支持 491

11.15.3检查在MXCSR寄存器中的DAZ标志 491

11.15.4 SSE/SSE2扩展的初始化 491

11.15.5保存和恢复SSE/SSE2状态 492

11.15.6写MXCSR寄存器的指南 492

11.15.7 SSE/SSE2指令与x87 FPU和MMX指令的交互作用 493

11.15.8 SIMD和x87 FPU浮点数据类型的兼容性 493

11.15.9混合组合的和标量浮点与128位SIMD整数指令与数据 493

11.15.10与SSE/SSE2过程和函数的接口 494

11.15.11用128位SIMD整数指令更新已存在的MMX技术例程 495

11.15.12在算术运算上的分支 495

11.15.13线索指令的可缓存性 495

11.15.14指令前缀对SSE/SSE2指令的影响 496

11.16应用举例:基于MMX/SSE/SSE2的H·264解码器关键算法优化 497

11.16.1 H·264解码器关键算法优化 497

11.16.2性能测试结果 500

11.16.3结论 501

第12章用SSE3和追加的SSE3编程 502

12.1 SSE3/SSSE3编程环境和数据类型 502

12.1.1 SSE3/SSSE3在64位方式和兼容方式中 502

12.1.2 SSE3/SSSE3与MMX技术、x87 FPU环境和SSE/SSE2扩展的兼容性 502

12.1.3水平的和不对称的处理 502

12.2SSE3指令的概要 503

12.3SSE3指令 503

12.3.1 x87 FPU整数转换的指令 503

12.3.2特殊的128位未对齐数据装入的SIMD整数指令 504

12.3.3增强LOAD/MOVE/DUPLICATE性能的SIMD浮点指令 504

12.3.4提供组合的加/减的SIMD浮点指令 504

12.3.5提供水平加/减的SIMD浮点指令 505

12.3.6两条线程同步指令 505

12.4用SSE3扩展写应用程序 506

12.4.1使用SSE3扩展的指南 506

12.4.2检查对SSE3的支持 506

12.4.3对于SIMD浮点计算启用FTZ和DAZ 506

12.4.4与SSE/SSE2扩展编程SSE3 506

12.5 SSSE3指令概要 507

12.6 SSSE3指令 507

12.6.1水平加/减 507

12.6.2组合的绝对值 508

12.6.3乘和加组合的符号和无符号字节 508

12.6.4组合的乘高与舍入和比例 508

12.6.5组合的搅乱字节 508

12.6.6组合的符号 509

12.6.7组合的右对齐 509

12.7用SSSE3扩展写应用程序 509

12.7.1使用SSSE3扩展的指南 509

12.7.2检查对SSSE3的支持 509

12.8 SSE3/SSSE3异常 509

12.8.1设备不可用异常 509

12.8.2数字出错标志和IGNNE 510

12.8.3仿真 510

第13章 任务管理 511

13.1任务管理概要 511

13.1.1任务结构 511

13.1.2任务状态 511

13.1.3执行任务 512

13.2任务管理数据结构 513

13.2.1任务状态段 513

13.2.2 TSS描述符 515

13.2.3在64位方式中的TSS描述符 516

13.2.4任务寄存器 516

13.2.5任务门描述符 517

13.3任务切换 518

13.4任务链接 521

13.4.1使用忙标志以防止递归的任务切换 522

13.4.2修改任务链接 522

13.5任务地址空间 522

13.5.1映射任务至线性和物理地址空间 523

13.5.2任务线性地址空间 523

13.6 16位任务状态段 524

13.7在64位方式中的任务管理 525

第14章 调试与性能监视 527

14.1调试支持设施的概要 527

14.2调试寄存器 528

14.2.1调试地址寄存器(DR0~DR3) 529

14.2.2调试寄存器DR4、DR5. 529

14.2.3调试状态寄存器(DR6) 529

14.2.4调试控制寄存器(DR7) 530

14.2.5断点字段识别 531

14.2.6调试寄存器和Intel 64处理器 532

14.3调试异常 532

14.3.1调试异常(#DB)——中断向量1 532

14.3.2断点异常(#BP)——中断向量3 535

14.4最后分支记录概要 535

14.5最后分支、中断和异常记录(Intel Core 2 Duo处理器族) 535

14.5.1 IA32_ DEBUGCTL MSR 535

14.5.2 BTS和相关的设施 537

14.6最后分支、中断和异常记录(基于Intel NetBurst微体系结构处理器) 538

14.6.1 CPI确定的最后分支记录机制 539

14.6.2 MSR_ DEBUGCTLA MSR 540

14.6.3 LBR堆栈 541

14.6.4监视的分支、异常和中断 542

14.6.5在分支、异常和中断上单步 542

14.6.6分支追踪消息 543

14.6.7最后异常记录 543

14.6.8分支踪迹存储 543

14.7最后分支、中断和异常记录(Intel Core Solo和Intel Core Duo处理器) 546

14.8最后分支、中断和异常(Pentium M处理器) 547

14.9最后分支、中断和异常记录(P6族处理器) 548

14.9.1 DEBUGCTLMSR寄存器 549

14.9.2最后分支和最后异常MSR 549

14.9.3监视的分支、异常和中断 550

14.10时戳计数器 550

14.11性能监视概要 551

14.12体系结构的性能监视 552

14.12.1体系结构性能监视版本1 552

14.12.2体系结构性能监视版本2 554

14.12.3预定义的体系结构性能事件 556

14.13性能监视(Intel Core Solo和Intel Core Duo处理器) 558

14.14性能监视(基于Intel Core微体系结构处理器) 559

14.14.1固定功能性能计数器 560

14.14.2全局计数器控制设施 560

14.14.3在撤出点的事件 562

14.14.4基于采样的精确事件 562

14.15性能监视(基于Intel NetBurst微体系结构的处理器) 564

14.15.1 ESCR MSR 568

14.15.2性能计数器 569

14.15.3 CCCR MSR 570

14.15.4调试存储机制 571

14.15.5 DS保存区域 571

14.15.6为非撤出事件编程性能计数器 575

14.15.7在撤出时计数 580

14.15.8基于采样的精确事件 582

14.15.9操作系统暗示 583

14.16性能监视和超线程技术 583

14.16.1 ESCR MSR 584

14.16.2 CCCR MSR 584

14.16.3 IA32_ PEBS_ ENABLE MSR 586

14.16.4性能监视事件 586

14.17计数时钟 587

14.17.1非暂停的时钟滴答 588

14.17.2非睡眠时钟滴答 588

14.17.3增量时戳计数器 589

14.17.4未暂停的基准时钟滴答 589

14.17.5周期计数和机会主义的处理器操作 589

14.18性能监视和双核技术 590

14.19在64位具有8MB L3缓存的Intel Xeon处理器MP上的性能监视 590

14.20在双核Intel Xeon处理器7100系列上的性能监视 592

14.20.1 GBSQ事件接口 593

14.20.2 GSNPQ事件接口 594

14.20.3 FSB事件计数 595

14.20.4公共事件控制接口 596

第15章 先进的可编程的中断控制器 598

15.1当地和I/O APIC概要 598

15.2系统总线与APIC总线 600

15.3 Intel 82489DX外部APIC、 APIC和xAPIC 601

15.4当地APIC 601

15.4.1当地APIC方框图 601

15.4.2当地APIC的存在 604

15.4.3启用或禁止当地APIC 604

15.4.4当地APIC状态和位置 604

15.4.5当地APIC寄存器的重定位 605

15.4.6当地APIC ID 605

15.4.7当地APIC状态 605

15.4.8当地APIC版本寄存器 607

15.5处理当地中断 607

15.5.1当地向量表 607

15.5.2有效的中断向量 609

15.5.3差错处理 610

15.5.4 APIC定时器 611

15.5.5当地中断接受 612

15.6发出处理器间中断 612

15.6.1中断命令寄存器 612

15.6.2确定IPI目的 615

15.6.3 IPI交付和接收 618

15.7系统和总线仲裁 618

15.8处理中断 619

15.8.1 Pentium 4和Intel Xeon处理器的中断处理 619

15.8.2中断、任务和处理器优先级 619

15.8.3对于固定中断的接收 620

15.8.4通知中断服务完成 621

15.8.5在IA-32e方式中任务优先级 622

15.9伪中断 623

15.10消息通知的中断 623

15.10.1消息地址寄存器格式 624

15.10.2消息数据寄存器格式 625

第16章 多处理器管理 626

16.1锁定的原子操作 627

16.1.1保证的原子操作 627

16.1.2总线锁定 628

16.1.3处理自修改代码和交叉修改代码 629

16.1.4在处理器内部缓存中的LOCK操作的影响 630

16.2内存顺序 630

16.2.1在Pentium和Intel 486处理器中的内存顺序 631

16.2.2在P6和更近代处理器族中时的内存顺序 631

16.2.3对于串操作的超出顺序存储 632

16.2.4强或弱内存顺序模型 633

16.3传播页表和页目录项修改至多处理器 634

16.4串行化指令 634

16.5多处理器初始化 635

16.5.1 BSP和AP处理器 636

16.5.2 MP初始化协议要求和对Intel Xeon处理器的限制 636

16.5.3对于Intel Xeon处理器的初始化协议算法 636

16.5.4 MP初始化举例 637

16.5.5在MP系统中标识逻辑处理器 640

16.6超线程和多核技术 640

16.7测试硬件多线程支持和拓扑 641

16.7.1初始化支持超线程技术的处理器 641

16.7.2初始化多核处理器 641

16.7.3在一支持硬件多线程的Intel 64或IA-32处理器上执行多线程 642

16.7.4在支持硬件多线程的IA-32处理器上处理中断 642

16.8 Intel超线程技术体系结构 642

16.8.1逻辑处理器状态 643

16.8.2 APIC功能 643

16.8.3内存范围寄存器 644

16.8.4页属性表 644

16.8.5机器检查属性 644

16.8.6调试寄存器和扩展 644

16.8.7性能监视计数器 644

16.8.8 IA32_ MISC_ ENABLE MSR 644

16.8.9内存顺序 645

16.8.10串行化指令 645

16.8.11微码更新资源 645

16.8.12自修改码 645

16.8.13实现特定的HT技术设施 645

16.9多核体系结构 647

16.9.1逻辑处理器支持 647

16.9.2内存类型范围寄存器 647

16.9.3性能监视计数器 647

16.9.4 IA32_ MISC_ ENABLE MSR 647

16.9. 5微码更新资源 648

16.10对于硬件多线程功能资源的编程考虑 648

16.10.1共享的资源的层次映射 648

16.10.2在MP系统中标识逻辑处理器 649

16.10.3对于APIC ID的三级映射算法 650

16.10.4在一MP系统中标识拓扑关系 652

16.11空闲和阻断条件的管理 656

16.11.1 HLT指令 656

16.11.2 PAUSE指令 656

16.11.3检测对MONITOR/MWAIT指令的支持 656

16.11.4 MONITOR/MWAIT指令 657

16.11.5 MONITOR/MWAIT地址范围确定 658

16.11.6要求的操作系统支持 658

第17章 处理器标识及特性 663

17.1 CPUID(处理器标识)指令 663

17.1.1指令格式 663

17.1.2指令描述 663

17.1.3测试CPUID指令 663

17.1.4 CPUID功能0 668

17.1.5 CPUID功能1. 669

17.1.6 CPUID功能2. 674

17.1.7 CPUID功能4. 677

17.1.8 CPUID功能5. 677

17.1.9 CPUID功能6. 677

17.1.10 CPUID功能10. 677

17.2 CPUID指令的使用 678

17.2.1返回商标信息的方法 678

第18章 处理器管理和初始化 681

18.1初始化概要 681

18.1.1复位后的处理器状态 682

18.1.2处理器内置自测试 684

18.1.3模型和步进信息 684

18.1.4执行的第一条指令 684

18.2 x87 FPU初始化 685

18.2.1配置x87 FPU环境 685

18.2.2设置处理器为x87 FPU软件仿真 686

18.3启用缓存 686

18.4模型特定的寄存器 686

18.5存储类型范围寄存器 687

18.6初始化SSE/SSE2/SSE3/SSSE3扩展 687

18.7为实地址方式操作的软件初始化 687

18.7.1实地址方式IDT 688

18.7.2 NMI中断处理 688

18.8软件初始化保护方式操作 688

18.8.1保护方式系统数据结构 689

18.8.2初始化保护方式异常和中断 689

18.8.3初始化分页 689

18.8.4初始化多任务 689

18.8.5初始化IA-32e方式 690

18.9方式切换 692

18.9.1切换至保护方式 692

18.9.2切换回实地址方式 692

18.10初始化和方式切换举例 693

18.10.1汇编程序使用 695

18.10.2 STARTUP·ASM清单 695

18.10.3 MAIN·ASM源代码 703

18.10.4支持文件 704

18.11微码更新设施 706

18.11.1微码更新 706

18.11.2任选的扩展签名表 708

18.11.3处理器标识 709

18.11.4平台标识 710

18.11.5微码更新检验和 711

18.11.6微码更新装入器 711

18.11.7更新签名和验证 713

18.11.8 Pentium 4、Inte1 Xeon和P6族处理器微码更新规范 714

参考文献 726

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