x86 彙編語言從實模式到保護模式 x86汇编语言:从实模式到保护模式

李忠, 王曉波, 餘潔

  • 出版商: 電子工業出版社
  • 出版日期: 2013-01-01
  • 售價: $336
  • 語言: 簡體中文
  • 頁數: 375
  • 裝訂: 平裝
  • ISBN: 712118799X
  • ISBN-13: 9787121187995

無法訂購

買這商品的人也買了...

相關主題

商品描述

<內容簡介>

李忠編著的《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  程序的編譯和執行
    本章習題