图书目录

第1篇AMD x8664系统编程1

第1章AMD x8664系统编程概要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和x8664体系结构的区别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.10CoprocessorSegmentOverrun(协处理器段超越

异常向量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正在处理的(inflight)资源的定义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操作系统与IA32应用程序交互模型291

3.1指令集转换291

3.2系统寄存器模型291

3.3IA32系统段寄存器293

3.3.1IA32当前特权级295

3.3.2IA32系统EFLAG寄存器295

3.3.3IA32系统寄存器298

3.4对于IA32码的寄存器上下文切换指南302

3.4.1进入IA32过程302

3.4.2退出IA32过程302

3.5IA32指令集行为小结303

3.6系统内存模型309

3.6.1虚拟存储器引用310

3.6.2IA32虚拟内存引用310

3.6.3IA32 物理内存引用    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.3IA32 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.2IA32数字异常模型321

3.10为支持IA32应用处理器的总线考虑322

参考文献323