第1篇AMD x8664系统编程1
第1章AMD x8664系统编程概要2
1.1内存模型2
1.1.1内存寻址2
1.1.2存储器组织4
1.1.3规范地址形式4
1.2存储管理5
1.2.1段5
1.2.2分页5
1.2.3混合分段和分页6
1.2.4实寻址7
1.3操作模式8
1.3.1长模式8
1.3.2传统模式10
1.3.3系统管理模式11
1.4系统寄存器11
1.5系统数据结构13
1.6中断14
1.7附加的系统编程特性15
1.7.1硬件多任务15
1.7.2机器检查16
1.7.3软件调试16
1.7.4性能监视16第2章x86和x8664体系结构的区别17
2.1操作模式17
2.1.1长模式17
2.1.2传统模式17
2.1.3系统管理模式 18
2.2存储器模型18
2.2.1存储器寻址18
2.2.2页转换18
2.2.3分段19
2.3保护检查21
2.4寄存器21
2.4.1通用寄存器21
2.4.2128位多媒体寄存器21
2.4.3标志寄存器21
2.4.4指令指针21
2.4.5堆栈指针22
2.4.6控制寄存器22
2.4.7调试寄存器22
2.4.8扩展的特征寄存器(EFER)22
2.4.9存储类型范围寄存器(MTRR)22
2.4.10其他模型特定的寄存器(MSR)22
2.5指令系统23
2.5.1REX 前缀23
2.5.2在64位模式中段超越前缀23
2.5.3操作数和结果23
2.5.4地址计算23
2.5.5引用RSP的指令24
2.5.6分支25
2.5.7NOP指令26
2.5.8单字节INC和DEC指令27
2.5.9MOVSXD指令27
2.5.10无效指令27
2.5.11FXSAVE和FXRSTOR指令28
2.6中断和异常28
2.6.1中断描述符表29
2.6.2推入的堆栈帧29
2.6.3堆栈切换29
2.6.4IRET指令29
2.6.5任务特权寄存器(CR8)30
2.6.6新异常条件30
2.7硬件任务切换30
2.8长模式与传统模式的区别30
第3章系统资源32
3.1系统控制寄存器32
3.1.1CR0寄存器33
3.1.2CR2和CR3寄存器35
3.1.3CR4寄存器36
3.1.4CR1和CR5~CR7寄存器39
3.1.564位模式扩展的控制寄存器39
3.1.6CR8(任务特权寄存器,TPR)39
3.1.7RFLAGS寄存器39
3.1.8扩展的特征启用寄存器(EFER)42
3.2模型特定的寄存器43
3.2.1系统配置寄存器44
3.2.2系统链接寄存器45
3.2.3内存类型寄存器45
3.2.4调试扩展寄存器46
3.2.5性能监视寄存器46
3.2.6机器检查寄存器47
3.3处理器的特征标识47
第4章分段虚拟存储器49
4.1实模式分段49
4.2虚拟8086模式段50
4.3保护模式分段内存模式50
4.3.1多段模型50
4.3.2平面内存模型50
4.3.364位模式中的段51
4.4段数据结构和寄存器51
4.5段选择子和寄存器52
4.5.1段选择子52
4.5.2段寄存器53
4.5.364位模式下的段寄存器54
4.6描述符表55
4.6.1全局描述符表55
4.6.2全局描述符表寄存器55
4.6.3局部描述符表56
4.6.4局部描述符表寄存器57
4.6.5中断描述符表58
4.6.6中断描述符表寄存器59
4.7传统段描述符59
4.7.1描述符格式59
4.7.2码段描述符61
4.7.3数据段描述符62
4.7.4系统描述符64
4.7.5门描述符65
4.8长模式段描述符66
4.8.1码段描述符66
4.8.2数据段描述符67
4.8.3系统段描述符68
4.8.4门描述符69
4.8.5长模式描述符小结71
4.9段保护概要72
4.9.1特权级概念73
4.9.2特权级类型73
4.10数据访问特权检查74
4.10.1访问数据段74
4.10.2访问堆栈段75
4.11控制传送特权检查76
4.11.1直接控制传送76
4.11.2控制传送通过调用门78
4.11.3返回控制传送83
4.12界限检查84
4.13类型检查85
4.13.1在传统和兼容模式的类型检查85
4.13.2长模式类型检查的区别86
第5章页转换和保护88
5.1页转换概要88
5.1.1页转换选项90
5.1.2页转换启用(PG)位90
5.1.3物理地址扩展(PAE)位90
5.1.4页尺寸扩展(PSE)位90
5.1.5页目录91
5.2传统模式转换91
5.2.1CR3寄存器92
5.2.2正常(非PAE)分页92
5.2.3PAE分页94
5.3长模式页转换97
5.3.1规范的地址形式97
5.3.2CR397
5.3.34KB页转换98
5.3.42MB页转换99
5.4页转换表项字段101
5.5转换查找缓冲器(TLB)104
5.5.1全局页104
5.5.2TLB管理105
5.6页保护检查105
5.6.1非执行(NX)位105
5.6.2用户/管理员(U/S)位106
5.6.3读/写(R/W)位106
5.6.4写保护(CR0.WP)位106
5.7跨越分页层次保护106
5.8段保护的作用108
第6章系统管理指令109
6.1快速系统调用和返回指令111
6.1.1SYSCALL和SYSRET111
6.1.2SYSENTER和SYSEXIT(只在传统模式)112
6.1.3SWAPGS指令113
6.2系统状态和控制113
6.2.1处理器特征标识符(CPUID)114
6.2.2访问控制寄存器114
6.2.3访问RFLAGS寄存器114
6.2.4访问调试寄存器114
6.2.5访问模型特定的寄存器115
6.3段寄存器和描述符寄存器访问115
6.3.1访问段寄存器115
6.3.2访问描述符表寄存器115
6.4保护检查116
6.4.1检查访问权力116
6.4.2检查段界限116
6.4.3检查读/写权力116
6.4.4调整访问权力116
6.5处理器暂停117
6.6缓存和TLB管理117
6.6.1缓存管理117
6.6.2TLB无效117
第7章内存系统118
7.1内存访问顺序120
7.1.1读顺序120
7.1.2写顺序120
7.1.3读写栅栏121
7.2内存一致性和协议121
7.3内存类型124
7.4缓冲和组合内存写125
7.4.1写缓冲125
7.4.2写组合126
7.5内存检查127
7.5.1缓存组织和操作127
7.5.2缓存控制机制128
7.5.3缓存和内存管理指令130
7.5.4串行化指令131
7.6内存类型范围寄存器132
7.6.1MTRR类型字段132
7.6.2MTRR133
7.6.3使用MTRR138
7.6.4MTRR和页缓存控制138
7.6.5多处理器环境中的MTRR140
7.7页属性表机制140
7.7.1PAT寄存器140
7.7.2PAT 索引141
7.7.3标识PAT支持142
7.7.4PAT访问142
7.7.5MTRR和PAT的组合影响142
7.8内存映射的I/O143
7.8.1扩展的固定范围MTRR类型字段编码143
7.8.2IORR145
7.8.3IORR的重叠146
7.8.4内存的顶146
第8章异常和中断148
8.1概要148
8.2通用特性148
8.3向量150
8.3.1#DE(被零除差错异常向量0)152
8.3.2#DB(调试异步异常向量1)153
8.3.3NMI(非屏蔽中断异常向量2)154
8.3.4#BP(断点异常向量3)154
8.3.5#OF(溢出异常向量4)154
8.3.6#BR(边界异常向量5)155
8.3.7#UD(无效操作码异常向量6) 155
8.3.8#NM(设备不可用异常向量7)156
8.3.9#DF(双故障异常向量8)156
8.3.10CoprocessorSegmentOverrun(协处理器段超越
异常向量9)157
8.3.11#TS(无效TSS异常向量10)157
8.3.12#NP(段不存在异常向量11)158
8.3.13#SS(堆栈异常向量12)159
8.3.14#GP(通用保护异常向量13)159
8.3.15#PF(页故障异常向量14)161
8.3.16#MF(x87浮点异常挂起向量16)161
8.3.17#AC(对齐检查异常向量17)162
8.3.18#MC(机器检查异常向量18)163
8.3.19#XF(SIMD浮点异常向量19) 163
8.3.20用户定义的中断(向量32~255)164
8.4任务切换期间的异常165
8.5差错码165
8.5.1选择子差错码165
8.5.2页故障差错码166
8.6优先权166
8.6.1浮点异常优先权167
8.6.2外部的中断优先权168
8.7实模式下的中断控制传送169
8.8传统保护模式下的中断控制传送170
8.8.1定位中断处理程序171
8.8.2中断至相同特权级171
8.8.3中断至更高特权级172
8.8.4特权检查173
8.8.5从中断过程返回175
8.9虚拟8086模式中断控制传送175
8.9.1保护模式处理程序控制传送176
8.9.2虚拟8086处理程序控制传送177
8.10长模式下的中断控制传送177
8.10.1中断门和陷阱门178
8.10.2定位中断处理程序178
8.10.3中断堆栈179
8.10.4中断堆栈表 180
8.10.5从中断过程返回181
8.11虚拟中断182
8.11.1虚拟8086模式扩展182
8.11.2保护模式虚拟中断187
8.11.3修改指令的影响187
第9章机器检查机制189
9.1确定机器检查机制189
9.2机器检查差错189
9.3机器检查MSR190
9.3.1全局状态和控制寄存器191
9.3.2差错报告寄存器体192
9.3.3差错码193
9.4初始化机器检查机制195
9.5使用机器检查特征196
9.5.1处理机器检查异常196
9.5.2报告可改正的机器检查差错197
第10章系统管理模式198
10.1SMM资源198
10.1.1SMRAM199
10.1.2SMBASE 寄存器199
10.1.3SMRAM状态保存区200
10.1.4SMM版本标识符204
10.2使用SMM204
10.2.1系统管理中断(SMI)204
10.2.2SMM操作环境205
10.2.3异常和中断205
10.2.4使缓存无效206
10.2.5保存附加的处理器状态207
10.2.6操作在保护模式和长模式207
10.2.7自动暂停重启动207
10.2.8I/O指令重启动208
10.3离开SMM208
第11章128位、64位和x87编程210
11.1系统软件考虑的概要210
11.2确定支持的媒体和x87特征210
11.3启用128位媒体指令 211
11.4媒体和处理器状态211
11.4.1128位媒体状态212
11.4.264位媒体状态212
11.4.3x87状态213
11.4.4保存媒体和x87处理器状态214
第12章任务管理223
12.1硬件多任务概要223
12.2任务管理资源224
12.2.1TSS选择子225
12.2.2TSS描述符225
12.2.3任务寄存器226
12.2.4传统任务状态段227
12.2.5任务门描述符(只是传统模式)231
12.3在传统模式的硬件任务管理232
12.3.1任务存储映像232
12.3.2任务切换233
12.3.3用任务门进行任务切换234
12.3.4嵌套任务235
第13章调试和性能资源237
13.1软件调试资源237
13.2断点243
13.2.1设置断点243
13.2.2使用断点245
13.2.3断点指令(INT3)248
13.2.4控制传送断点特征248
13.3性能优化249
13.3.1性能计数器249
13.3.2性能事件选择寄存器250
13.3.3使用性能计数器251
第14章处理器初始化和长模式激活253
14.1复位和初始化253
14.1.1内置自测试(BIST)253
14.1.2时钟倍频选择254
14.1.3处理器初始化状态254
14.1.4多处理器初始化256
14.1.5取第一条指令256
14.2硬件配置256
14.2.1处理器实现信息256
14.2.2启用内部缓存257
14.2.3初始化媒体和x87处理器状态257
14.3初始化实模式259
14.4初始化保护模式259
14.5初始化长模式260
14.6启用和激活长模式260
14.6.1激活长模式261
14.6.2一致性检查262
14.6.3更新系统描述符表引用262
14.6.4重定位页转换表263
14.7离开长模式263
14.8长模式初始化举例263
第2篇Intel Itanium系统编程概要267
第1章Intel Itanium系统环境268
1.1处理器引导顺序268
1.2Intel Itanium系统环境概要269
第2章系统状态和编程模型270
2.1特权级270
2.2顺序化270
2.2.1指令顺序化271
2.2.2数据顺序化271
2.2.3正在处理的(inflight)资源的定义272
2.3系统状态272
2.3.1系统状态概要272
2.3.2处理器状态寄存器(PSR)273
2.3.3控制寄存器279
2.3.4全局控制寄存器281
2.3.5中断控制寄存器284
2.3.6外部中断控制寄存器289
2.3.7分体的通用寄存器289
第3章基于Itanium操作系统与IA32应用程序交互模型291
3.1指令集转换291
3.2系统寄存器模型291
3.3IA32系统段寄存器293
3.3.1IA32当前特权级295
3.3.2IA32系统EFLAG寄存器295
3.3.3IA32系统寄存器298
3.4对于IA32码的寄存器上下文切换指南302
3.4.1进入IA32过程302
3.4.2退出IA32过程302
3.5IA32指令集行为小结303
3.6系统内存模型309
3.6.1虚拟存储器引用310
3.6.2IA32虚拟内存引用310
3.6.3IA32 物理内存引用 311
3.6.4超级用户访问311
3.6.5内存对齐312
3.6.6原子操作312
3.7I/O端口空间模型313
3.7.1虚拟I/O端口寻址314
3.7.2物理I/O端口寻址315
3.7.3IA32 IN/OUT指令316
3.7.4由装入和存储指令对I/O端口访问317
3.8调试模型317
3.8.1数据断点寄存器匹配318
3.8.2指令断点寄存器匹配 319
3.9中断模型319
3.9.1中断小结320
3.9.2IA32数字异常模型321
3.10为支持IA32应用处理器的总线考虑322
参考文献323