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 位)資料的檢視。在將段暫存器設定為指向儲存器塊之後,暫存器(例如 BX
,SI
和 DI
)可用作段暫存器的偏移量,因此可以訪問 64k 空間中的特定位置。
六段暫存器及其用途是:
暫存器 | 全名 | 描述 |
---|---|---|
SS |
堆疊段 | 指向堆疊 |
CS |
程式碼段 | 由 CPU 用於獲取程式碼 |
DS |
資料段 | MOV 操作的預設暫存器 |
ES |
額外細分 | 額外資料段 |
FS |
額外細分 | 額外資料段 |
GS |
額外細分 | 額外資料段 |