編輯推薦
本書全麵、係統、深入地介紹x86處理器在實模式,特彆是保護模式下的工作原理 ,解開瞭計算機從16位到32位工作模式的秘密;還以大量的實例,多側麵地展示瞭操作係統在整個計算機係統中的地位和作用。
內容簡介
李忠編著的《x86匯編語言:從實模式到保護模式》采用開源的NASM匯編語言編譯器和VirtualBox虛擬機軟件,以個人計算機廣泛采用的Intel處理器為基礎,詳細講解瞭Intel處理器的指令係統和工作模式,以大量的代碼演示瞭16/32/64位軟件的開發方法,介紹瞭處理器的16位實模式和32位保護模式,以及基本的指令係統。
《x86匯編語言:從實模式到保護模式》是一本有趣的書,它沒有把篇幅花在計算一些枯燥的數學題上。相反,它教你如何直接控製硬件,在不藉助於BIOS、DOS、Windows、Linux或者任何其他軟件支持的情況下來顯示字符、讀取硬盤數據、控製其他硬件等。本書可作為大專院校相關專業學生和計算機編程愛好者的教程。
目錄
第1部分 預備知識
第1章 十六進製計數法
1.1 二進製計數法迴顧
1.1.1 關於二進製計數法
1.1.2 二進製到十進製的轉換
1.1.3 十進製到二進製的轉換
1.2 十六進製計數法
1.2.1 十六進製計數法的原理
1.2.2 十六進製到十進製的轉換
1.2.3 十進製到十六進製的轉換
1.3 為什麼需要十六進製
本章習題
第2章 處理器、內存和指令
2.1 最早的處理器
2.2 寄存器和算術邏輯部件
2.3 內存儲器
2.4 指令和指令集
2.5 古老的Intel 處理器
2.5.1 的通用寄存器
2.5.2 程序的重定位難題
2.5.3 內存分段機製
2.5.4 的內存分段機製
本章習題
第3章 匯編語言和匯編軟件
3.1 匯編語言簡介
3.2 NASM編譯器
3.2.1 從網上下載NASM安裝程序
3.2.2 安裝NASM編譯器
3.2.3 下載配書源碼和工具
3.2.4 用Nasmide體驗代碼的書寫和編譯過程
3.2.5 用HexView觀察編譯後的機器代碼
本章習題
第4章 虛擬機的安裝和使用
4.1 計算機的啓動過程
4.1.1 如何將編譯好的程序提交給處理器
4.1.2 計算機的加電和復位
4.1.3 基本輸入輸齣係統
4.1.4 硬盤及其工作原理
4.1.5 一切從主引導扇區開始
4.2 創建和使用虛擬機
4.2.1 彆害怕,虛擬機是軟件
4.2.2 下載Oracle VM VirtualBox
4.2.3 安裝Oracle VM VirtualBox
4.2.4 創建一颱虛擬PC
4.2.5 虛擬硬盤簡介
4.2.6 練習使用FixVhdWr工具嚮虛擬硬盤寫數據
第2部分 位處理器下的實模式
第5章 編寫主引導扇區代碼
5.1 歡迎來到主引導扇區
5.2 注釋
5.3 在屏幕上顯示文字
5.3.1 顯卡和顯存
5.3.2 初始化段寄存器
5.3.3 顯存的訪問和ASCII代碼
5.3.4 顯示字符
5.4 顯示標號的匯編地址
5.4.1 標號
5.4.2 如何顯示十進製數字
5.4.3 在程序中聲明並初始化數據
5.4.4 分解數的各個數位
5.4.5 顯示分解齣來的各個數位
5.5 使程序進入無限循環狀態
5.6 完成並編譯主引導扇區代碼
5.6.1 主引導扇區有效標誌
5.6.2 代碼的保存和編譯
5.7 加載和運行主引導扇區代碼
5.7.1 把編譯後的指令寫入主引導扇區
5.7.2 啓動虛擬機觀察運行結果
5.7.3 程序的調試
本章習題
第6章 相同的功能,不同的代碼
6.1 代碼清單6-1
6.2 跳過非指令的數據區
6.3 在數據聲明中使用字麵值
6.4 段地址的初始化
6.5 段之間的批量數據傳送
6.6 使用循環分解數位
6.7 計算機中的負數
6.7.1 無符號數和有符號數
6.7.2 處理器視角中的數據類型
6.8 數位的顯示
6.9 其他標誌位和條件轉移指令
6.9.1 奇偶標誌位PF
6.9.2 進位標誌CF
6.9.3 溢齣標誌OF
6.9.4 現有指令對標誌位的影響
6.9.5 條件轉移指令
6.10 NASM編譯器的$和$$標記
6.11 觀察運行結果
本章習題
第7章 比高斯更快的計算
7.1 從1加到100的故事
7.2 代碼清單7-1
7.3 顯示字符串
7.4 計算1到100的纍加和
7.5 纍加和各個數位的分解與顯示
7.5.1 堆棧和堆棧段的初始化
7.5.2 分解各個數位並壓棧
7.5.3 齣棧並顯示各個數位
7.5.4 進一步認識堆棧
7.6 程序的編譯和運行
7.7 處理器的尋址方式
7.7.1 寄存器尋址
7.7.2 立即尋址
7.7.3 內存尋址
本章習題
第8章 硬盤和顯卡的訪問與控製
8.1 本章代碼清單
8.1.1 本章意圖
8.1.2 代碼清單8-1
8.2 用戶程序的結構
8.2.1 分段、段的匯編地址和段內匯編地址
8.2.2 用戶程序頭部
8.3 加載程序(器)的工作流程
8.3.1 初始化和決定加載位置
8.3.2 準備加載用戶程序
8.3.3 外圍設備及其接口
8.3.4 I/O端口和端口訪問
8.3.5 通過硬盤控製器端口讀扇區數據
8.3.6 過程調用
8.3.7 加載用戶程序
8.3.8 用戶程序重定位
8.3.9 將控製權交給用戶程序
8.3.10 處理器的無條件轉移指令
8.4 用戶程序的工作流程
8.4.1 初始化段寄存器和堆棧切換
8.4.2 調用字符串顯示例程
8.4.3 過程的嵌套
8.4.4 屏幕光標控製
8.4.5 取當前光標位置
8.4.6 處理迴車和換行字符
8.4.7 顯示可打印字符
8.4.8 滾動屏幕內容
8.4.9 重置光標
8.4.10 切換到另一個代碼段中執行
8.4.11 訪問另一個數據段
8.5 編譯和運行程序並觀察結果
本章習題
第9章 中斷和動態時鍾顯示
9.1 外部硬件中斷
9.1.1 非屏蔽中斷
9.1.2 可屏蔽中斷
9.1.3 實模式下的中斷嚮量錶
9.1.4 實時時鍾、CMOS RAM和BCD編碼
9.1.5 代碼清單9-1
9.1.6 初始化8259、RTC和中斷嚮量錶
9.1.7 使處理器進入低功耗狀態
9.1.8 實時時鍾中斷的處理過程
9.1.9 代碼清單9-1的編譯和運行
9.2 內部中斷
9.3 軟中斷
9.3.1 常用的BIOS中斷
9.3.2 代碼清單9-2
9.3.3 從鍵盤讀字符並顯示
9.3.4 代碼清單9-2的編譯和運行
本章習題
第3部分 位保護模式
第10章 位Intel微處理器編程架構
10.1 IA-32架構的基本執行環境
10.1.1 寄存器的擴展
10.1.2 基本的工作模式
10.1.3 綫性地址
10.2 現代處理器的結構和特點
10.2.1 流水綫
10.2.2 高速緩存
10.2.3 亂序執行
10.2.4 寄存器重命名
10.2.5 分支目標預測
10.3 位模式的指令係統
10.3.1 位處理器的尋址方式
10.3.2 操作數大小的指令前綴
10.3.3 一般指令的擴展
本章習題
第11章 進入保護模式
11.1 代碼清單11-1
11.2 全局描述符錶
11.3 存儲器的段描述符
11.4 安裝存儲器的段描述符並加載GDTR
11.5 關於第21條地址綫A20的問題
11.6 保護模式下的內存訪問
11.7 清空流水綫並串行化處理器
11.8 保護模式下的堆棧
11.8.1 關於堆棧段描述符中的界限值
11.8.2 檢驗32位下的堆棧操作
11.9 程序的編譯和運行
本章習題
第12章 存儲器的保護
12.1 代碼清單12-1
12.2 進入32位保護模式
12.2.1 話說mov ds,ax和mov ds,eax
12.2.2 創建GDT並安裝段描述符
12.3 修改段寄存器時的保護
12.4 地址變換時的保護
12.4.1 代碼段執行時的保護
12.4.2 堆棧操作時的保護
12.4.3 數據訪問時的保護
12.5 使用彆名訪問代碼段對字符排序
12.6 程序的編譯和運行
本章習題
第13章 程序的動態加載和執行
13.1 本章代碼清單
13.2 內核的結構、功能和加載
13.2.1 內核的結構
13.2.2 內核的加載
13.2.3 安裝內核的段描述符
13.3 在內核中執行
13.4 用戶程序的加載和重定位
13.4.1 用戶程序的結構
13.4.2 計算用戶程序占用的扇區數
13.4.3 簡單的動態內存分配
13.4.4 段的重定位和描述符的創建
13.4.5 重定位用戶程序內的符號地址
13.5 執行用戶程序
13.6 代碼的編譯、運行和調試
本章習題
第14章 任務和特權級保護
14.1 任務的隔離和特權級保護
14.1.1 任務、任務的LDT和TSS
14.1.2 全局空間和局部空間
14.1.3 特權級保護概述
14.2 代碼清單14-1
14.3 內核程序的初始化
14.3.1 調用門
14.3.2 調用門的安裝和測試
14.4 加載用戶程序並創建任務
14.4.1 任務控製塊和TCB鏈
14.4.2 使用堆棧傳遞過程參數
14.4.3 加載用戶程序
14.4.4 創建局部描述符錶
14.4.5 重定位U-SALT錶
14.4.6 創建0、1和2特權級的堆棧
14.4.7 安裝LDT描述符到GDT中
14.4.8 任務狀態段TSS的格式
14.4.9 創建任務狀態段TSS
14.4.10 安裝TSS描述符到GDT中
14.4.11 帶參數的過程返迴指令
14.5 用戶程序的執行
14.5.1 通過調用門轉移控製的完整過程
14.5.2 進入3特權級的用戶程序的執行
14.5.3 檢查調用者的請求特權級RPL
本章習題
第15章 任 務 切 換
15.1 本章代碼清單
15.2 任務切換前的設置
15.3 任務切換的方法
15.4 用call/jmp/iret指令發起任務切換的實例
15.5 處理器在實施任務切換時的操作
15.6 程序的編譯和運行
本章習題
第16章 分頁機製和動態頁麵分配
16.1 分頁機製概述
16.1.1 簡單的分頁模型
16.1.2 頁目錄、頁錶和頁
16.1.3 地址變換的具體過程
16.2 本章代碼清單
16.3 使內核在分頁機製下工作
16.3.1 創建內核的頁目錄和頁錶
16.3.2 任務全局空間和局部空間的頁麵映射
16.4 創建內核任務
16.4.1 內核的虛擬內存分配
16.4.2 頁麵位映射串和空閑頁的查找
16.4.3 創建頁錶並登記分配的頁
16.4.4 創建內核任務的TSS
16.5 用戶任務的創建和切換
16.5.1 多段模型和段頁式內存管理
16.5.2 平坦模型和用戶程序的結構
16.5.3 用戶任務的虛擬地址空間分配
16.5.4 用戶程序的加載
16.5.5 段描述符的創建(平坦模型)
16.5.6 重定位U-SALT並復製頁目錄錶
16.5.7 切換到用戶任務執行
16.6 程序的編譯和執行
本章習題
第17章 中斷和異常的處理
17.1 中斷和異常
17.1.1 中斷和異常概述
17.1.2 中斷描述符錶、中斷門和陷阱門
17.1.3 中斷和異常處理程序的保護
17.1.4 中斷任務
17.1.5 錯誤代碼
17.2 本章代碼清單
17.3 內核的加載和初始化
17.3.1 徹底終結多段模型
17.3.2 創建中斷描述符錶
17.3.3 用定時中斷實施任務切換
17.3.4 A芯片的初始化
17.3.5 平坦模型下的字符串顯示例程
17.4 內核任務的創建
17.4.1 創建內核任務的TCB
17.4.2 宏匯編技術
17.5 用戶任務的創建
17.5.1 準備加載用戶程序
17.5.2 轉換後援緩衝器的刷新
17.5.3 用戶任務的創建和初始化
17.6 程序的編譯和執行
本章習題
前言/序言
x86匯編語言:從實模式到保護模式 下載 mobi epub pdf txt 電子書 格式