寄存器介紹

寄存器是CPU的組成部分,因爲在CPU內,所以CPU對其讀寫速度是最快的,不需要IO傳輸,但同時也決定了此類寄存器數量非常有限,有限到幾乎每個存儲都有自己的名字,而且有些還有多個名字。

IA-32構架提供了16個基本寄存器,這16個基本寄存器可以歸納爲如下幾類:

  • 通用寄存器
  • 段寄存器
  • 狀態和控制寄存器
  • 指令寄存器
通用寄存器

32位通用寄存器有八個,eax, ebx, ecx, edx, esi, edi, ebp, esp,

他們主要用作邏輯運算、地址計算和內存指針,具體功能如下:

  • eax 累加和結果寄存器
  • ebx 數據指針寄存器
  • ecx 循環計數器
  • edx i/o指針
  • esi 源地址寄存器
  • edi 目的地址寄存器
  • esp 堆棧指針
  • ebp 棧指針寄存器

當然,以上功能並未限制寄存器的使用,特殊情況爲了效率也可作其他用途。

這八個寄存器低16位分別有一個引用別名 ax, bx, cx, dx, si, di, sp, bp。

其中 ax, bx, cx, dx, 的高8位又引用至 ah, bh, ch, dh,低八位引用至 al, bl, cl, dl

在 64-bit 模式下,有16個通用寄存器,但是這16個寄存器是兼容32位模式的,32位方式下寄存器名分別爲 eax, ebx, ecx, edx, edi, esi, ebp, esp, r8d – r15d。在64位模式下,他們被擴展爲 rax, rbx, rcx, rdx, rdi, rsi, rbp, rsp, r8 – r15。其中 r8 – r15 這八個寄存器是64-bit模式下新加入的寄存器。

段寄存器

段寄存器 cs, ds, ss, es, fs, gs, 保存16位的段選擇子,一個段選擇子指定了一個段在內存的指針,

以便再內存中訪問段,訪問方式與內存模式有關,段模式和平坦模式其代表的意義並不相同。

  • cs 代碼段寄存器

  • ds, es, fs, gs 數據段寄存器

  • ss 堆棧段寄存器

在 64-bit 模式下,這6個寄存器並無變化,只是使用上略有區別。

狀態和控制寄存器 eflags

這個寄存器表示的意義非常豐富,程序中並不直接操作此寄存器,並由此衍生出很多操作指令。
除去一些保留位,其他每位都代表一個具體的含義,其中 bits 0, 2, 4, 6, 7, 11 是狀態位,標識了某此操作後的狀態:

  • CF (bit 0) —— 進位標識,算術操作進行了進位和借位,則此位被設置
  • PF (bit 2) —— 奇偶標識,結果包含奇數個1,則設置此位
  • AF (bit 4) —— 輔助進位標識,結果的第3位像第4位借位,則此位被設置
  • ZF (bit 6) —— 零標識,結果爲零,此位設置
  • SF (bit 7) —— 符號標識,若爲負數則設置此位
  • OF (bit 11) —— 溢出標識,結果像最高位符號位進行借位或者進位,此標誌被設置

8, 9, 10 位爲控制標識:

  • TF (bit 8) —— 陷阱標識,設置進程可以被單步調試

  • IF (bit 9) —— 中斷標識,設置能夠響應中斷請求

  • DF (bit 10) —— 方向標識,用於標示字符處理過程中指針移動方向

64-bit模式下,該寄存器被擴展爲64位,rflags,但是其高32位保留未被使用,其低32位所表示含義與32位模式相同。

指令寄存器 EIP

EIP —— 標誌當前進程將要執行指令位置,在64位模式下擴展爲 RIP 64位指令寄存器。

控制寄存器
  • cr0
  • cr2
  • cr3
  • cr4
系統表指針寄存器
  • idtr —— 中斷描述符表信息
  • gdtr —— 全局描述符表信息
  • ldtr —— 局部描述符表信息
任務寄存器tr

保存任務的狀態信息 tss

調試寄存器

dr0 – dr7,控制和允許監視進程的調試操作

x87 FPU 寄存器

這組指令專門用過浮點運算,因爲浮點運算尤其固有的特性,所以需要使用一組獨立寄存器。
數據寄存器包括 r0 – r7 的8個 80 位寄存器,彙編程序中通過名字 st(x) 引用,另外還有3個16位寄存器,分別是控制寄存器,狀態寄存器,標記寄存器。這裏的省略具體含義的介紹。

MMX 寄存器

MMX 爲一種 SIMD 技術,即可通過一條指令執行多個數據運算,共有8個64位寄存器,分別爲mm0 – mm7,它與其他普通64位寄存器的區別在於通過它的指令進行運算,可以同時計算2個32位數據,或者4個16位數據等等,可以應用爲圖像處理過程中圖形 顏色的計算。

另外需要特別注意的是,MMX並非一種新的寄存器,而是FPU 80位寄存器的低64位,也就是說,使用MMX指令集,會影響浮點運算!

XMM 寄存器

XMM 同 MMX,只是他有 8 個 128 位寄存器,分別爲 xmm0 – xmm7,另外還包含計算過程中的狀態和控制寄存器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章