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

- 邓志著 著
- 出版社: 北京:电子工业出版社
- ISBN:9787121181764
- 出版时间:2012
- 标注页数:813页
- 文件大小:55MB
- 文件页数:839页
- 主题词:微处理器-计算机体系结构;微处理器-程序设计
PDF下载
下载说明
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
热门推荐
- 1400407.html
- 937792.html
- 518809.html
- 1699778.html
- 2588026.html
- 2579023.html
- 3804375.html
- 1535473.html
- 3142961.html
- 2227681.html
- http://www.ickdjs.cc/book_1693667.html
- http://www.ickdjs.cc/book_786479.html
- http://www.ickdjs.cc/book_138000.html
- http://www.ickdjs.cc/book_427813.html
- http://www.ickdjs.cc/book_2668684.html
- http://www.ickdjs.cc/book_1370426.html
- http://www.ickdjs.cc/book_2940768.html
- http://www.ickdjs.cc/book_1797297.html
- http://www.ickdjs.cc/book_405749.html
- http://www.ickdjs.cc/book_2285524.html