x86 暫存器

在 32 位世界中,通用暫存器分為三大類:16 位通用暫存器,32 位擴充套件通用暫存器和 8 位暫存器半。這三個類根本不代表三個完全不同的暫存器組。16 位和 8 位暫存器實際上是 32 位暫存器的區域名稱。通過擴充套件舊 CPU 中存在的暫存器,可以實現 x86 CPU 系列中的暫存器增長

共有 8 個 16 位通用暫存器:AX,BX,CX,DX,BP,SI,DI 和 SP; 你可以在其中放置任何可以用 16 位或更少的值表示的值。

當英特爾在 1986 年將 x86 架構擴充套件到 32 位時,它將所有 8 個暫存器的大小增加了一倍,並通過在每個暫存器名稱前面新增一個 E 來為它們賦予新名稱,從而產生 EAX,EBX,ECX,EDX,EBP,ESI,EDI 和 ESP。

隨著 x86_64 的出現,暫存器大小又增加了一倍,並增加了一些新的暫存器。這些暫存器為 64 位寬,並命名(斜槓用於顯示備用暫存器名稱):RAX / r0,RBX / r3,RCX / r1,RDX / r2,RBP / r5,RSI / r6,RDI / r7,RSP / r4,R8,R9,R10,R11,R12,R13,R14,R15。

雖然通用暫存器可以在技術上用於任何事情,但每個暫存器也有一個替代/主要目的:

  • AX(累加器)用於算術運算。
  • CX(計數器)用於移位和旋轉指令,並用於迴圈。
  • DX(資料)用於算術和 I / O 操作。
  • BX(base) 用作指向資料的指標(特別是在分段模式下作為 DS 段暫存器的偏移量)。
  • SP(堆疊)指向堆疊的頂部。
  • BP(堆疊基礎)指向堆疊的基礎。
  • SI(源)指向記憶體中用於流操作的源(例如 lodsb)。
  • DI(目的地)指向記憶體中用於流操作的目的地(例如 stosb)。

在分段模式中使用的段暫存器指向儲存器中的不同段。每個 16 位段暫存器提供 64k(16 位)資料的檢視。在將段暫存器設定為指向儲存器塊之後,暫存器(例如 BXSIDI)可用作段暫存器的偏移量,因此可以訪問 64k 空間中的特定位置。

六段暫存器及其用途是:

暫存器 全名 描述
SS 堆疊段 指向堆疊
CS 程式碼段 由 CPU 用於獲取程式碼
DS 資料段 MOV 操作的預設暫存器
ES 額外細分 額外資料段
FS 額外細分 額外資料段
GS 額外細分 額外資料段