基本含義 暫存器,是積體電路中非常重要的一種存儲單元,通常由觸發器組成。在積體電路設計中,暫存器可分為電路內部使用的暫存器和充當內外部接口的暫存器這兩類。內部暫存器不能被外部電路或軟體訪問,只是為內部電路的實現存儲功能或滿足電路的時序要求。而接口暫存器可以同時被內部電路和外部電路或軟體訪問,CPU中的暫存器就是其中一種,作為軟硬體的接口,為廣泛的通用編程用戶所熟知。
暫存器 是
記憶體 階層中的最頂端,也是系統獲得操作資料的最快速途徑。暫存器通常都是以他們可以保存的位元數量來估量,
舉例來說,一個“8 位元暫存器”或“32
位 元暫存器”。暫存器現在都以暫存器檔案的方式來實作,但是他們也可能使用單獨的正反器、高速的
核心記憶體 、薄膜記憶體以及在數種機器上的其他方式來實作出來。
暫存器 暫存器通常都用來意指由一個
指令 之輸出或輸入可以直接索引到的
暫存器 群組。更適當的是稱他們為“架構
暫存器 ”。
例如,x86
指令集 定義八個32 位元
暫存器 的集合,但一個實際 x86 指令集的
CPU 可以包含比八個更多的暫存器。
分類 通用目的
暫存器 (GPRs) - 可以保存數據或地址兩者,也就是說它們是結合數據/地址 暫存器的功用。
常數
暫存器 - 用來持有隻讀的數值(例如0、1、圓周率等等)。
向量
暫存器 - 用來儲存由
向量處理器 運行SIMD(Single Instruction, Multiple Data)
指令 所得到的數據。
指令暫存器 (instruction register)- 儲存現在正在被運行的指令。
索引
暫存器 (index register)- 是在程式運行時用來更改運算對象地址之用。
在某些架構下,模式指示
暫存器 (也稱為“機器指示暫存器”)儲存和設定跟處理器自己有關的數據。由於他們的意圖目的是附加到特定處理器的設計,因此他們並不被預期會成為
微處理器 世代之間保留的標準。
PORT1的控制暫存器 存儲器緩衝
暫存器 (Memory buffer register)
存儲器
數據暫存器 (Memory data register)
存儲器地址 暫存器(Memory address register)
存儲器型態範圍
暫存器 (Memory Type Range Registers)
向量暫存器
原理 暫存器的基本單元是
D觸發器 ,按照其用途分為基本暫存器和移位暫存器
基本暫存器邏輯圖 基本暫存器(見圖)是由 D觸發器組成,在 CP 脈衝作用下,每個 D觸發器能夠暫存一位二進制碼。在 D=0 時,暫存器儲存為 0,在 D=1 時,暫存器儲存為 1。 在低電平為 0、高電平為 1 時,需將信號源與 D 間連線一反相器,這樣就可以完成對數據的儲存。
需要強調的是,目前大型數字系統都是基於時鐘運作的,其中暫存器一般是在時鐘的邊緣被觸發的,基於電平觸發的已較少使用。(通常說的CPU的頻率就是指數字積體電路的時鐘頻率)
移位暫存器按照移位方向可以分為單向移位暫存器和雙向移位暫存器
單向移位暫存器是由多個 D 觸發器串接而成(見圖),在串口 Di 輸入需要儲存的數據,觸發器 FF0 就能夠儲存當前需要儲存數據,在 CP 發出一次時鐘控制脈衝時,串口 Di 同時輸入第二個需要儲存是的數據,而第一個數據則儲存到觸發器 FF1 中。
雙向移位暫存器按圖中方式排列,調換連線端順序,可以控制暫存器向左移位,增加控制電路可以使暫存器右移,這樣構成雙向移位暫存器。
8086暫存器 通用暫存器 有8個, 又可以分成2組,一組是
數據暫存器 (4個),另一組是指針暫存器及
變址 暫存器(4個).
顧名思義,
通用暫存器 是那些你可以根據自己的意願使用的暫存器,修改他們的值通常不會對
計算機 的運行造成很大的影響。
AH&AL=AX(accumulator): 累加暫存器 ,常用於運算;在乘除等
指令 中指定用來存放
運算元 ,另外,所有的
I/O指令 都使用這一暫存器與外界設備傳送數據。
BH&BL=BX(base): 基址 暫存器 ,常用於地址索引
CH&CL=CX(count): 計數
暫存器 ,常用於計數;常用於保存計算值,如在
移位指令 ,循環(loop)和串處理指令中用作隱含的計數器.
暫存器 DH&DL=DX(data): 數據暫存器 ,常用於數據傳遞。
他們的特點是,這4個16位的
暫存器 可以分為高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。這2組8位
暫存器 可以分別定址,並單獨使用。
SP(Stack Pointer): 堆疊指針 ,與SS配合使用,可指向目前的堆疊位置
BP(Base Pointer): 基址 指針 暫存器 ,可用作SS的一個相對基址位置
SI(Source Index): 源
變址 暫存器 ,可用來存放相對於DS段之源變址指針
DI(Destination Index): 目的
變址 暫存器 ,可用來存放相對於ES 段之目的變址
指針 。
指令指針IP 指令 指針IP是一個16位專用
暫存器 ,它指向當前需要取出的指令
位元組 ,當BIU從
記憶體 中取出一個指令位元組後,IP就自動加(取出該位元組的長度,如:BIU從記憶體中取出的是1個位元組,IP就會自動加1,如果BIU從記憶體中取出的位元組數長度為3,IP就自動加3),指向下一個指令位元組。注意,IP指向的是
指令 地址的段內地址
偏移量 ,又稱
偏移地址 (Offset Address)或
有效地址 (EA,Effective Address)。
標誌暫存器 8086有一個16位的標誌性
暫存器 FR,在FR中有意義的有9位,其中6位是狀態位,3位是控制位。
標誌暫存器 (Flags Register,FR)又稱
程式狀態字 (Program Status Word,PSW)。這是一個存放條件標誌、控制
標誌暫存器 ,主要用於反映處理器的狀態和運算
結果 的某些特徵及控制
指令 的執行。
標誌暫存器位置圖:
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
OF
DF
IF
TF
SF
ZF
AF
PF
CF
OF: 溢出標誌位OF用於反映有
符號 數加減運算所得
結果 是否溢出。如果運算
結果 超過當前運算位數所能表示的範圍,則稱為溢出,OF的值被置為1,否則,OF的值被清為0。
DF: 方向標誌DF位用來決定在串操作
指令 執行時有關指針
暫存器 發生調整的方向。
IF: 中斷允許標誌IF位用來決定CPU是否回響CPU外部的
可禁止中斷 發出的
中斷請求 。但不管該標誌為何值,CPU都必須回響CPU外部的不可禁止中斷所發出的
中斷請求 ,以及CPU內部產生的
中斷請求 。具體規定如下:
(2)、當IF=0時,CPU不回響CPU外部的
可禁止中斷 發出的中斷請求。
TF: 跟蹤標誌TF。該標誌可用於
程式調試 。TF標誌沒有專門的
指令 來設定或清除。
(1)如果TF=1,則CPU處於單步執行
指令 的工作方式,此時每執行完一條指令,就顯示CPU內各個
暫存器 的當前值及CPU將要執行的下一條指令。
(2)如果TF=0,則處於連續工作模式。
SF: 符號 標誌SF用來反映運算
結果 的符號位,它與運算結果的最高位相同。在
微機系統 中,
有符號數 採用補碼錶示法,所以,SF也就反映運算
結果 的正負號。運算
結果 為非負數時,SF的值為0,否則其值為1。當運算
結果 沒有產生溢出時,運算結果等於邏輯結果(即應該得到的正確的結果),此時SF表示的是邏輯結果的正負,當運算結果產生溢出時,運算結果不等於邏輯結果,此時的SF值所表示的正負情況與邏輯結果相反,即:SF=0時,邏輯結果為負,SF=1時,邏輯結果為非負。
ZF: 零標誌ZF用來反映運算
結果 是否為0。如果運算
結果 為0,則其值為1,否則其值為0。在判斷運算結果是否為0時,可使用此標誌位。
暫存器 AF:( Assistant Carry Flag) 下列情況下,
輔助進位標誌 AF的值被置為1,否則其值為0:
(1)、在字操作時,發生低
位元組 向高位元組進位或借位時
(2)、在
位元組 操作時,發生低4位向高4位進位或借位時。
PF: 奇偶標誌PF用於反映運算
結果 中“1”的個數的奇偶性。如果“1”的個數為偶數,則PF的值為1,否則其值為0。
CF: 進位標誌CF主要用來反映無
符號 數運算是否產生進位或借位。如果運算
結果 的最高位產生了一個進位或借位,那么,其值為1,否則其值為0。
段暫存器 ES(Extra Segment): 附加
段暫存器 。
當一個程式要執行時,就要決定程式代碼、數據和
堆疊 各要用到
記憶體 的哪些位置,通過設定
段暫存器 CS,DS,SS 來指向這些起始位置。通常是將DS固定,而根據需要修改CS。所以,程式可以在可
定址空間 小於64K的情況下被寫成任意大小。所以,程式和其數據組合起來的大小,限制在DS 所指的64K內,這就是COM檔案不得大於64K的原因。8086以
記憶體 作為戰場,用
暫存器 做為軍事基地,以加速工作。
備註:由於所講的是16位cpu(IP
暫存器 的位數為16,即:
偏移地址 為16位)2的16次冪就是64K,所以16位
段地址 不能超過64K,超過64K會造成64K以上的地址找不到。
工作原理 暫存器 的功能十分重要,CPU對存儲器中的數據進行處理時,往往先把數據取到內部暫存器中,而後再作處理。外部暫存器是
計算機 中其它一些部件上用於暫存數據的暫存器,它與CPU之間通過“
連線埠 ”交換數據,外部暫存器具有暫存器和
記憶體儲器 雙重特點。有些時候我們常把外部
暫存器 就稱為“
連線埠 ”,這種說法不太嚴格,但經常這樣說。
外部
暫存器 雖然也用於存放數據,但是它保存的數據具有特殊的用途。某些
暫存器 中各個位的0、1狀態反映了外部設備的工作狀態或方式;還有一些暫存器中的各個位可對
外部設備 進行控制;也有一些連線埠作為CPU同外部設備交換數據的通路。所以說,
連線埠 是CPU和外設間的聯繫橋樑。CPU對連線埠的訪問也是依據連線埠的“編號”(地址),這一點又和訪問存儲器一樣。不過考慮到機器所聯接的外設數量並不多,所以在設計機器的時候僅安排了1024個
連線埠地址 ,連線埠地址範圍為0--3FFH。
主要技術 重命名技術 暫存器重命名 ,是CPU在解碼過程中對暫存器進行重命名,
解碼器 把“其它”的暫存器名字變為“通用”的暫存器名字,本質上是通過一個表格把x86暫存器重新
映射 到其它暫存器,這樣可以讓實際使用到的暫存器遠大於8個。這樣做的好處除了便於前面
指令 發生意外或
分支預測 出錯時取消外,還避免了由於兩條指令寫同一個
暫存器 時的等待。
亂序執行技術 採用亂序執行技術使CPU內部電路
滿負荷 運轉並相應提高了CPU運行程式的速度。這好比請A、B、C三個名人為春節聯歡晚會題寫橫幅“春節聯歡晚會”六個大字,每人各寫兩個字,如果這時在一張大紙上按順序由A寫好“春節”後再交給B寫“聯歡”,然後再由C寫“晚會”,那么這樣在A寫的時候,B和C必須等待,而在B寫的時候C仍然要等待而A已經沒事了。
但如果採用三個人分別用三張紙同時寫的做法,那么B和C都不必等待就可以同時各寫各的了,甚至C和B還可以比A先寫好 也沒關係(就像
亂序執行 ),但當他們都寫完後就必須重新在橫幅上按“春節聯歡晚會”的順序排好(自然可以由別人做,就象CPU中亂序執行後的重新排列單元)才能掛出去。
特點 ②暫存器所能存儲的數據不一定是8
bit ,有一些暫存器可以存儲16bit數據,對於386/486
處理器 中的一些暫存器則能存儲32bit數據
③每個內部暫存器都有一個名字,而沒有類似存儲器的地址編號。
用途 2.存於暫存器內的地址可用來指向
記憶體 的某個位置,即定址
3.可以用來讀寫數據到電腦的周邊設備。
具體舉例 UxCTL 圖UxCTL暫存器
由圖可以看出,UxCTL
暫存器 主要包括8個有效的控制位。為了增加對UxCTL
暫存器 的了解,知道怎樣對該暫存器進行正確的設定,下面對UxCTL
暫存器 的各個位進行詳細介紹。
PENA:校驗使能位。當該位為0時,不允許校驗;當該位為1時,允許校驗。如果允許校驗,則傳送時產生校驗位,在接收時希望接收到校驗位。.當在地址位多機模式中¨地址位包括在校驗計算中。
SPB:停止位。該位用來選擇傳送時停止位的個數,但接收時停止位只有一個。當該位為0時,傳送時只有1個停止位;當該位為1時,傳送時有2個停止位。
CHAR:字元長度位。該位用來選擇傳送時數據的長度。當該位為0時,傳送的數據為7位;當該位為1時,傳送的數據為8位。
LISTEN:監聽使能位。該位用來選擇反饋模式。當該位為0時,沒有反饋;當該位為1時,有反饋,傳送的數據被送到
接收器 ,這樣可以進行自環測試。
SYNC:該位用於同步模式選擇和異步模式選擇。當該位為0時,USART模組為異步通信(UART)模式;當該位為1時,USART模組為
同步通信 (SPI)模式。
MM:多機模式選擇位。當該位為0時,多機模式選擇線路空閒多機協定;當該位為1時,多機模式選擇地址位多機協定。
SWRST:軟體復位使能位。當該位為0時,UASRT模組被允許;當該位為1時,UASRT模組被禁止。
通過以上對UxCTL暫存器的各個位的介紹,可以完成對通信模式和通信數據格式等的選擇。
通用暫存器 顧名思義,通用暫存器是那些你可以根據自己的意願使用的暫存器,修改他們的值通常不會對計算機的運行造成很大的影響。
通用暫存器 最多的用途是計算。
通用暫存器
EBX:
通用暫存器 。通常作為
記憶體 偏移
指針 使用(相對於EAX、ECX、EDX),DS是默認的
段暫存器 或選擇器。在保護模式中,同樣可以起這個作用。
同AX分為AH&AL一樣,上述
暫存器 包括對應的16-bit分組和8-bit分組。
特殊暫存器 ESI:通常在
記憶體 操作
指令 中作為“源地址指針”使用。當然,ESI可以被裝入任意的數值,但通常沒有人把它當作
通用暫存器 來用。DS是默認段暫存器或選擇器。
現金暫存器 EDI:通常在記憶體操作指令中作為“目的地址
指針 ”使用。當然,EDI也可以被裝入任意的數值,但通常沒有人把它當作
通用暫存器 來用。ES是默認段暫存器或選擇器。
EBP和ESP:作為指針的
暫存器 ,也可作為16位暫存器BP, SP使用,常用於椎棧操作。通常,它被高級語言
編譯器 用以建造‘
堆疊 幀'來保存
函式 或過程的
局部變數 ,不過,還是那句話,你可以在其中保存你希望的任何數據。SS是它的默認
段暫存器 或選擇器。
注意,這四個
暫存器 沒有對應的8-bit分組。換言之,你可以通過SI、DI、BP、SP作為別名訪問他們的低16位,卻沒有辦法直接訪問他們的低8位。
段選擇器 實模式 下的
段暫存器 到保護模式下搖身一變就成了選擇器。不同的是,實模式下的“
段暫存器 ”是16-bit的,而保護模式下的選擇器是32-bit的。
CS
代碼 段,或代碼選擇器。同IP
暫存器 (稍後介紹)一同指向當前正在執行的那個地址。處理器執行時從這個
暫存器 指向的段(實模式)或
記憶體 (保護模式)中獲取
指令 。除了跳轉或其他分支
指令 之外,你無法修改這個
暫存器 的內容。
DS
數據段 ,或
數據選擇器 。這個
暫存器 的低16 bit連同ESI一同指向的
指令 將要處理的
記憶體 。同時,所有的
記憶體 操作
指令 默認情況下都用它指定操作段(實模式)或記憶體(作為選擇器,在保護模式。這個
暫存器 可以被裝入任意數值,然而在這么做的時候需要小心一些。方法是,首先把數據送給AX,然後再把它從AX傳送給DS(當然,也可以通過
堆疊 來做).
ES 附加段,或附加選擇器。這個
暫存器 的低16 bit連同EDI一同指向的
指令 將要處理的
記憶體 。同樣的,這個
暫存器 可以被裝入任意數值,方法和DS類似。
FS F段或F選擇器(推測F和下面的G正好是上面CS,DS,ES的字母順延)。可以用這個
暫存器 作為默認
段暫存器 或選擇器的一個替代品。它可以被裝入任何數值,方法和DS類似。
GS G段或G選擇器(G的意義和F一樣,沒有在Intel的文檔中解釋)。它和FS幾乎完全一樣。
SS
堆疊段 或堆疊選擇器。這個
暫存器 的低16 bit連同ESP一同指向下一次
堆疊 操作(push和pop)所要使用的堆疊地址。這個
暫存器 也可以被裝入任意數值,你可以通過入棧和
出棧 操作來給他賦值,不過由於
堆疊 對於很多操作有很重要的意義,因此,不正確的修改有可能造成對堆疊的破壞。
* 注意一定不要在初學彙編的階段把這些
暫存器 弄混。他們非常重要,而一旦你掌握了他們,你就可以對他們做任意的操作了。
段暫存器 ,或選擇器,在沒有指定的情況下都是使用默認的那個。這句話在現在看來可能有點稀里糊塗,不過你很快就會在後面知道如何去做。
指令指針 EIP 這個
暫存器 非常的重要。這是一個32
位寬 的
暫存器 ,同CS一同指向即將執行的那條
指令 的地址,存放指令的
偏移地址 。
微處理器 工作於實模式下,EIP是IP(16位)
暫存器 。不能夠直接修改這個
暫存器 的值,修改它的唯一方法是跳轉或分支
指令 。(CS是默認的段或選擇器)
② 控制標誌位:包括
陷阱 標誌(單步操作標誌)TF、中斷標誌IF和方向標誌DF。80486 CPU
標誌暫存器 中的狀態標誌位和控制標誌位與8086 CPU標誌暫存器中的
狀態標誌 位和控制標誌位的功能完全一樣,這裡就不再贅述。
③ 系統標誌位和IOPL欄位:在EFR
暫存器 中的系統標誌和IOPL欄位,用於控制
作業系統 或執行某種操作。它們不能被
應用程式 修改。
IOPL(I/O privilege level field):輸入/輸出
特權級 標誌位。它規定了能使用I/O
敏感指令 的
特權級 。在保護模式下,利用這兩位
編碼 可以分別表示0, 1, 2, 3這四種
特權級 ,0級特權最高,3級特權最低。在80286以上的處理器中有一些I/O敏感
指令 ,如CLI(關
中斷指令 )、STI(開中斷
指令 )、IN(輸入)、OUT(輸出)。IOPL的值規定了能執行這些指令的
特權級 。只有特權高於IOPL的程式才能執行I/O敏感
指令 ,而特權低於IOPL的程式,若企圖執行敏感指令,則會引起異常中斷。
NT(nested task flag):任務嵌套標誌。在保護模式下,指示當前執行的任務嵌套於另一任務中。當任務被嵌套時,NT=1,否則NT=0。
RF(resume flag):恢復標誌。與調試
暫存器 一起使用,用於保證不重複處理
斷點 。當RF=1時,即使遇到斷點或故障,也不產生異常中斷。
VM(virtual 8086 mode flag):虛擬8086模式標誌。用於在保護模式系統中選擇虛擬操作模式。VM=1,啟用虛擬8086模式;VM=0,返回保護模式。
AC(alignment check flag):
佇列 檢查標誌。如果在不是字或雙字的邊界上定址一個字或雙字,佇列檢查標誌將被激活。
其他暫存器 上面是最基本的
暫存器 。下面是一些其他的
暫存器 ,你甚至可能沒有聽說過它們。(都是32
位寬 ):
CR0, CR2, CR3(
控制暫存器 )。舉一個例子,CR0的作用是切換實模式和保護模式。
還有其他一些
暫存器 ,D0, D1, D2, D3, D6和D7(調試暫存器)。他們可以作為
調試器 的硬體支持來設定條件斷點。
TR3, TR4, TR5, TR6 和TR?
暫存器 (測試暫存器)用於某些條件測試。