第1章引言1
1.1微处理器进入64位时代1
1.2术语和记法4
第2章AMD x8664体系结构概要10
2.1引言10
2.1.1新特征10
2.1.2寄存器11
2.1.3指令集12
2.2操作模式14
2.2.1长模式14
2.2.2传统模式15
第3章内存模型16
3.1内存组织16
3.1.1虚拟存储器16
3.1.2段寄存器17
3.1.3物理内存17
3.1.4内存管理18
3.2内存寻址19
3.2.1字节顺序19
3.2.264位规范地址20
3.2.3有效地址21
3.2.4地址长度前缀22
3.2.5RIP相对寻址23
3.3指针23
3.4堆栈操作24
3.5指令指针24
第4章通用编程26
4.1寄存器26
4.1.1传统寄存器26
4.1.264位模式寄存器27
4.1.3GPR的隐含使用31
4.1.4标志寄存器34
4.1.5指令指针寄存器36
4.2操作数36
4.2.1数据类型36
4.2.2操作数规模和超越默认的操作数规模38
4.2.3操作数寻址39
4.2.4数据对齐39
4.3指令摘要40
4.3.1语法40
4.3.2数据传送指令40
4.3.3数据变换指令44
4.3.4装入段寄存器指令46
4.3.5装入有效地址指令47
4.3.6算术运算指令47
4.3.7旋转和移位指令49
4.3.8比较和测试指令50
4.3.9逻辑指令52
4.3.10串指令53
4.3.11控制传送指令54
4.3.12标志指令58
4.3.13输入和输出指令59
4.3.14信号量指令60
4.3.15处理器信息指令60
4.3.16高速缓存与存储管理指令61
4.3.17无操作指令62
4.3.18系统调用和返回指令62
4.4通用指令在64位模式的规则63
4.5指令前缀65
4.5.1传统前缀66
4.5.2REX前缀67
4.6特征检测68
4.7控制传送69
4.7.1概要69
4.7.2特权级70
4.7.3过程堆栈70
4.7.4跳转72
4.7.5过程调用72
4.7.6从过程返回73
4.7.7系统调用74
4.7.8对于分支的通用考虑75
4.7.9在64位模式的分支75
4.7.10中断和异常76
4.8输入输出79
4.8.1I/O寻址80
4.8.2I/O顺序80
4.8.3保护模式I/O81
4.9存储优化81
4.9.1访问内存81
4.9.2强制存储器顺序82
4.9.3高速缓存84
4.9.4缓存操作85
4.9.5缓存污染85
4.9.6缓存控制指令86
4.10性能考虑87
第5章x87浮点指令编程90
5.1概要90
5.1.1起源90
5.1.2兼容性90
5.2能力91
5.3寄存器91
5.3.1x87数据寄存器91
5.3.2x87状态字寄存器93
5.3.3x87控制字寄存器95
5.3.4x87标记字寄存器97
5.3.5指针和操作码状态98
5.3.6x87环境99
5.3.7浮点仿真99
5.4操作数100
5.4.1操作数寻址100
5.4.2数据类型100
5.4.3数表示103
5.4.4数的编码105
5.4.5精度107
5.4.6舍入108
5.5指令摘要108
5.5.1语法109
5.5.2数据传送和转换110
5.5.3装入常数112
5.5.4算术运算112
5.5.5超越函数116
5.5.6比较和测试117
5.5.7堆栈管理119
5.5.8无操作120
5.5.9控制120
5.6指令对rFLAGS的影响123
5.7指令前缀123
5.8特征检测124
5.9异常124
5.9.1通用异常124
5.9.2x87浮点异常125
5.9.3x87浮点异常特权127
5.9.4x87浮点异常屏蔽128
5.10状态保存133
5.10.1保存和恢复状态133
5.10.2保存恢复指令133
5.11性能考虑134
5.11.1用128位媒体码替换x87码134
5.11.2使用FCOMIFCMOVx分支134
5.11.3使用FSINCOS代替FSIN和FCOS134
5.11.4打开依赖链134
第6章64位、128位媒体和科学编程135
6.1概要135
6.1.1起源135
6.1.2兼容性135
6.2能力136
6.2.1并行操作137
6.2.2数据转换和重组138
6.2.3矩阵运算141
6.2.4饱和142
6.2.5分支删除143
6.2.6浮点向量运算144
6.3寄存器145
6.3.1MMXTM寄存器145
6.3.2XMM寄存器145
6.3.3MXCSR寄存器147
6.3.4其他寄存器149
6.3.5rFLAGS寄存器149
6.4操作数149
6.4.1数据类型150
6.4.2操作数尺寸和超越152
6.4.3操作数寻址152
6.4.4数据对齐152
6.4.5整型数据类型153
6.4.664位媒体浮点数据类型154
6.4.7128位媒体浮点数据类型156
6.4.8浮点数表示157
6.4.9浮点数编码159
6.4.10浮点舍入160
6.5指令摘要——整型指令161
6.5.1语法162
6.5.2退出媒体状态163
6.5.3数据传送163
6.5.4数据转换168
6.5.5数据重组169
6.5.6算术运算174
6.5.7移位178
6.5.8比较180
6.5.9逻辑指令182
6.5.10保存和恢复状态182
6.6指令摘要——浮点指令183
6.6.1语法183
6.6.2数据转换183
6.6.3数据传送186
6.6.4数据重组188
6.6.5算术运算190
6.6.6比较194
6.6.7128位媒体逻辑指令197
6.7指令对标志的影响197
6.8指令前缀198
6.8.1支持的前缀198
6.8.2特殊使用和保留的前缀198
6.8.3引起异常的前缀198
6.9特征检测198
6.10异常199
6.10.1通用异常199
6.10.2x87浮点异常200
6.10.3128位媒体指令引起的SIMD浮点异常201
6.10.4SIMD浮点异常优先级203
6.10.5SIMD浮点异常屏蔽204
6.11在执行64位媒体指令上采取的动作207
6.12混合媒体码和x87码208
6.12.1混合代码208
6.12.2清MMX状态208
6.13状态保存209
6.13.1状态保存和恢复209
6.13.2状态保存指令209
6.13.3参数传递210
6.13.4在MMX寄存器中访问操作数210
6.14性能考虑210
第7章Intel Itanium体系结构的应用编程213
7.1术语213
7.2Intel Itanium体系结构介绍214
7.2.1操作环境214
7.2.2指令集转换模型概要215
7.2.3Intel Itanium指令集特性215
7.2.4指令级并行216
7.2.5编译器至处理器通信216
7.2.6猜测216
7.2.7预测218
7.2.8寄存器堆栈218
7.2.9分支219
7.2.10寄存器旋转219
7.2.11浮点体系结构219
7.2.12多媒体支持220
7.3执行环境220
7.3.1应用程序寄存器状态220
7.3.2内存储器230
7.4应用编程模式231
7.4.1寄存器堆栈232
7.4.2整数计算指令234
7.4.3预测和比较指令237
7.4.4内存访问指令240
7.4.5分支指令243
7.4.6多媒体指令248
7.4.7寄存器文件传送指令250
7.4.8字符串和总数252
7.4.9特权级传送252
7.5浮点编程模式252
7.5.1数据类型和格式252
7.5.2浮点状态寄存器256
7.5.3浮点指令259
7.6在Intel Itanium系统环境中IA32应用程序执行模式268
7.6.1指令集方式269
7.6.2IA32应用寄存器状态模式270
7.6.3存储模型概要287
7.6.4Intel Itanium寄存器的IA32使用288
参考文献290