您好,欢迎光临有路网!
X86/X64体系探索及编程
QQ咨询:
有路璐璐:

X86/X64体系探索及编程

  • 作者:邓志
  • 出版社:电子工业出版社
  • ISBN:9787121181764
  • 出版日期:2012年10月01日
  • 页数:840
  • 定价:¥119.00
  • 分享领佣金
    手机购买
    城市
    店铺名称
    店主联系方式
    店铺售价
    库存
    店铺得分/总交易量
    发布时间
    操作

    新书比价

    网站名称
    书名
    售价
    优惠
    操作

    图书详情

    内容提要
    本书是对Intel手册所述处理器架构的探索和论证。全书分五大部分,对多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实的机器上执行。
    通过阅读本书,读者应能培养自己动手实验的能力。如果再有一些OS方面的相关知识,基本上就可以写出自己简易的OS核心。 X86/X64体系探索及编程_邓志 著_电子工业出版社_
    目录
    目录
    **篇 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.2 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 开启保护模式 259
    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 结构 304
    11.5.6 SMEP 机制. 304
    11.5.7 使用IA-32e paging 模式 308
    11.6 TLB 与Cache 314
    11.6.1 TLB 315
    11.6.2 Paging-Structure Cache 328
    11.7 page 的内存cache 类型 335
    11.7.1 PAT(Page Attribute Table) 335
    11.7.2 PAT MSR 337
    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-mode 342
    12.1 x64 体系的设计原则 343
    12.2 开启long-mode 344
    12.2.1 检测处理器是否支持long-mode 344
    12.2.2 EFER 寄存器 345
    12.2.3 进入long-mode 的必要条件 346
    12.3 退出long-mode 350
    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
    第三篇 调试与性能监控
    第13 章断点调试 370
    13.1 Single-Step 单步调试模式 370
    13.2 Breakpoint 调试模式 371
    13.3 Memory 和I/O 地址调试模式 372
    13.3.1 断点寄存器DR0~DR3 372
    13.3.2 状态寄存器DR6 372
    13.3.3 控制寄存器DR7 373
    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 Record 395
    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 stack 402
    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 trace 405
    14.6 #DB 异常下的LBR 419
    14.7 IA-32e 模式下的LBR stack 421
    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 buffer 443
    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 预定义的event 473
    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 buffer 490
    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 与clock 528
    15.6.1 Invariant TSC 529
    15.6.2 读取TSC 值 530
    15.6.3 Clock per instruction 531
    第四篇 中断体系
    第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 中断vector 544
    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 size 568
    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 APIC 600
    18.2.1 检测local APIC 版本 600
    18.2.2 开启和关闭local APIC 601
    18.3 local APIC 寄存器 604
    18.3.1 local APIC 寄存器地址 604
    18.3.2 local APIC 寄存器列表 606
    18.4 local APIC ID 609
    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 及priority 637
    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 timer 663
    18.13 错误处理 666
    18.14 LINT0 与LINT1 669
    18.14.1 LINT0 与LINT1 寄存器 670
    18.14.2 从LINT0 屏蔽外部中断请求 672
    18.14.3 从LINT1 屏蔽NMI 673
    18.15 Performance Monitoring 675
    第 19 章 I/O APIC 679
    19.1 I/O APIC 寄存器. 680
    19.1.1 direct register(直接寄存器) 680
    19.1.2 indirect register(间接寄存器) 682
    19.1.3 I/O APIC 的IRQ 684
    19.1.4 I/O APIC 的中断处理 685
    19.2 使用HPET(高精度定时器) 688
    19.2.1 HPET 寄存器基址 688
    19.2.2 HPET 的工作原理 689
    第五篇 浮点与SIMD 指令环境
    第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 MXCSR 762
    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
    编辑推荐语
    对x86处理器介绍得*详尽又*具实践指导意义的一本书

    与描述相符

    100

    北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 台湾 香港 澳门 海外