第一篇 x86基礎第1章 數(shù)與數(shù)據(jù)類型 21.1 數(shù) 21.1.1 數(shù)字 21.1.2 二進制數(shù) 31.1.3 二進制數(shù)的排列 31.1.4 十六進制數(shù) 51.1.5 八進制數(shù)與十進制數(shù) 51.2 數(shù)據(jù)類型 61.2.1 integer數(shù) 61.2.2 floating-point數(shù) 91.2.3 real number(實數(shù))與NaN(not anumber) 111.2.4 unsupported編碼值 141.2.5 浮點數(shù)精度的轉換 151.2.6 浮點數(shù)的溢出 171.2.7 BCD碼 201.2.8 SIMD數(shù)據(jù) 21第2章 x86/x64編程基礎 232.1 選擇編譯器 232.2 機器語言 242.3 Hello world 252.3.1 使用寄存器傳遞參數(shù) 262.3.2 調用過程 272.3.3 定義變量 272.4 16位編程、32位編程,以及64位編程 282.4.1 通用寄存器 282.4.2 操作數(shù)大小 302.4.3 64位模式下的內存地址 302.4.4 內存尋址模式 312.4.5 內存尋址范圍 342.4.6 使用的指令限制 342.5 編程基礎 342.5.1 操作數(shù)尋址 352.5.2 傳送數(shù)據(jù)指令 392.5.3 位操作指令 452.5.4 算術指令 472.5.5 CALL與RET指令 482.5.6 跳轉指令 482.6 編輯與編譯、運行 48第3章 編寫本書的實驗例子 503.1 實驗的運行環(huán)境 503.2 生成空白的映像文件 523.2.1 使用nasm編譯器生成 523.2.2 使用bximage工具 523.3 設置bochs配置文件 533.4 源代碼的基本結構 543.5 編譯源代碼 553.6 映像文件內的組織 553.7 使用merge工具 563.7.1 merge的配置文件 573.7.2 執(zhí)行merge命令 573.8 使用U盤啟動真實機器 583.8.1 使用merge工具寫U盤 583.8.2 使用hex編輯軟件寫U盤 593.9 編寫boot代碼 603.9.1 LBA轉換為CHS 623.9.2 測試是否支持int13h擴展功能 633.9.3 使用int13h擴展讀磁盤 643.9.4 最后看看load_module() 643.10 總結 66第4章 處理器的身份 674.1 測試是否支持CPUID指令674.2 CPUID指令的術語及表達 684.3 基本信息與擴展信息 684.4 處理器的型號(family,model與stepping) 724.5 最大的物理地址和線性地址 734.6 處理器擴展狀態(tài)信息 744.6.1 探測Processor ExtendedState子葉 754.6.2 Processor ExtendedState子葉所需內存size 764.6.3 Processor ExtendedState的保存 774.6.4 Processor ExtendedState的恢復 784.7 處理器的特性 784.8 處理器的Cache與TLB信息 804.9 MONITOR/MWAIT信息 834.10 處理器的longmode 84第5章 了解Flags 855.1 Eflags中的狀態(tài)標志位 865.1.1 signed數(shù)的運算 865.1.2 unsigned數(shù)的運算 895.2 IOPL標志位 905.3 TF標志與RF標志 935.4 NT標志 955.5 AC標志 965.6 VM標志 985.7 eflags寄存器的其他事項 99第6章 處理器的控制寄存器 1016.1 CR8 1026.2 CR3 1036.3 CR0 1046.3.1 保護模式位PE 1046.3.2 x87 FPU單元的執(zhí)行環(huán)境 1046.3.3 CR0.PG控制位 1086.3.4 CR0.CD與CR0.NW控制位 1086.3.5 CR0.WP控制位 1106.3.6 CR0.AM控制位 1106.4 CR4 1106.4.1 CR4.TSD與CR4.PCE控制位 1106.4.2 CR4.DE與CR4.MCD控制位 1116.4.3 CR4.OSFXSR控制位 1116.4.4 CR4.VMXE與CR4.SMXE控制位 1116.4.5 CR4.PCIDE與CR4.SMEP控制位 1126.4.6 CR4.OSXSAVE控制位 1136.4.7 CR4中關于頁的控制位 1136.5 EFER擴展功能寄存器 114第7章 MSR 1167.1 MSR的使用 1167.2 MTRR 1177.2.1 Fixed-range區(qū)域的映射 1187.2.2 MTRR的功能寄存器 1207.3 MSR中對特殊指令的支持 1247.3.1 支持sysenter/sysexit指令的MSR 1257.3.2 支持syscall/sysret指令的MSR 1267.3.3 支持swapgs指令的MSR 1277.3.4 支持monitor/mwait指令的MSR 1287.4 提供processorfeature管理 1297.5 其他未列出來的MSR 1297.6 關于MSR一些后續(xù)說明 129第二篇 處理器的工作模式第8章 實地址模式 1328.1 真實的地址 1328.2 real mode的編址 1328.3 real mode的狀態(tài) 1338.4 段基址的計算 1348.5 第1條執(zhí)行的指令 1348.6 實模式下的執(zhí)行環(huán)境 1358.7 實模式下的IVT 1358.8 突破64K段限 1368.9 A20地址線 137第9章 SMM系統(tǒng)管理模式探索 1389.1 進入SMM 1389.2 SMM的運行環(huán)境 1419.2.1 SMRAM區(qū)域 1419.2.2 SMM執(zhí)行環(huán)境的初始化 1439.2.3 SMM下的operand與address 1449.2.4 SMM下的CS與EIP 1449.2.5 SMM下的SS與ESP 1459.3 SMM里的中斷 1459.4 SMI的Back-to-Back響應 1479.5 SMM里開啟保護模式 1479.6 SMM的版本 1489.7 I/O指令的重啟及Halt重啟 1519.8 SMM的退出 1529.9 SMBASE的重定位 1539.10 SMI處理程序的初始化 1549.11 SMM的安全 1569.11.1 芯片組的控制 1569.11.2 處理器對SMRAM空間的限制 1589.11.3 cache的限制 1609.12 測試SMI處理程序 161第10章 x86/x64保護模式體系(上) 16310.1 x86/x64的權限 16410.2 保護模式下的環(huán)境 16410.2.1 段式管理所使用的資源 16510.2.2 paging分頁機制所使用的資源 16510.3 物理地址的產生 16610.4 段式管理機制 16710.4.1 段式內存管理 16810.4.2 段式的保護措施 16810.5 段式管理的數(shù)據(jù)結構 16910.5.1 SegmentSelector(段選擇子) 16910.5.2 DescriptorTable(描述符表) 17210.5.3 Segment SelectorRegister(段寄存器) 17410.5.4 SegmentDescriptor(段描述符) 17510.5.5 LDT描述符與LDT 25810.6 開啟保護模式 26010.6.1 初始化GDT 26010.6.2 初始化IDT 26210.6.3 切換到保護模式 263第11章 x86/x64保護模式體系(下) 26511.1 物理頁面 26511.1.1 處理器的最高物理地址(MAXPHYADDR) 26611.1.2 物理頁面的大小 26711.1.3 頁轉換模式(PagingMode) 26811.2 paging機制下使用的資源 27011.2.1 寄存器 27011.2.2 CPUID查詢leaf 27011.2.3 寄存器的控制位 27111.2.4 頁轉換表資源 27211.3 32位paging模式(non-PAE模式) 27311.3.1 CR3結構 27411.3.2 32位paging模式下的PDE結構 27511.3.3 使用32位paging 27911.4 PAE paging模式 28211.4.1 在Intel64下的CR3與PDPTE寄存器 28311.4.2 在AMD64下的CR3 28511.4.3 PAE paging模式里的PDPTE結構 28611.4.4 PAE paging模式里的PDE結構 28611.4.5 PAE paging模式里的PTE結構 28811.4.6 使用和測試PAEpaging模式 28811.4.7 使用和測試ExecutionDisable功能 29211.5 IA-32e paging模式 29711.5.1 IA-32e paging模式下的CR3 29911.5.2 IA-32e paging模式下的PML4E結構 30211.5.3 IA-32e paging模式下的PDPTE結構 30211.5.4 IA-32e paging模式下的PDE結構 30311.5.5 IA-32e paging模式下的PTE