首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

簡明 x86 組合語言教程 (2):處理器架構與暫存器總覽

     編輯:組合語言

第二章 認識處理器核心

CPU 是微機系統的「領導核心」,執行機器指令、管理暫存器、控制總線、響應中斷。組合語言經組譯為機器碼後由處理器執行,深入理解處理器架構是寫出高效程式的前提。

處理器主要任務

  1. 從記憶體取指令 → 譯碼 → 執行
  2. 管理內部暫存器
  3. 依指令修改記憶體內容
  4. 響應硬體中斷請求

Intel 平台 CPU 擁有資料、位址、控制三總線控制權。多核心/多處理器架構將於後續章節討論。

暫存器分類總覽

1. 通用暫存器 (General Purpose Registers) - 32 位元

以上四組皆具 32/16/8 位元別名,修改低位會影響高位對應位元。

2. 記憶體指標暫存器 (Pointer/Index Registers) - 32 位元

暫存器別名結構慣用用途
EAXAX/AH/AL運算累加器、乘除法隱含運算元、函式返回值
EBXBX/BH/BL基址指標 (DS 預設段)
ECXCX/CH/CL迴圈計數器 (LOOP/REP 隱含)、字串操作計數
EDXDX/DH/DL乘除法溢位暫存器、I/O 連接埠位址

注意:ESI/EDI/EBP 僅有 16 位元別名 (SI/DI/BP),無 8 位元別名。

3. 段暫存器 / 選擇子 (Segment Registers / Selectors)

暫存器別名用途預設段
ESISI字串/記憶體操作來源指標DS
EDIDI字串/記憶體操作目的指標ES
EBPBP堆疊框架基址指標 (高階語言區域變數)SS

實模式 16 位元 → 保護模式 32 位元選擇子。修改段暫存器需經 AX 或堆疊中轉。初學階段切勿隨意修改。

4. 特殊用途暫存器

暫存器實模式功能保護模式功能
CS程式碼段基址/16程式碼段選擇子
DS資料段基址/16資料段選擇子 (預設)
ES附加段基址/16附加段選擇子
FSF段基址/16替代資料段選擇子
GSG段基址/16替代資料段選擇子
SS堆疊段基址/16堆疊段選擇子

5. 系統級暫存器 (僅 OS 核心/驅動使用)

  • 控制暫存器:CR0 (PE/PG/TS/EM/MP...)、CR2 (頁面錯誤線性位址)、CR3 (頁目錄基址 PDBR)、CR4 (PSE/PAE/PGE/PCIDE...)
  • 除錯暫存器:DR0-DR3 (斷點位址)、DR6 (除錯狀態)、DR7 (除錯控制)
  • 測試暫存器:TR3-TR7 (快取/TLB 測試,已棄用)

EFLAGS 旗標詳細說明

暫存器功能可直接修改
EIP指令指標,指向下一條指令否 (僅 JMP/CALL/RET/INT 隱含修改)
ESP堆疊指標,指向堆疊頂不建議 (破壞堆疊平衡)
EFLAGS狀態/控制旗標 (CF, PF, AF, ZF, SF, TF, IF, DF, OF, NT, RF, VM, AC, VIF, VIP, ID)部份位元可透過指令修改

小結

x86 暫存器組結構清晰:4 大通用暫存器 (含 8/16/32 位元別名)、3 支指標暫存器、6 段選擇子、指令/堆疊指標、旗標暫存器、系統控制暫存器。熟記各暫存器慣用用途與隱含指令關聯,是組合語言程式設計的基石。下章將介紹暫存器操作指令與進制表示。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
旗標位元名稱功能
CF0Carry Flag無符號運算進位/借位
PF2Parity Flag結果低位元組 1 的個數為偶數
AF4Auxiliary CarryBCD 運算位元 3 進位
ZF6Zero Flag結果為零
SF7Sign Flag結果最高位元 (有號負數)
TF8Trap Flag單步除錯模式
IF9Interrupt Flag1=響應可屏蔽中斷
DF10Direction Flag字串指令遞增(0)/遞減(1)
OF11Overflow Flag有號運算溢位
IOPL12-13I/O Privilege Level允許執行 I/O 指令的特權級
NT14Nested Task巢狀任務標記
RF16Resume Flag忽略指令斷點
VM17Virtual 8086 ModeV86 模式標記
AC18Alignment Check啟用記憶體對齊檢查
VIF19Virtual Interrupt Flag虛擬中斷旗標
VIP20Virtual Interrupt Pending虛擬中斷待決
ID21ID Flag支援 CPUID 指令