图书介绍

x86/x64体系探索及编程2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

x86/x64体系探索及编程
  • 邓志著 著
  • 出版社: 北京:电子工业出版社
  • ISBN:9787121181764
  • 出版时间:2012
  • 标注页数:813页
  • 文件大小:55MB
  • 文件页数:839页
  • 主题词:微处理器-计算机体系结构;微处理器-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

x86/x64体系探索及编程PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第一篇 x86基础2

第1章 数与数据类型2

1.1 数2

1.1.1 数字2

1.1.2 二进制数3

1.1.3 二进制数的排列3

1.1.4 十六进制数5

1.1.5 八进制数与十进制数5

1.2 数据类型6

1.2.1 integer数6

1.2.2 floating-point数9

1.2.3 real number(实数)与NaN(not an number)11

1.2.4 unsupported编码值14

1.2.5 浮点数精度的转换15

1.2.6 浮点数的溢出17

1.2.7 BCD码20

1.2.8 SIMD数据21

第2章 x86/x64编程基础23

2.1 选择编译器23

2.2 机器语言24

2.3 Hello world25

2.3.1 使用寄存器传递参数26

2.3.2 调用过程27

2.3.3 定义变量27

2.4 16位编程、32位编程,以及64位编程28

2.4.1 通用寄存器28

2.4.2 操作数大小30

2.4.3 64位模式下的内存地址30

2.4.4 存寻址模式31

2.4.5 内存寻址范围34

2.4.6 使用的指令限制34

2.5 编程基础34

2.5.1 操作数寻址35

2.5.2 传送数据指令39

2.5.3 位操作指令45

2.5.4 算术指令47

2.5.5 CALL与RET指令48

2.5.6 跳转指令48

2.6 编辑与编译、运行48

第3章 编写本书的实验例子50

3.1 实验的运行环境50

3.2 生成空白的映像文件52

3.2.1 使用nasm编译器生成52

3.2.2 使用bximage工具52

3.3 设置bochs配置文件53

3.4 源代码的基本结构54

3.5 编译源代码55

3.6 映像文件内的组织55

3.7 使用merge工具56

3.7.1 merge的配置文件57

3.7.2 执行merge命令57

3.8 使用U盘启动真实机器58

3.8.1 使用merge工具写U盘58

3.8.2 使用hex编辑软件写U盘59

3.9 编写boot代码60

3.9.1 LBA转换为CHS62

3.9.2 测试是否支持int 13h扩展功能63

3.9.3 使用int 13h扩展读磁盘64

3.9.4 最后看看load_module()64

3.10 总结66

第4章 处理器的身份67

4.1 测试是否支持CPUID指令67

4.2 CPUID指令的术语及表达68

4.3 基本信息与扩展信息68

4.4 处理器的型号(family,model与stepping)72

4.5 最大的物理地址和线性地址73

4.6 处理器扩展状态信息74

4.6.1 探测Processor Extended State子叶75

4.6.2 Processor Extended State子叶所需内存size76

4.6.3 Processor Extended State的保存77

4.6.4 Processor Extended State的恢复78

4.7 处理器的特性78

4.8 处理器的Cache与TLB信息80

4.9 MONITOR/MWAIT信息83

4.10 处理器的long mode84

第5章 了解Flags85

5.1 Eflags中的状态标志位86

5.1.1 signed数的运算86

5.1.2 unsigned数的运算89

5.2 IOPL标志位90

5.3 TF标志与RF标志93

5.4 NT标志95

5.5 AC标志96

5.6 VM标志98

5.7 eflags寄存器的其他事项99

第6章 处理器的控制寄存器101

6.1 CR8102

6.2 CR3103

6.3 CR0104

6.3.1 保护模式位PE104

6.3.2 x87 FPU单元的执行环境104

6.3.3 CR0.PG控制位108

6.3.4 CR0.CD与CR0.NW控制位108

6.3.5 CR0.WP控制位110

6.3.6 CR0.AM控制位110

6.4 CR4110

6.4.1 CR4.TSD与CR4.PCE控制位110

6.4.2 CR4.DE与CR4.MCD控制位111

6.4.3 CR4.OSFXSR控制位111

6.4.4 CR4.VMXE与CR4.SMXE控制位111

6.4.5 CR4.PCIDE与CR4.SMEP控制位112

6.4.6 CR4.OSXSAVE控制位113

6.4.7 CR4中关于页的控制位113

6.5 EFER扩展功能寄存器114

第7章 MSR116

7.1 MSR的使用116

7.2 MTRR117

7.2.1 Fixed-range区域的映射118

7.2.2 MTRR的功能寄存器120

7.3 MSR中对特殊指令的支持124

7.3.1 支持sysenter/sysexit指令的MSR125

7.3.2 支持syscall/sysret指令的MSR126

7.3.3 支持swapgs指令的MSR127

7.3.4 支持monitor/mwait指令的MSR128

7.4 提供processor feature管理129

7.5 其他未列出来的MSR129

7.6 关于MSR一些后续说明129

第二篇 处理器的工作模式132

第8章 实地址模式132

8.1 真实的地址132

8.2 real mode的编址132

8.3 real mode的状态133

8.4 段基址的计算134

8.5 第1条执行的指令134

8.6 实模式下的执行环境135

8.7 实模式下的IVT135

8.8 突破64K段限136

8.9 A20地址线137

第9章 SMM系统管理模式探索138

9.1 进入SMM138

9.2 SMM的运行环境141

9.2.1 SMRAM区域141

9.2.2 SMM执行环境的初始化143

9.2.3 SMM下的operand与address144

9.2.4 SMM下的CS与EIP144

9.2.5 SMM下的SS与ESP145

9.3 SMM里的中断145

9.4 SMI的Back-to-Back响应147

9.5 SMM里开启保护模式147

9.6 SMM的版本148

9.7 I/O指令的重启及Halt重启151

9.8 SMM的退出152

9.9 SMBASE的重定位153

9.10 SMI处理程序的初始化154

9.11 SMM的安全156

9.11.1 芯片组的控制156

9.11.2 处理器对SMRAM空间的限制158

9.11.3 cache的限制160

9.12 测试SMI处理程序161

第10章 x86/x64保护模式体系(上)163

10.1 x86/x64的权限164

10.2 保护模式下的环境164

10.2.1 段式管理所使用的资源165

10.2.2 paging分页机制所使用的资源165

10.3 物理地址的产生166

10.4 段式管理机制167

10.4.1 段式内存管理168

10.4.2 段式的保护措施168

10.5 段式管理的数据结构169

10.5.1 Segment Selector(段选择子)169

10.5.2 Descriptor Table(描述符表)172

10.5.3 Segment Selector Register(段寄存器)174

10.5.4 Segment Descriptor(段描述符)175

10.5.5 LDT描述符与LDT258

10.6 开启保护模式260

10.6.1 初始化GDT260

10.6.2 初始化IDT262

10.6.3 切换到保护模式263

第11章 x86/x64保护模式体系(下)265

11.1 物理页面265

11.1.1 处理器的最高物理地址(MAXPHYADDR)266

11.1.2 物理页面的大小267

11.1.3 页转换模式(Paging Mode)268

11.2 paging机制下使用的资源270

11.2.1 寄存器270

11.2.2 CPUID查询leaf270

11.2.3 寄存器的控制位271

11.2.4 页转换表资源272

11.3 32位paging模式(non-PAE模式)273

11.3.1 CR3结构274

11.3.2 32位paging模式下的PDE结构275

11.3.3 使用32位paging279

11.4 PAE paging模式282

11.4.1 在Intel64下的CR3与PDPTE寄存器283

11.4.2 在AMD64下的CR3285

11.4.3 PAE paging模式里的PDPTE结构286

11.4.4 PAE paging模式里的PDE结构286

11.4.5 PAE paging模式里的PTE结构288

11.4.6 使用和测试PAE paging模式288

11.4.7 使用和测试Execution Disable功能292

11.5 IA-32e paging模式297

11.5.1 IA-32e paging模式下的CR3299

11.5.2 IA-32e paging模式下的PML4E结构302

11.5.3 IA-32e paging模式下的PDPTE结构302

11.5.4 IA-32e paging模式下的PDE结构303

11.5.5 IA-32e paging模式下的PTE结构304

11.5.6 SMEP机制304

11.5.7 使用IA-32e paging模式308

11.6 TLB与Cache314

11.6.1 TLB315

11.6.2 Paging-Structure Cache328

11.7 page的内存cache类型335

11.7.1 PAT(Page Attribute Table)335

11.7.2 PAT MSR337

11.7.3 各级table entry的PCD及PWT标志337

11.8 页的保护措施338

11.8.1 访问权限位U/S的检查338

11.8.2 读/写权限位R/W的检查339

11.8.3 执行权限位XD的检查339

11.8.4 缺页保护P标志位的检查340

11.8.5 保留位的检查341

第12章 Long-mode342

12.1 x64体系的设计原则343

12.2 开启long-mode344

12.2.1 检测处理器是否支持long-mode344

12.2.2 EFER寄存器345

12.2.3 进入long-mode的必要条件346

12.3 退出long-mode350

12.4 long-mode的执行环境352

12.4.1 处理器模式的判断352

12.4.2 64位模式下的段描述符353

12.4.3 Long-mode的gate描述符353

12.4.4 Long-mode的描述符表结构355

12.4.5 Long-mode模式的段寄存器356

12.4.6 Long-mode的paging机制357

12.5 long-mode的指令环境358

12.5.1 64位模式的操作数358

12.5.2 64位模式下的无效指令360

12.5.3 64位模式下的寻址模式361

12.6 64位模式与compatibility模式编程363

12.6.1 64位模式切换到compatibility模式363

12.6.2 compatibility模式切换到64位模式363

12.6.3 利用compatibility模式执行legacy的库函数364

第三篇 调试与性能监控370

第13章 断点调试370

13.1 Single-Step单步调试模式370

13.2 Breakpoint调试模式371

13.3 Memory和I/O地址调试模式372

13.3.1 断点寄存器DR0~DR3372

13.3.2 状态寄存器DR6372

13.3.3 控制寄存器DR7373

13.3.4 Fault与Trap类型的debug异常375

13.3.5 General Detect产生的#DB异常375

13.3.6 执行断点指令产生的#DB异常377

13.3.7 访问数据断点产生的#DB异常386

13.3.8 访问I/O断点产生的#DB异常390

13.3.9 任务切换时产生的Trap调试异常392

第14章 分支记录394

14.1 检测处理器的家族和型号395

14.2 初识Branch Record395

14.2.1 记录存放的地方395

14.2.2 记录的形式396

14.2.3 何时进行记录396

14.3 IA32_DEBUGCTL寄存器396

14.3.1 配置Branch trace record的存放398

14.3.2 CPL-qualified branch record(受CPL限制的BTS)399

14.3.3 冻结监控400

14.4 LBR stack402

14.4.1 FROM_IP与TO_IP寄存器402

14.4.2 IA32_LASTBRANCH_TOS寄存器404

14.4.3 LBR stack的使用405

14.5 使用LBR捕捉branch trace405

14.6 #DB异常下的LBR419

14.7 IA-32e模式下的LBR stack421

14.8 使用Single-step on branch功能428

14.9 BTS(Branch Trace Store)机制429

14.9.1 检测DS(Debug Store)是否支持430

14.9.2 Debug store 64位格式431

14.9.3 检测BTS(Branch Trace Store)机制是否可用431

14.9.4 检测PEBS(Precise Event Based Sampling)机制是否可用432

14.9.5 Debug Store存储区域432

14.9.6 设置DS存储区域439

14.9.7 使用环形回路BTS buffer443

14.9.8 使BTS buffer产生DS中断447

14.9.9 过滤BTS记录459

14.9.10 64位模式下的BTS机制463

第15章 性能监控469

15.1 性能监控机制469

15.2 Performance monitoring机制的版本470

15.2.1 确定处理器所支持的功能471

15.2.2 IA32_PMCx寄存器在各版本中的数量472

15.2.3 IA32_PMCx寄存器的宽度472

15.2.4 预定义的event473

15.3 Nehalem架构下的性能监控机制474

15.3.1 物理资源474

15.3.2 counter(计数器)475

15.3.3 开启计数器476

15.3.4 全局控制器476

15.3.5 通用计数控制器477

15.3.6 固定用途计数控制器478

15.3.7 全局状态寄存器480

15.3.8 全局溢出控制器481

15.3.9 使用Performance monitoring的例子481

15.3.10 在PMI中冻结计数器486

15.4 PEBS(Precise Event Based Sampling)机制489

15.4.1 PEBS buffer490

15.4.2 PEBS中断493

15.4.3 PEBS事件496

15.4.4 PEBS的触发497

15.4.5 PEBS记录的报告498

15.4.6 PEBS buffer满时中断504

15.4.7 多个PMI触发510

15.4.8 Load latency监控机制521

15.5 使用Fixed计数器525

15.6 Time-stamp counter与clock528

15.6.1 Invariant TSC529

15.6.2 读取TSC值530

15.6.3 Clock per instruction531

第四篇 中断体系538

第16章 中断与异常处理538

16.1 Interrupt Source(中断源)539

16.1.1 硬件中断539

16.1.2 软件中断540

16.2 Exception Source(异常源)540

16.3 Exception的恢复541

16.4 中断vector544

16.5 中断的屏蔽545

16.5.1 可屏蔽的中断545

16.5.2 不可屏蔽的中断547

16.6 IDTR寄存器548

16.7 IVT(Interrupt Vector Table)549

16.8 IDT(Interrupt Descriptor Table)550

16.9 gate描述符551

16.9.1 legacy保护模式下的Interrupt-gate与Trap-gate描述符551

16.9.2 IA-32e模式下的Interrupt-gate与Trap-gate描述符552

16.9.3 Task-gate描述符552

16.10 软件上的中断/异常处理流程553

16.10.1 处理器对gate描述符和code描述符的检查553

16.10.2 权限的检查556

16.10.3 权限处理的三种情形557

16.10.4 第1种情形:同级调用558

16.10.5 第2种情形:权限及stack的切换559

16.10.6 第3种情形:conforming代码段566

16.10.7 Eflags标志位的处理567

16.10.8 执行中断/异常处理程序567

16.11 中断/异常调用中的任务切换567

16.12 中断/异常调用返回568

16.12.1 返回时的任务切换568

16.12.2 IRET指令的operand size568

16.12.3 IRET指令返回前的检查571

16.12.4 返回到低权限级别时573

16.12.5 同级返回578

16.13 错误码579

第17章 8259中断控制器582

17.1 8259结构583

17.1.1 IRQ的优先级584

17.1.2 中断请求状态584

17.1.3 中断服务状态584

17.1.4 中断屏蔽状态585

17.1.5 中断响应过程586

17.2 8259编程587

17.2.1 8259寄存器I/O地址587

17.2.2 8259初始化588

17.2.3 8259的操作字592

17.2.4 设置edge和level触发模式596

第18章 Local APIC体系597

18.1 APIC体系概述597

18.1.1 local APIC接收到的中断源598

18.1.2 APIC体系的版本600

18.2 使用local APIC600

18.2.1 检测local APIC版本600

18.2.2 开启和关闭local APIC601

18.3 local APIC寄存器604

18.3.1 local APIC寄存器地址604

18.3.2 local APIC寄存器列表606

18.4 local APIC ID609

18.4.1 local APIC ID寄存器609

18.4.2 APIC ID在multi-threading处理器下610

18.4.3 multi-threading技术的使用617

18.4.4 multi-threading处理器编程627

18.5 local APIC版本寄存器633

18.6 LVT寄存器634

18.7 ICR(Interrupt Command Register)635

18.8 LVT寄存器及ICR的设置636

18.8.1 delivery mode的设置636

18.8.2 trigger模式的设置637

18.9 中断vector及priority637

18.9.1 local interrupt的vector设置637

18.9.2 有效的vector值638

18.9.3 local interrupt的优先级638

18.9.4 在64位模式下的优先级640

18.10 处理器的IPI机制641

18.10.1 IPI消息对象641

18.10.2 使用physical目标模式641

18.10.3 使用logical目标模式645

18.10.4 多处理器的初始化与编程648

18.11 local APIC的中断处理659

18.11.1 检查目标660

18.11.2 IRR和ISR仲裁661

18.11.3 发送EOI命令663

18.12 APIC timer663

18.13 错误处理666

18.14 LINT0与LINT1669

18.14.1 LINT0与LINT1寄存器670

18.14.2 从LINT0屏蔽外部中断请求672

18.14.3 从LINT1屏蔽NMI673

18.15 Performance Monitoring675

第19章 I/O APIC679

19.1 I/O APIC寄存器680

19.1.1 direct register(直接寄存器)680

19.1.2 indirect register(间接寄存器)682

19.1.3 I/O APIC的IRQ684

19.1.4 I/O APIC的中断处理685

19.2 使用HPET(高精度定时器)688

19.2.1 HPET寄存器基址688

19.2.2 HPET的工作原理689

第五篇 浮点与SIMD指令环境698

第20章 x87 FPU单元与MMX技术698

20.1 x87 FPU执行环境699

20.1.1 x87 FPU数据寄存器700

20.1.2 x87 FPU的stack结构701

20.1.3 x87 FPU状态寄存器710

20.2 x87 FPU的异常718

20.2.1 status寄存器的异常标志位719

20.2.2 异常的屏蔽720

20.2.3 #IS与#IA异常720

20.2.4 #D异常722

20.2.5 #Z异常723

20.2.6 #O与#U异常723

20.2.7 舍入727

20.3 x87 FPU的异常处理机制729

20.3.1 默认处理方法730

20.3.2 unmasked下的异常732

20.3.3 使用native模式732

20.3.4 使用DOS compatibility模式739

20.4 MMX指令环境742

20.4.1 MMX寄存器742

20.4.2 64位SIMD整数运算743

20.4.3 MMX指令的比较操作746

20.4.4 MMX指令的unpack操作746

20.4.5 x87 FPU与MMX混合编程747

20.5 x87 FPU与MMX的状态748

20.5.1 x87 FPU环境信息的保存748

20.5.2 使用FSAVE/FNSAVE指令749

20.5.3 MMX寄存器的保存750

20.6 x87 FPU与MMX环境的设置750

20.6.1 为任务切换设置环境751

20.6.2 x87 FPU与MMX环境的推荐设置758

第21章 SSE系列指令环境759

21.1 处理器的资源760

21.1.1 处理器对SSE指令的支持761

21.1.2 128位的XMM寄存器762

21.1.3 MXCSR762

21.1.4 SIMD数据类型765

21.2 SSE系列指令的异常765

21.2.1 异常的屏蔽766

21.2.2 numeric异常的处理769

21.3 SSE系列指令的操作771

21.3.1 packed数据的运算772

21.3.2 scalar数据的运算772

21.3.3 Horizontal的运算773

21.3.4 MOV与load/store操作773

21.3.5 shuffle操作774

21.3.6 unpack操作777

21.3.7 blend操作777

21.3.8 insert操作778

21.3.9 extract操作780

21.3.10 compare操作781

21.3.11 logical操作783

21.3.12 convert操作785

21.3.13 string处理指令788

21.4 SSE系列指令操作环境800

21.4.1 SSE系列指令支持800

21.4.2 SSE系列指令State信息801

21.4.3 SSE系列指令环境的设置805

21.4.4 x87 FPU/MMX与SSE境的延时切换807

附录A 参考资料808

附录B 实验清单809

热门推荐