通用暫存器

通用暫存器

通用暫存器可用於傳送和暫存數據,也可參與算術邏輯運算,並保存運算結果。除此之外,它們還各自具有一些特殊功能。彙編語言程式設計師必須熟悉每個暫存器的一般用途和特殊用途,只有這樣,才能在程式中做到正確、合理地使用它們。

基本介紹

  • 中文名:通用暫存器
  • 領域:計算機作業系統,彙編語言
簡介,分類,數據暫存器,變址暫存器,指針暫存器,段暫存器,指令指針暫存器,主要用途,相關信息,

簡介

通用暫存器可用於傳送和暫存數據,也可參與算術邏輯運算,並保存運算結果。除此之外,它們還各自具有一些特殊功能。通用暫存器的長度取決於機器字長,彙編語言程式設計師必須熟悉每個暫存器的一般用途和特殊用途,只有這樣,才能在程式中做到正確、合理地使用它們。
16位cpu通用暫存器共有 8 個:AX,BX,CX,DX,BP,SP,SI,DI.
八個暫存器都可以作為普通的數據暫存器使用。
但有的有特殊的用途:AX為累加器,CX為計數器,BX,BP為基址暫存器,SI,DI為變址暫存器,BP還可以是基
指針,SP為堆疊指針
32位cpu通用暫存器共有 8 個: EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI功能和上面差不多

分類

數據暫存器


數據暫存器主要用來保存運算元和運算結果等信息,從而節省讀取運算元所需占用匯流排和訪問存儲器的時間。
32位CPU有4個32位的通用暫存器EAX、EBX、ECX和EDX。對低16位數據的存取,不會影響高16位的數據。這些低16位暫存器分別命名為:AX、BX、CX和DX,它和先前的CPU中的暫存器相一致。
4個16位暫存器又可分割成8個獨立的8位暫存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每個暫存器都有自己的名稱,可獨立存取。程式設計師可利用數據暫存器的這種“可分可合”的特性,靈活地處理字/位元組的信息。
暫存器AX和AL通常稱為累加器(Accumulator),用累加器進行的操作可能需要更少時間。累加器可用於乘、除、輸入/輸出等操作,它們的使用頻率很高; 暫存器BX稱為基地址暫存器(Base Register)。它可作為存儲器指針來使用; 暫存器CX稱為計數暫存器(Count Register)。在循環和字元串操作時,要用它來控制循環次數;在位操作中,當移多位時,要用CL來指明移位的位數; 暫存器DX稱為數據暫存器(Data Register)。在進行乘、除運算時,它可作為默認的運算元參與運算,也可用於存放I/O的連線埠地址。
在16位CPU中,AX、BX、CX和DX不能作為基址和變址暫存器來存放存儲單元的地址,但在32位CPU中,其32位暫存器EAX、EBX、ECX和EDX不僅可傳送數據、暫存數據保存算術邏輯運算結果,而且也可作為指針暫存器,所以,這些32位暫存器更具有通用性。詳細內容請見第3.8節——32位地址的定址方式。

變址暫存器


32位CPU有2個32位通用暫存器ESI和EDI。其低16位對應先前CPU中的SI和DI,對低16位數據的存取,不影響高16位的數據。
暫存器ESI、EDI、SI和DI稱為變址暫存器(Index Register),它們主要用於存放存儲單元在段內的偏移量,用它們可實現多種存儲器運算元的定址方式(在第3章有詳細介紹),為以不同的地址形式訪問存儲單元提供方便。 變址暫存器不可分割成8位暫存器。作為通用暫存器,也可存儲算術邏輯運算的運算元和運算結果。
它們可作一般的存儲器指針使用。在字元串操作指令的執行過程中,對它們有特定的要求,而且還具有特殊的功能。

指針暫存器

32位CPU有2個32位通用暫存器EBP和ESP。其低16位對應先前CPU中的SBP和SP,對低16位數據的存取,不影響高16位的數據。 暫存器EBP、ESP、BP和SP稱為指針暫存器(Pointer Register),主要用於存放堆疊記憶體儲單元的偏移量,用它們可實現多種存儲器運算元的定址方式(在第3章有詳細介紹),為以不同的地址形式訪問存儲單元提供方便。指針暫存器不可分割成8位暫存器。作為通用暫存器,也可存儲算術邏輯運算的運算元和運算結果。

段暫存器

段暫存器是根據記憶體分段的管理模式而設定的。記憶體單元的物理地址由段暫存器的值和一個偏移量組合而成的,這樣可用兩個較少位數的值組合成一個可訪問較大物理空間的記憶體地址。

指令指針暫存器

32位CPU把指令指針擴展到32位,並記作EIP,EIP的低16位與先前CPU中的IP作用相同。 指令指針EIP、IP(Instruction Pointer)是存放下次將要執行的指令在代碼段的偏移量。在具有預取指令功能的系統中,下次要執行的指令通常已被預取到指令佇列中,除非發生轉移情況。所以,在理解它們的功能時,不考慮存在指令佇列的情況。 在實方式下,由於每個段的最大範圍為64K,所以,EIP中的高16位肯定都為0,此時,相當於只用其低16位的IP來反映程式中指令的執行次序。

主要用途

通用暫存器數據
暫存器AX乘、除運算,字的輸入輸出,中間結果的快取
AL位元組的乘、除運算,位元組的輸入輸出,十進制算術運算
AH位元組的乘、除運算,存放中斷的功能號
BX存儲器指針
CX串操作、循環控制的計數器
CL移位操作的計數器
DX字的乘、除運算,間接的輸入輸出
變址
暫存器SI存儲器指針、串指令中的源運算元指針
DI存儲器指針、串指令中的目的運算元指針
變址 暫存器BP存儲器指針、存取堆疊的指針
分類示意圖分類示意圖
SP堆疊的棧頂指針
指令指針IP/EIP
標誌位暫存器Flag/EFlag
32位
CPU的
段暫存器16位CPU的
段暫存器ES 附加段暫存器
CS 代碼段暫存器
SS 堆疊段暫存器
DS 數據段暫存器
新增加的
段暫存器FS 附加段暫存器
GS 附加段暫存器

相關信息

暫存器是CPU內部重要的數據存儲資源,用來暫存數據和地址,是彙編程式設計師能直接使用的硬體資源之一。由於暫存器的存取速度比記憶體快,所以,在用彙編語言編寫程式時,要儘可能充分利用暫存器的存儲功能。暫存器一般用來保存程式的中間結果,為隨後的指令快速提供運算元,從而避免把中間結果存入記憶體,再讀取記憶體的操作。在高級語言(如:C/C++語言)中,也有定義變數為暫存器類型的,這就是提高暫存器利用率的一種可行的方法。
運算器結構運算器結構
另外,由於暫存器的個數和容量都有限,不可能把所有中間結果都存儲在暫存器中,所以,要對暫存器進行適當的調度。根據指令的要求,如何安排適當的暫存器,避免運算元過多的傳送操作是一項細緻而又周密的工作。

相關詞條

熱門詞條

聯絡我們