複製鏈接
請複製以下鏈接發送給好友

寄存器

鎖定
寄存器的功能是存儲二進制代碼,它是由具有存儲功能的觸發器組合起來構成的。一個觸發器可以存儲1位二進制代碼,故存放n位二進制代碼的寄存器,需用n個觸發器來構成。 [1] 
按照功能的不同,可將寄存器分為基本寄存器和移位寄存器兩大類。基本寄存器只能並行送入數據,也只能並行輸出。移位寄存器中的數據可以在移位脈衝作用下依次逐位右移或左移,數據既可以並行輸入、並行輸出,也可以串行輸入、串行輸出,還可以並行輸入、串行輸出,或串行輸入、並行輸出,十分靈活,用途也很廣。 [1] 
中文名
寄存器
外文名
Register
定    義
有限存貯容量的高速存貯部件
分    類
指令寄存器(IR) 程序計數器(PC)
屬    性
信息科學
相    關
中央處理器

寄存器基本含義

寄存器是CPU內部用來存放數據的一些小型存儲區域,用來暫時存放參與運算的數據和運算結果。其實寄存器就是一種常用的時序邏輯電路,但這種時序邏輯電路只包含存儲電路。寄存器的存儲電路是由鎖存器或觸發器構成的,因為一個鎖存器或觸發器能存儲1位二進制數,所以由N個鎖存器或觸發器可以構成N位寄存器。寄存器是中央處理器內的組成部分。寄存器是有限存儲容量的高速存儲部件,它們可用來暫存指令、數據和位址。 [2] 
在計算機領域,寄存器是CPU內部的元件,包括通用寄存器、專用寄存器和控制寄存器。寄存器擁有非常高的讀寫速度,所以在寄存器之間的數據傳送非常快。 [2] 
Cortex-M4總共有18個寄存器,相比傳統ARM(如ARM7/ARM9/Cortex-A系列)的38個寄存器已減少很多,減少了內核核心面積(Die-size)。 [2] 
寄存器 寄存器
對於編譯器非常友好易用,例如:包含靈活的寄存器配置,任意寄存器之間可實現單週期乘法,任意寄存器可以作為數據、結構或數組的指針。此外,Cortex-M4還包含4個特殊功能寄存器PRIMASK、FAUI。TMASK、BASEPRI和CONTROL。 [2] 

寄存器基本概念

寄存器最起碼具備以下4種功能。
①清除數碼:將寄存器裏的原有數碼清除。 [3] 
②接收數碼:在接收脈衝作用下,將外輸入數碼存入寄存器中。 [3] 
③存儲數碼:在沒有新的寫入脈衝來之前,寄存器能保存原有數碼不變。 [3] 
④輸出數碼:在輸出脈衝作用下,才通過電路輸出數碼。 [3] 
僅具有以上功能的寄存器稱為數碼寄存器;有的寄存器還具有移位功能,稱為移位寄存器 [3] 
PORT1的控制寄存器
PORT1的控制寄存器(2張)
寄存器有串行和並行兩種數碼存取方式。將n位二進制數一次存入寄存器或從寄存器中讀出的方式稱為並行方式。將n位二進制數以每次1位,分成n次存入寄存器並從寄存器讀出,這種方式稱為串行方式。並行方式只需一個時鐘脈衝就可以完成數據操作,工作速度快,但需要n根輸入和輸出數據線。串行方式要使用幾個時鐘脈衝完成輸入或輸出操作,工作速度慢,但只需要一根輸入或輸出數據線,傳輸線少,適用於遠距離傳輸 [3] 

寄存器結構

數字電路中,用來存放二進制數據或代碼的電路稱為寄存器。寄存器是由具有存儲功能的觸發器組合起來構成的。一個觸發器可以存儲1位二進制代碼,存放門位二進制代碼的寄存器需用逐個觸發器來構成。 [4] 
對寄存器中的觸發器只要求它們具有置1,置0的功能即可,因而無論是用電平觸發的鎖存器(latch-up),還是用脈衝觸發或邊沿觸發的觸發器(flip-flop),都可以組成寄存器。 [4] 
由電平觸發的動作特點可知,在CLK高電平期間,Q端的狀態跟隨D端狀態的改變而改變;CLK變成低電平以後,Q端將保持CLK變為低電平時刻D端的狀態。 [4] 
74HC175則是用CMOS邊沿觸發器組成的4位寄存器,根據邊沿觸發的動作特點可知,觸發器輸出端的狀態僅僅取決於CLK上升沿到達時刻D端的狀態。可見,雖然74LS75和74HC175都是4位寄存器,但由於採用了不同結構類型的觸發器,所以動作特點是不同的。 [4] 
為了增加使用的靈活性,在有些寄存器電路中還附加了一些控制電路,使寄存器又增添了異步置零、輸出三態控制和保持等功能。這裏所説的保持,是指CLK信號到達時觸發器不隨D端的輸入信號而改變狀態,保持原來的狀態不變。 [4] 
上面介紹的兩個寄存器電路中,接收數據時所有各位代碼都是同時輸入的,而且觸發器中的數據是並行地出現在輸出端的,因此將這種輸入、輸出方式稱為並行輸入、並行輸出方式。 [4] 

寄存器工作原理

在計算機及其他計算系統中,寄存器是一種非常重要的、必不可少的數字電路構件,它通常由觸發器(D觸發器)組成,主要作用是用來暫時存放數碼或指令。一個觸發器可以存放一位二進制代碼,若要存放N位二進制數碼,則需用N個觸發器。 [6] 
寄存器應具有接收數據、存放數據和輸出數據的功能,它由觸發器和門電路組成。只有得到“存入脈衝”(又稱“存入指令”、“寫入指令”)時,寄存器才能接收數據;在得到“讀出”指令時,寄存器才將數據輸出 [6] 
寄存器存放數碼的方式有並行和串行兩種。並行方式是數碼從各對應位輸入端同時輸入到寄存器中;串行方式是數碼從一個輸入端逐位輸入到寄存器中。 [6] 
寄存器讀出數碼的方式也有並行和串行兩種。在並行方式中,被讀出的數碼同時出現在各位的輸出端上;在串行方式中,被讀出的數碼在一個輸出端逐位出現。 [6] 

寄存器類型

通用寄存器組包括AX、BX、CX、DX4個16位寄存器,用以存放16位數據或地址。也可用作8位寄存器。用作8位寄存器時分別記為AH、AL、BH、BL、CH、CL、DH、DL。只能存放8位數據,不能存放地址。它們分別是AX、BX、CX、DX的高八位和低八位。若AX=1234H,則AH=12H,AL=34H。通用寄存器通用性強,對任何指令,它們具有相同的功能。為了縮短指令代碼的長度,在8086中,某些通用寄存器用作專門用途。例如,串指令中必須用CX寄存器作為計數寄存器,存放串的長度,這樣在串操作指令中不必給定CX的寄存器號,縮短了串操作指令代碼的長度。下面一一介紹:
AX(AH、AL):累加器。有些指令約定以AX(或AL)為源或目的寄存器。輸入/輸出指令必須通過AX或AL實現,例如:端口地址為43H的內容讀入CPU的指令為INAL,43H或INAX,43H。目的操作數只能是AL/AX,而不能是其他的寄存器。 [5] 
BX(BH、BL):基址寄存器。BX可用作間接尋址地址寄存器基地址寄存器,BH、BL可用作8位通用數據寄存器 [5] 
CX(CH、CL):計數寄存器。CX在循環和串操作中充當計數器,指令執行後CX內容自動修改,因此稱為計數寄存器。 [5] 
DX(DH、DL):數據寄存器。除用作通用寄存器外,在I/O指令中可用作端口地址寄存器,乘除指令中用作輔助累加器。 [5] 
2.指針和變址寄存器
BP( Base Pointer Register):基址指針寄存器。 [5] 
SP( Stack Pointer Register):堆棧指針寄存器 [5] 
SI( Source Index Register):源變址寄存器。 [5] 
DI( Destination Index Register):目的變址寄存器。 [5] 
這組寄存器存放的內容是某一段內地址偏移量,用來形成操作數地址,主要在堆棧操作和變址運算中使用。BP和SP寄存器稱為指針寄存器,與SS聯用,為訪問現行堆棧段提供方便。通常BP寄存器在間接尋址中使用,操作數在堆棧段中,由SS段寄存器與BP組合形成操作數地址即BP中存放現行堆棧段中一個數據區的“基址”的偏移量,所以稱BP寄存器為基址指針。 [5] 
SP寄存器在堆棧操作中使用,PUSH和POP指令是從SP寄存器得到現行堆棧段的段內地址偏移量,所以稱SP寄存器為堆棧指針,SP始終指向棧頂 [5] 
寄存器SI和DI稱為變址寄存器,通常與DS一起使用,為訪問現行數據段提供段內地址偏移量。在串指令中,其中源操作數的偏移量存放在SⅠ中,目的操作數的偏移量存放在DI中,SI和DI的作用不能互換,否則傳送地址相反。在串指令中,SI、DI均為隱含尋址,此時,SI和DS聯用,Dl和ES聯用。 [5] 
3.段寄存器
8086/8088CPU可直接尋址1MB的存儲器空間,直接尋址需要20位地址碼,而所有內部寄存器都是16位的,只能直接尋址6KB,因此採用分段技術來解決。將1MB的存儲空間分成若干邏輯段,每段最長64KB,這些邏輯段在整個存儲空間中可浮動。 [5] 
8086/8088CPU內部設置了4個16位段寄存器,它們分別是代碼段寄存器CS、數據段寄存器DS、堆棧段寄存器SS、附加段寄存器ES、由它們給出相應邏輯段的首地址,稱為“段基址”。段基址與段內偏移地址組合形成20位物理地址,段內偏移地址可以存放在寄存器中,也可以存放在存儲器中。 [5] 
例如:代碼段寄存器CS存放當前代碼段基地址,IP指令指針寄存器存放了下一條要執行指令的段內偏移地址,其中CS=2000H,IP=001AH。通過組合,形成20位存儲單元的尋址地址為2001AH。 [5] 
代碼段內存放可執行的指令代碼,數據段和附加段內存放操作的數據,通常操作數在現行數據段中,而在串指令中,目的操作數指明必須在現行附加段中。堆棧段開闢為程序執行中所要用的堆棧區,採用先進後出的方式訪問它。各個段寄存器指明瞭一個規定的現行段,各段寄存器不可互換使用。程序較小時,代碼段、數據段、堆棧段可放在一個段內,即包含在64KB之內,而當程序或數據量較大時,超過了64KB,那麼可以定義多個代碼段或數據段、堆棧段、附加段。現行段由段寄存器指明段地址,使用中可以修改段寄存器內容,指向其他段。有時為了明確起見,可在指令前加上段超越的前綴,以指定操作數所在段。 [5] 
8086/8088CPU中設置了一個16位指令指針寄存器IP,用來存放將要執行的下一條指令在現行代碼段中的偏移地址。程序運行中,它由BIU自動修改,使IP始終指向下一條將要執行的指令的地址,因此它是用來控制指令序列的執行流程的,是一個重要的寄存器。8086程序不能直接訪問IP,但可以通過某些指令修改IP的內容。例如,當遇到中斷指令或調用子程序指令時,8086自動調整IP的內容,將IP中下一條將要執行的指令地址偏移量入棧保護,待中斷程序執行完畢或子程序返回時,可將保護的內容從堆棧中彈出到IP,使主程序繼續運行。在跳轉指令時,則將新的跳轉目標地址送入IP,改變它的內容,實現了程序的轉移。 [5] 
標誌寄存器FR也稱程序狀態字寄存器 [5] 
寄存器
寄存器(2張)
FR是16位寄存器,其中有9位有效位用來存放狀態標誌和控制標誌。狀態標誌共6位,CF、PF、AF、ZF、SF和OF,用於寄存程序運行的狀態信息,這些標誌往往用作後續指令判斷的依據。控制標誌有3位,IF、DF和TF,用於控制CPU的操作,是人為設置的。 [5] 

寄存器存放代碼滿足條件

(1)代碼要存得進;
(2)代碼要記得住;
(3)代碼要取得出。 [7] 
寄存器是由具有存儲功能的觸發器組合起來構成的。一個觸發器可以存儲1位2進制代碼,存放n位2進制代碼的寄存器,需用n個觸發器來構成。對寄存器中的觸發器只要求它具有置1、置0的功能即可,因而無論用何種類型的觸發器都可組成寄存器。 [7] 
按照功能的不同,寄存器可分為基本寄存器和移位寄存器兩大類。基本寄存器只能並行送入數據,需要時也只能並行輸出。移位寄存器中的數據可以在移位脈衝作用下依次逐位右移或左移,數據既可以並行輸入、並行輸出,也可以串行輸入、串行輸出,還可以並行輸入、串行輸出或串行輸入、並行輸出,十分靈活,用途也很廣。 [7] 

寄存器寄存器組織

ARM微處理器共有37個32位寄存器,其中31個為通用寄存器,6個為狀態寄存器。但是這些寄存器不能被同時訪問,具體哪些寄存器是可編程訪問的,取決於微處理器工作狀態及具體的運行模式。但在任何時候,通用寄存器R14~R0、程序計數器PC、一個或兩個狀態寄存器都是可訪問的。 [8] 
ARM9處理器共有37個32位長的寄存器,這些寄存器包括:
(1) RO~R12:均為32位通用寄存器,用於數據操作。但是注意:絕大多數16位Thumb指令只能訪問R0~R7,而32位Thumb -2指令可以訪問所有寄存器。 [9] 
(2)堆棧指針:堆棧指針的最低兩位永遠是O,這意味着堆棧總是4字節對齊的。 [9] 
(3)鏈接寄存器:當呼叫一個子程序時,由R14存儲返回地址 [9] 
(4)程序計數器:指向當前的程序地址,如果修改它的值,就能改變程序的執行流。 [9] 
(5)6個狀態寄存器(1個CPSR、5個SPSR),用以標識CPU的工作狀態及程序的運行狀態,均為32位,目前只使用了其中的一部分。 [9] 
Cortex-A8處理器有40個32位長的寄存器,多了監控模式下的寄存器,如RO~R12、R15、CPSR通用,R13_ mon、R14_mon、SPSR_mon三個專用寄存器。 [9] 

寄存器寄存器尋址

寄存器尋址就是利用寄存器中的數值作為操作數,這種尋址方式是各類微處理器經常採用的一種方式,也是一種執行效率較高的尋址方式。 [10] 
寄存器尋址是指操作數存放在CPU內部的寄存器中,指令中給出操作數所在的寄存器名。寄存器操作數可以是8位寄存器AH、AL、BH、BL、CH、CL、DH、DL,也可以是16位寄存器AX、BX、CX、DX、SP、BP、SI、DI等。因為寄存器尋址不需要通過總線操作訪問存儲器,所以指令執行速度比較快。 [11] 
寄存器尋址( Register Addressing)是以通用寄存器的內容作為操作數的尋址方式,在該尋址方式下,操作數存放在寄存器中。寄存器尋址方式的尋址對象為:A,B,DPTR,R0~R7。其中,B僅在乘除法指令中為寄存器尋址,在其他指令中為直接尋址。A可以按寄存器尋址又可以直接尋址,直接尋址時寫成ACC。 [12] 
參考資料
  • 1.    陳慧琴,王治平主編;劉健,張麗豔副主編,電子技術及應用,西南交通大學出版社,2016.08,第227頁
  • 2.    温子祺,冼安勝,林秩謙,楊偉展編著,ARM CORTEX-M4微控制器原理與實踐,北京航空航天大學出版社,2016.02,第24頁
  • 3.    陶雪華,李仁華主編;俞明光,翟秀麗副主編,電子技術基礎教程,北京理工大學出版社,2016.01,第175頁
  • 4.    朱淸慧,李定珍主編;尉喬南,張燕副主編,基於PROTEUS的數字電路分析與設計,西安電子科技大學出版社,2016.09,第213頁
  • 5.    張晶,楊峯,徐承彬主編;李逢春,秦穎,郭丹偉,崔豔羣,劉春豔副主編,微機原理與接口技術 第2版,北京郵電大學出版社,2016.07,第18-21頁
  • 6.    聶廣林,任德齊主編,電子技術基礎 第3版,重慶大學出版社,2016.01,第196頁
  • 7.    熊才高,郭松梅主編;劉輝,陳玲,劉豔麗副主編;劉江海,潘岱,張紅梅參編,數字電子技術,華中科技大學出版社,2016.08,第193頁
  • 8.    趙常松,吳顯義主編;李傳娣等副主編,ARM嵌入式系統原理與應用教程 第2版,北京航空航天大學出版社,2016.09,第19頁
  • 9.    唐永鋒主編;白秋產,季仁東,居勇峯,楊定禮參編,嵌入式系統原理及應用:基於CORTEX-A8處理器,西安電子科技大學出版社,2016.09,第108頁
  • 10.    文全剛,郝志剛主編;張榮高副主編,彙編語言程序設計:基於ARM體系結構 第3版,北京航空航天大學出版社,2016.04,第72頁
  • 11.    耿茜,沈國榮,季秀霞,遲少華編著,微機原理與接口技術,國防工業出版社,2016.07,第70頁
  • 12.    劉嵐,尹勇,撒繼銘,周嶸,方浩,潘愛民編著,單片計算機基礎及應用,武漢理工大學出版社,2016.03,第73頁
展開全部 收起