图书介绍
64位微处理器系统编程和应用编程pdf电子书版本下载
- 周明德编著 著
- 出版社: 北京:清华大学出版社
- ISBN:9787302207757
- 出版时间:2009
- 标注页数:726页
- 文件大小:280MB
- 文件页数:753页
- 主题词:微处理器-程序设计
PDF下载
下载说明
64位微处理器系统编程和应用编程PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如 BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第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