必威电竞|足球世界杯竞猜平台

寄存器
來(lái)源:互聯(lián)網(wǎng)

寄存器的功能是存儲(chǔ)二進(jìn)制代碼,它是由具有存儲(chǔ)功能的觸發(fā)器組合起來(lái)構(gòu)成的。一個(gè)觸發(fā)器可以存儲(chǔ)1位二進(jìn)制代碼,故存放n位二進(jìn)制代碼的寄存器,需用n個(gè)觸發(fā)器來(lái)構(gòu)成。?

按照功能的不同,可將寄存器分為基本寄存器和移位寄存器兩大類(lèi)。基本寄存器只能并行送入數(shù)據(jù),也只能并行輸出。移位寄存器中的數(shù)據(jù)可以在移位脈沖作用下依次逐位右移或左移,數(shù)據(jù)既可以并行輸入、并行輸出,也可以串行輸入、串行輸出,還可以并行輸入、串行輸出,或串行輸入、并行輸出,十分靈活,用途也很廣。

基本含義

寄存器,是集成電路中非常重要的一種存儲(chǔ)單元,通常由觸發(fā)器組成。在集成電路設(shè)計(jì)中,寄存器可分為電路內(nèi)部使用的寄存器和充當(dāng)內(nèi)外部接口的寄存器這兩類(lèi)。內(nèi)部寄存器不能被外部電路或軟件訪問(wèn),只是為內(nèi)部電路的實(shí)現(xiàn)存儲(chǔ)功能或滿足電路的時(shí)序要求。而接口寄存器可以同時(shí)被內(nèi)部電路和外部電路或軟件訪問(wèn),CPU中的寄存器就是其中一種,作為軟硬件的接口,為廣泛的通用編程用戶所熟知。

計(jì)算機(jī)領(lǐng)域,寄存器是CPU內(nèi)部的元件,包括通用寄存器、專用寄存器和控制寄存器。寄存器擁有非常高的讀寫(xiě)速度,所以在寄存器之間的數(shù)據(jù)傳送非常快。

寄存器是內(nèi)存階層中的最頂端,也是系統(tǒng)獲得操作資料的最快速途徑。寄存器通常都是以他們可以保存的位元數(shù)量來(lái)估量,

舉例來(lái)說(shuō),一個(gè)“8位元寄存器”或“32位元寄存器”。寄存器都以寄存器檔案的方式來(lái)實(shí)作,但是他們也可能使用單獨(dú)的正反器、高速的核心內(nèi)存、薄膜內(nèi)存以及在數(shù)種機(jī)器上的其他方式來(lái)實(shí)作出來(lái)。

寄存器通常都用來(lái)意指由一個(gè)指令之輸出或輸入可以直接索引到的暫存器群組。更適當(dāng)?shù)氖欠Q他們?yōu)椤凹軜?gòu)寄存器”。

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

基本概念

寄存器最起碼具備以下4種功能。

①清除數(shù)碼:將寄存器里的原有數(shù)碼清除。?

②接收數(shù)碼:在接收脈沖作用下,將外輸入數(shù)碼存入寄存器中。?

③存儲(chǔ)數(shù)碼:在沒(méi)有新的寫(xiě)入脈沖來(lái)之前,寄存器能保存原有數(shù)碼不變。?

④輸出數(shù)碼:在輸出脈沖作用下,才通過(guò)電路輸出數(shù)碼。?

具有以上功能的寄存器稱為數(shù)碼寄存器;有的寄存器還具有移位功能,稱為移位寄存器。?

寄存器有串行和并行兩種數(shù)碼存取方式。將n位二進(jìn)制數(shù)一次存入寄存器或從寄存器中讀出的方式稱為并行方式。將n位二進(jìn)制數(shù)以每次1位,分成n次存入寄存器并從寄存器讀出,這種方式稱為串行方式。并行方式只需一個(gè)時(shí)鐘脈沖就可以完成數(shù)據(jù)操作,工作速度快,但需要n根輸入和輸出數(shù)據(jù)線。串行方式要使用幾個(gè)時(shí)鐘脈沖完成輸入或輸出操作,工作速度慢,但只需要一根輸入或輸出數(shù)據(jù)線,傳輸線少,適用于遠(yuǎn)距離傳輸。

結(jié)構(gòu)

數(shù)字電路中,用來(lái)存放二進(jìn)制數(shù)據(jù)或代碼的電路稱為寄存器。寄存器是由具有存儲(chǔ)功能的觸發(fā)器組合起來(lái)構(gòu)成的。一個(gè)觸發(fā)器可以存儲(chǔ)1位二進(jìn)制代碼,存放門(mén)位二進(jìn)制代碼的寄存器需用逐個(gè)觸發(fā)器來(lái)構(gòu)成。?

對(duì)寄存器中的觸發(fā)器只要求它們具有置1,置0的功能即可,因而無(wú)論是用電平觸發(fā)的觸發(fā)器,還是用脈沖觸發(fā)或邊沿觸發(fā)的觸發(fā)器,都可以組成寄存器。?

由電平觸發(fā)的動(dòng)作特點(diǎn)可知,在CLK高電平期間,Q端的狀態(tài)跟隨D端狀態(tài)的改變而改變;CLK變成低電平以后,Q端將保持CLK變?yōu)榈碗娖綍r(shí)刻D端的狀態(tài)。?

74HC175則是用CMOS邊沿觸發(fā)器組成的4位寄存器,根據(jù)邊沿觸發(fā)的動(dòng)作特點(diǎn)可知,觸發(fā)器輸出端的狀態(tài)僅僅取決于CLK上升沿到達(dá)時(shí)刻D端的狀態(tài)。可見(jiàn),雖然74LS75和74HC175都是4位寄存器,但由于采用了不同結(jié)構(gòu)類(lèi)型的觸發(fā)器,所以動(dòng)作特點(diǎn)是不同的。?

為了增加使用的靈活性,在有些寄存器電路中還附加了一些控制電路,使寄存器又增添了異步置零、輸出三態(tài)控制和保持等功能。這里所說(shuō)的保持,是指CLK信號(hào)到達(dá)時(shí)觸發(fā)器不隨D端的輸入信號(hào)而改變狀態(tài),保持原來(lái)的狀態(tài)不變。?

上面介紹的兩個(gè)寄存器電路中,接收數(shù)據(jù)時(shí)所有各位代碼都是同時(shí)輸入的,而且觸發(fā)器中的數(shù)據(jù)是并行地出現(xiàn)在輸出端的,因此將這種輸入、輸出方式稱為并行輸入、并行輸出方式。

類(lèi)型

1.通用寄存器組

通用寄存器組包括AX、BX、CX、DX4個(gè)16位寄存器,用以存放16位數(shù)據(jù)或地址。也可用作8位寄存器。用作8位寄存器時(shí)分別記為AH、AL、BH、BL、CH、CL、DH、DL。只能存放8位數(shù)據(jù),不能存放地址。它們分別是AX、BX、CX、DX的高八位和低八位。若AX=1234H,則AH=12H,AL=34H。通用寄存器通用性強(qiáng),對(duì)任何指令,它們具有相同的功能。為了縮短指令代碼的長(zhǎng)度,在8086中,某些通用寄存器用作專門(mén)用途。例如,串指令中必須用CX寄存器作為計(jì)數(shù)寄存器,存放串的長(zhǎng)度,這樣在串操作指令中不必給定CX的寄存器號(hào),縮短了串操作指令代碼的長(zhǎng)度。下面一一介紹:

AX(AH、AL):累加器。有些指令約定以AX(或AL)為源或目的寄存器。輸入/輸出指令必須通過(guò)AX或AL實(shí)現(xiàn),例如:端口地址為43H的內(nèi)容輸入CPU的指令為INAL,43H或INAX,43H。目的操作數(shù)只能是AL/AX,而不能是其他的寄存器。?

BX(BH、BL):基址寄存器。BX可用作間接尋址的地址寄存器和基地址寄存器,BH、BL可用作8位通用內(nèi)存資料寄存器。?

CX(CH、CL):計(jì)數(shù)寄存器。CX在循環(huán)和串操作中充當(dāng)計(jì)數(shù)器,指令執(zhí)行后CX內(nèi)容自動(dòng)修改,因此稱為計(jì)數(shù)寄存器。?

DX(DH、DL):數(shù)據(jù)寄存器。除用作通用寄存器外,在I/O指令中可用作端口地址寄存器,乘除指令中用作輔助累加器。?

2.指針和變址寄存器

BP( Base Pointer regilter):基址指針寄存器。?

SP( Stack Pointer Register):堆棧指針寄存器。?

SI( Source Index register):源變址寄存器。?

DI( Destination Index Register):目的變址寄存器。?

這組寄存器存放的內(nèi)容是某一段內(nèi)地址偏移量,用來(lái)形成操作數(shù)地址,主要在堆棧操作和變址運(yùn)算中使用。BP和SP寄存器稱為指針寄存器,與SS聯(lián)用,為訪問(wèn)現(xiàn)行堆棧段提供方便。通常BP寄存器在間接尋址中使用,操作數(shù)在堆棧段中,由SS段寄存器與BP組合形成操作數(shù)地址即BP中存放現(xiàn)行堆棧段中一個(gè)數(shù)據(jù)區(qū)的“基址”的偏移量,所以稱BP寄存器為基址指針。?

SP寄存器在堆棧操作中使用,PUSH和POP指令是從SP寄存器得到現(xiàn)行堆棧段的段內(nèi)地址偏移量,所以稱SP寄存器為堆棧指針,SP始終指向棧頂。?

寄存器SI和DI稱為變址寄存器,通常與DS一起使用,為訪問(wèn)現(xiàn)行數(shù)據(jù)段提供段內(nèi)地址偏移量。在串指令中,其中源操作數(shù)的偏移量存放在SⅠ中,目的操作數(shù)的偏移量存放在DI中,SI和DI的作用不能互換,否則傳送地址相反。在串指令中,SI、DI均為隱含尋址,此時(shí),SI和DS聯(lián)用,Dl和ES聯(lián)用。?

3.段寄存器

8086/8088CPU可直接尋址1MB的存儲(chǔ)器空間,直接尋址需要20位地址碼,而所有內(nèi)部寄存器都是16位的,只能直接尋址6KB,因此采用分段技術(shù)來(lái)解決。將1MB的存儲(chǔ)空間分成若干邏輯段,每段最長(zhǎng)64KB,這些邏輯段在整個(gè)存儲(chǔ)空間中可浮動(dòng)。?

8086/8088CPU內(nèi)部設(shè)置了4個(gè)16位段寄存器,它們分別是代碼段寄存器CS、數(shù)據(jù)段寄存器DS、堆棧段寄存器SS、附加段寄存器ES、由它們給出相應(yīng)邏輯段的首地址,稱為“段基址”。段基址與段內(nèi)偏移地址組合形成20位物理地址,段內(nèi)偏移地址可以存放在寄存器中,也可以存放在存儲(chǔ)器中。?

例如:代碼段寄存器CS存放當(dāng)前代碼段基地址,IP指令指針寄存器存放了下一條要執(zhí)行指令的段內(nèi)偏移地址,其中CS=2000H,IP=001AH。通過(guò)組合,形成20位存儲(chǔ)單元的尋址地址為2001AH。?

代碼段內(nèi)存放可執(zhí)行的指令代碼,數(shù)據(jù)段和附加段內(nèi)存放操作的數(shù)據(jù),通常操作數(shù)在現(xiàn)行數(shù)據(jù)段中,而在串指令中,目的操作數(shù)指明必須在現(xiàn)行附加段中。堆棧段開(kāi)辟為程序執(zhí)行中所要用的堆棧區(qū),采用先進(jìn)后出的方式訪問(wèn)它。各個(gè)段寄存器指明了一個(gè)規(guī)定的現(xiàn)行段,各段寄存器不可互換使用。程序較小時(shí),代碼段、數(shù)據(jù)段、堆棧段可放在一個(gè)段內(nèi),即包含在64KB之內(nèi),而當(dāng)程序或數(shù)據(jù)量較大時(shí),超過(guò)了64KB,那么可以定義多個(gè)代碼段或數(shù)據(jù)段、堆棧段、附加段。現(xiàn)行段由段寄存器指明段地址,使用中可以修改段寄存器內(nèi)容,指向其他段。有時(shí)為了明確起見(jiàn),可在指令前加上段超越的前綴,以指定操作數(shù)所在段。?

4.指令指針寄存器IP

8086/8088CPU中設(shè)置了一個(gè)16位指令指針寄存器IP,用來(lái)存放將要執(zhí)行的下一條指令在現(xiàn)行代碼段中的偏移地址。程序運(yùn)行中,它由BIU自動(dòng)修改,使IP始終指向下一條將要執(zhí)行的指令的地址,因此它是用來(lái)控制指令序列的執(zhí)行流程的,是一個(gè)重要的寄存器。8086程序不能直接訪問(wèn)IP,但可以通過(guò)某些指令修改IP的內(nèi)容。例如,當(dāng)遇到中斷指令或調(diào)用子程序指令時(shí),8086自動(dòng)調(diào)整IP的內(nèi)容,將IP中下一條將要執(zhí)行的指令地址偏移量入棧保護(hù),待中斷程序執(zhí)行完畢或子程序返回時(shí),可將保護(hù)的內(nèi)容從堆棧中彈出到IP,使主程序繼續(xù)運(yùn)行。在跳轉(zhuǎn)指令時(shí),則將新的跳轉(zhuǎn)目標(biāo)地址送入IP,改變它的內(nèi)容,實(shí)現(xiàn)了程序的轉(zhuǎn)移。?

5.標(biāo)志寄存器FR

標(biāo)志寄存器FR也稱程序狀態(tài)字寄存器。?

FR是16位寄存器,其中有9位有效位用來(lái)存放狀態(tài)標(biāo)志和控制標(biāo)志。狀態(tài)標(biāo)志共6位,CF、PF、AF、ZF、SF和OF,用于寄存程序運(yùn)行的狀態(tài)信息,這些標(biāo)志往往用作后續(xù)指令判斷的依據(jù)。控制標(biāo)志有3位,IF、DF和TF,用于控制CPU的操作,是人為設(shè)置的。

工作原理

計(jì)算機(jī)及其他計(jì)算系統(tǒng)中,寄存器是一種非常重要的、必不可少的數(shù)字電路課件,它通常由觸發(fā)器(D觸發(fā)器)組成,主要作用是用來(lái)暫時(shí)存放數(shù)碼或指令。一個(gè)觸發(fā)器可以存放一位二進(jìn)制代碼,若要存放N位二進(jìn)制數(shù)碼,則需用N個(gè)觸發(fā)器。?

寄存器應(yīng)具有接收數(shù)據(jù)、存放數(shù)據(jù)和輸出數(shù)據(jù)的功能,它由觸發(fā)器和門(mén)電路組成。只有得到“存入脈沖”(又稱“存入指令”、“寫(xiě)入指令”)時(shí),寄存器才能接收數(shù)據(jù);在得到“讀出”指令時(shí),寄存器才將數(shù)據(jù)輸出。?

寄存器存放數(shù)碼的方式有并行和串行兩種。并行方式是數(shù)碼從各對(duì)應(yīng)位輸入端同時(shí)輸入到寄存器中;串行方式是數(shù)碼從一個(gè)輸入端逐位輸入到寄存器中。?

寄存器讀出數(shù)碼的方式也有并行和串行兩種。在并行方式中,被讀出的數(shù)碼同時(shí)出現(xiàn)在各位的輸出端上;在串行方式中,被讀出的數(shù)碼在一個(gè)輸出端逐位出現(xiàn)。?

存放代碼條件

(1)代碼要存得進(jìn);

(2)代碼要記得住;

(3)代碼要取得出。?

寄存器是由具有存儲(chǔ)功能的觸發(fā)器組合起來(lái)構(gòu)成的。一個(gè)觸發(fā)器可以存儲(chǔ)1位2進(jìn)制代碼,存放n位2進(jìn)制代碼的寄存器,需用n個(gè)觸發(fā)器來(lái)構(gòu)成。對(duì)寄存器中的觸發(fā)器只要求它具有置1、置0的功能即可,因而無(wú)論用何種類(lèi)型的觸發(fā)器都可組成寄存器。?

按照功能的不同,寄存器可分為基本寄存器和移位寄存器兩大類(lèi)。基本寄存器只能并行送入數(shù)據(jù),需要時(shí)也只能并行輸出。

組織

ARM微處理器共有37個(gè)32位寄存器,其中31個(gè)為通用寄存器,6個(gè)為狀態(tài)寄存器。但是這些寄存器不能被同時(shí)訪問(wèn),具體哪些寄存器是可編程訪問(wèn)的,取決于微處理器的工作狀態(tài)及具體的運(yùn)行模式。但在任何時(shí)候,通用寄存器R14~R0、程序計(jì)數(shù)器PC、一個(gè)或兩個(gè)狀態(tài)寄存器都是可訪問(wèn)的。?

ARM9處理器共有37個(gè)32位長(zhǎng)的寄存器,這些寄存器包括:

(1) RO~R12:均為32位通用寄存器,用于數(shù)據(jù)操作。但是注意:絕大多數(shù)16位Thumb指令只能訪問(wèn)R0~R7,而32位Thumb -2指令可以訪問(wèn)所有寄存器。?

(2)堆棧指針:堆棧指針的最低兩位永遠(yuǎn)是O,這意味著堆棧總是4字節(jié)對(duì)齊的。?

(3)鏈接寄存器:當(dāng)呼叫一個(gè)子程序時(shí),由R14存儲(chǔ)返回地址。?

(4)程序計(jì)數(shù)器:指向當(dāng)前的程序地址,如果修改它的值,就能改變程序的執(zhí)行流。?

(5)6個(gè)狀態(tài)寄存器(1個(gè)CPSR、5個(gè)SPSR),用以標(biāo)識(shí)CPU的工作狀態(tài)及程序的運(yùn)行狀態(tài),均為32位,目前只使用了其中的一部分。?

Cortex-A8處理器有40個(gè)32位長(zhǎng)的寄存器,多了監(jiān)控模式下的寄存器,如RO~R12、R15、CPSR通用,R13_ mon、R14_mon、SPSR_mon三個(gè)專用寄存器。?

尋址

寄存器尋址就是利用寄存器中的數(shù)值作為操作數(shù),這種尋址方式是各類(lèi)微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。?

寄存器尋址是指操作數(shù)存放在CPU內(nèi)部的寄存器中,指令中給出操作數(shù)所在的寄存器名。寄存器操作數(shù)可以是8位寄存器AH、AL、BH、BL、CH、CL、DH、DL,也可以是16位寄存器AX、BX、CX、DX、SP、BP、SI、DI等。因?yàn)榧拇嫫鲗ぶ凡恍枰ㄟ^(guò)總線操作訪問(wèn)存儲(chǔ)器,所以指令執(zhí)行速度比較快。?

寄存器尋址( Register Addressing)是以通用寄存器的內(nèi)容作為操作數(shù)的尋址方式,在該尋址方式下,操作數(shù)存放在寄存器中。寄存器尋址方式的尋址對(duì)象為:A,B,DPTR,RO~R7。其中,B僅在乘除法指令中為寄存器尋址,在其他指令中為直接尋址。A可以按寄存器尋址又可以直接尋址,直接尋址時(shí)寫(xiě)成ACC。

參考資料 >

生活家百科家居網(wǎng)