
对x86处理器介绍得最详尽又最具实践指导意义的一本书 |
邓志,1977年生于广东,在银行工作十余年,现自由职业者。对计算机有一股热情和蛮劲,善于思考,特别喜欢琢磨底层架构。熟悉C语言,并且精通x86/x64平台的汇编语言与机器指令系统,能用汇编写简易的OS核心。 |
第一篇 x86基础 第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 a 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 world 25 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转换为CHS 62 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子叶所需内存size 76 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 mode 84 第5章 了解Flags 85 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 CR8 102 6.2 CR3 103 6.3 CR0 104 6.3.1 保护模式位PE 104 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 CR4 110 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章 MSR 116 7.1 MSR的使用 116 7.2 MTRR 117 7.2.1 Fixed-range区域的映射 118 7.2.2 MTRR的功能寄存器 120 7.3 MSR中对特殊指令的支持 124 7.3.1 支持sysenter/sysexit指令的MSR 125 7.3.2 支持syscall/sysret指令的MSR 126 7.3.3 支持swapgs指令的MSR 127 7.3.4 支持monitor/mwait指令的MSR 128 7.4 提供processor feature管理 129 7.5 其他未列出来的MSR 129 7.6 关于MSR一些后续说明 129 第二篇 处理器的工作模式 第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 实模式下的IVT 135 8.8 突破64K段限 136 8.9 A20地址线 137 第9章 SMM系统管理模式探索 138 9.1 进入SMM 138 9.2 SMM的运行环境 141 9.2.1 SMRAM区域 141 9.2.2 SMM执行环境的初始化 143 9.2.3 SMM下的operand与address 144 9.2.4 SMM下的CS与EIP 144 9.2.5 SMM下的SS与ESP 145 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描述符与LDT 258 10.6 开启保护模式 260 10.6.1 初始化GDT 260 10.6.2 初始化IDT 262 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查询leaf 270 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位paging 279 11.4 PAE paging模式 282 11.4.1 在Intel64下的CR3与PDPTE寄存器 283 11.4.2 在AMD64下的CR3 285 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模式下的CR3 299 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 |
商品评论(0条)