後知後覺-寄存器

原文鏈接:https://baike.baidu.com/item/%E5%AF%84%E5%AD%98%E5%99%A8/187682?fr=aladdin

寄存器是中央處理器內的組成部分。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令數據地址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計數器(PC)。在中央處理器的算術及邏輯部件中,寄存器有累加器(ACC)。

基本含義

寄存器,是集成電路中非常重要的一種存儲單元,通常由觸發器組成。在集成電路設計中,寄存器可分爲電路內部使用的寄存器和充當內外部接口的寄存器這兩類。內部寄存器不能被外部電路或軟件訪問,只是爲內部電路的實現存儲功能或滿足電路的時序要求。而接口寄存器可以同時被內部電路和外部電路或軟件訪問,CPU中的寄存器就是其中一種,作爲軟硬件的接口,爲廣泛的通用編程用戶所熟知。

在計算機領域,寄存器是CPU內部的元件,包括通用寄存器、專用寄存器和控制寄存器。寄存器擁有非常高的讀寫速度,所以在寄存器之間的數據傳送非常快。

寄存器是內存階層中的最頂端,也是系統獲得操作資料的最快速途徑。寄存器通常都是以他們可以保存的位元數量來估量,

寄存器寄存器

舉例來說,一個“8 位元寄存器”或“32元寄存器”。寄存器都以寄存器檔案的方式來實作,但是他們也可能使用單獨的正反器、高速的核心內存、薄膜內存以及在數種機器上的其他方式來實作出來。

寄存器通常都用來意指由一個指令之輸出或輸入可以直接索引到的暫存器羣組。更適當的是稱他們爲“架構寄存器”。

例如,x86指令集定義八個32 位元寄存器的集合,但一個實際 x86 指令集的CPU可以包含比八個更多的寄存器。

 

分類

編輯

數據寄存器- 用來儲存整數數字(參考以下的浮點寄存器)。在某些簡單/舊的CPU,特別的數據寄存

寄存器寄存器

器是累加器,作爲數學計算之用。

地址寄存器- 持有存儲器地址,用來訪問存儲器。在某些簡單/舊的CPU裏,特別的地址寄存器是索引寄存器(可能出現一個或多個)。

通用目的寄存器(GPRs) - 可以保存數據或地址兩者,也就是說它們是結合數據/地址 寄存器的功用。

浮點寄存器(FPRs) - 用來儲存浮點數字。

常數寄存器- 用來持有隻讀的數值(例如0、1、圓周率等等)。

向量寄存器- 用來儲存由向量處理器運行SIMD(Single Instruction, Multiple Data)指令所得到的數據。

特殊目的寄存器- 儲存CPU內部的數據,像是程序計數器(或稱爲指令指針),堆棧寄存器,以及狀態寄存器(或稱微處理器狀態字組)。

指令寄存器(instruction register)- 儲存正在被運行的指令。

索引寄存器(index register)- 是在程序運行時用來更改運算對象地址之用。

在某些架構下,模式指示寄存器(也稱爲“機器指示寄存器”)儲存和設置跟處理器自己有關的數據。由於他

PORT1的控制寄存器PORT1的控制寄存器

們的意圖目的是附加到特定處理器的設計,因此他們並不被預期會成爲微處理器世代之間保留的標準。

有關從隨機存取存儲器提取信息的寄存器與CPU(位於不同芯片的儲存寄存器集合)

存儲器緩衝寄存器(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寄存器

編輯

8086 有14個16位寄存器,這14個寄存器按其用途可分爲(1)通用寄存器、(2)指令指針、(3)標誌寄存器和(4)段寄存器等4類。

通用寄存器

有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 段之目的變址指針

這4個16位寄存器只能按16位進行存取操作,主要用來形成操作數的地址,用於堆棧操作和變址運算中計算操作數的有效地址

指令指針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內部產生的中斷請求。具體規定如下:

(1)、當IF=1時,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。

段寄存器

爲了運用所有的內存空間,8086設定了四個段寄存器,專門用來保存段地址

寄存器寄存器

CS(Code Segment):代碼段寄存器

DS(Data Segment):數據段寄存器

SS(Stack Segment):堆棧段寄存器

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中亂序執行後的重新排列單元)才能掛出去。

特點

編輯

寄存器又分爲內部寄存器與外部寄存器,所謂寄存器,其實也是一些小的存儲單元,也能存儲數據。但同存儲器相比,寄存器又有自己獨有的特點:

①寄存器位於CPU內部,數量很少,僅十四個

②寄存器所能存儲的數據不一定是8bit,有一些寄存器可以存儲16bit數據,對於386/486處理器中的一些寄存器則能存儲32bit數據

③每個內部寄存器都有一個名字,而沒有類似存儲器的地址編號。

用途

編輯

1.可將寄存器內的數據執行算術及邏輯運算

2.存於寄存器內的地址可用來指向內存的某個位置,即尋址

3.可以用來讀寫數據到電腦的周邊設備。

具體舉例

編輯

UxCTL

UxCTL寄存器是一個8位的寄存器。UASRT模塊的基本操作由該寄存器的控制位確定的,它包含了通信協議、通信模式和校驗位等的選擇。

圖

圖給出了寄存器的各個位。

圖UxCTL寄存器

由圖可以看出,UxCTL寄存器主要包括8個有效的控制位。爲了增加對UxCTL寄存器的瞭解,知道怎樣對該寄存器進行正確的設置,下面對UxCTL寄存器的各個位進行詳細介紹。

PENA:校驗使能位。當該位爲0時,不允許校驗;當該位爲1時,允許校驗。如果允許校驗,則發送時產生校驗位,在接收時希望接收到校驗位。.當在地址位多機模式中¨地址位包括在校驗計算中。

PEV:奇偶校驗位。當該位爲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寄存器的各個位的介紹,可以完成對通信模式和通信數據格式等的選擇。

通用寄存器

顧名思義,通用寄存器是那些你可以根據自己的意願使用的寄存

通用寄存器通用寄存器

器,修改他們的值通常不會對計算機的運行造成很大的影響。通用寄存器最多的用途是計算。

EAX:通用寄存器。相對其他寄存器,在進行運算方面比較常用。在保護模式中,也可以作爲內存偏移指針(此時,DS作爲段寄存器或選擇器)

EBX:通用寄存器。通常作爲內存偏移指針使用(相對於EAX、ECX、EDX),DS是默認的段寄存器或選擇器。在保護模式中,同樣可以起這個作用。

ECX:通用寄存器。通常用於特定指令的計數。在保護模式中,也可以作爲內存偏移指針(此時,DS作爲寄存器或段選擇器)。

EDX:通用寄存器。在某些運算中作爲EAX的溢出寄存器(例如乘、除)。

同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是默認的段或選擇器)

E、標誌寄存器EFR

EFR(extra flags register)包括控制系統標誌,用於指示微處理器的狀態並控制微處理器的操作。80486 CPU標誌寄存器如圖2.12所示。

狀態標誌位:包括進位標誌CF、奇偶標誌PF輔助進位標誌AF、零標誌ZF 、符號標誌SF和溢出標誌OF。

② 控制標誌位:包括陷阱標誌(單步操作標誌)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):隊列檢查標誌。如果在不是字或雙字的邊界上尋址一個字或雙字,隊列檢查標誌將被激活。

條件跳轉控制流gadget是循環和遞歸等控制結構的基礎。然而ARMv7指令集中的間接條件跳轉指令在ARMv8指令集中已經不再存在。ARMv8指令集中的條件跳轉指令的目標地址的偏移已經被硬編碼,不能被使用,所以ARMv8架構下只能通過無條件跳轉gadget的重複使用實現循環和遞歸 [1]  。

其他寄存器

上面是最基本的寄存器。下面是一些其他的寄存器,你甚至可能沒有聽說過它們。(都是32位寬):

CR0, CR2, CR3(控制寄存器)。舉一個例子,CR0的作用是切換實模式和保護模式。

4HC595是美國國家半導體公司生產的通用位移寄存器芯片,它可以實現8位串行輸入/輸出或者並行輸出,操作方便簡單,可以很容易的完成對單片機IO口的擴展 [2]  。

還有其他一些寄存器,D0, D1, D2, D3, D6和D7(調試寄存器)。他們可以作爲調試器的硬件支持來設置條件斷點。

TR3, TR4, TR5, TR6 和TR寄存器(測試寄存器)用於某些條件測試。

==============================================================================================

要回答這個問題呢,需要先說明一下CPU是什麼?CPU又稱爲處理器,由運算器、控制器、寄存器、輸入設備和輸出設備組成,這些器件由處理數據總線相連。

它們在處理器中,分工明確:

運算器:進行數據的處理。

寄存器:進行數據的存儲。

控制器:控制各種器件工作。

輸入設備:將人們熟悉的信息形式轉化爲機器能識別的信息形式,如鍵盤、鼠標等。

輸出設備:將計算機運算的結果轉化爲人們熟悉的信息形式,如顯示器、打印機等。

處理數據總線:連接各種器件,使各個器件進行數據的傳送。

接下就簡單介紹寄存器在處理器中是怎麼工作的?

 

圖2-2-1

通過圖2-2-1我們來簡單瞭解,處理器的底部和四周有大量的引腳,可以接受外界發來傳送的電信號。每個引腳都有自己的用處。有些引腳用來將參與運算的數字輸送到處理器內部,有些引腳可以重複使用的。

假如要進行加法運算,這些引腳將依次把加數和被加數送入處理器,處理器一旦接受信號,將會以二進制數組成的電信號反應在引腳相連的內部線路上,是一組高低電平的組合,代表着二進制數的每一位,此時必須用寄存器(Register)(是雙向器件)的暫時存儲,之所以這樣做,是因爲相同的引腳和線路馬上要輸入被加數,重複之 圖2-2-1

前的工作,也正因爲這個原因,這些內部線路稱爲處理數據總線。它們之間通過控制器(圖中沒有畫)發出指令,控制各個器件在某個正確的時間做某個動作。

圖2-2-1寄存器(Register A)和寄存器(Register B)將分別參與運算,假設寄存器(Register A)暫時存儲的是加數,寄存器(Register B)暫時存儲的是被加數。此時寄存器(Register A)和寄存器(Register B)都暫時存儲了數據,將不再受外部數據的影響。運算邏輯部件輸出結果,結果被輸送到寄存器(Register C),通過數據總線輸送到處理器外面,或再次送入到寄存器(Register A)和寄存器(Register B)參與運算。

【處理器中有多少寄存器】

不同的處理器,寄存器的個數、結構是不同的。【簡單介紹寄存器,詳細內容請參考Intel白皮書】

16位處理器有14個寄存器,每個寄存器有各自的名字。

14個寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

32位處理器有16個寄存器,每個寄存器有各自的名字。

16個寄存器:EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP、ES、CS、SS、DS、FS、GS、EIP、EFLAGS。

64位處理器有16個寄存器,每個寄存器有各自的名字。

16個寄存器:RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、CS、DS、ES、SS、FS、GS、RIP、RFLAGS。

部分原文:https://baijiahao.baidu.com/s?id=1609205781742300284&wfr=spider&for=pc

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