0.目錄
- 基本含義
- 基本概念
- 結(jié)構(gòu)
- 類型
4.1 通用寄存器組
4.2 指針和變址寄存器
4.3 段寄存器
4.4 指令指針寄存器IP
4.5 標志寄存器FR
4.6 移位寄存器SR - 工作原理
- 寄存器組織
- 寄存器尋址
1.基本含義
寄存器的功能是存儲二進制代碼倒信,它是由具有存儲功能的觸發(fā)器組合起來構(gòu)成的隙弛。一個觸發(fā)器可以存儲1位二進制代碼哗脖,故存放n位二進制代碼的寄存器杨帽,需用n個觸發(fā)器來構(gòu)成。
按照功能的不同嵌赠,可將寄存器分為基本寄存器和移位寄存器兩大類板甘。基本寄存器只能并行送入數(shù)據(jù)浑侥,也只能并行輸出姊舵。移位寄存器中的數(shù)據(jù)可以在移位脈沖作用下依次逐位右移或左移,數(shù)據(jù)既可以并行輸入寓落、并行輸出括丁,也可以串行輸入、串行輸出伶选,還可以并行輸入史飞、串行輸出尖昏,或串行輸入、并行輸出构资,十分靈活会宪,用途也很廣。
寄存器是CPU內(nèi)部用來存放數(shù)據(jù)的一些小型存儲區(qū)域蚯窥,用來暫時存放參與運算的數(shù)據(jù)和運算結(jié)果掸鹅。其實寄存器就是一種常用的時序邏輯電路,但這種時序邏輯電路只包含存儲電路拦赠。寄存器的存儲電路是由鎖存器或觸發(fā)器構(gòu)成的巍沙,因為一個鎖存器或觸發(fā)器能存儲1位二進制數(shù),所以由N個鎖存器或觸發(fā)器可以構(gòu)成N位寄存器荷鼠。寄存器是中央處理器內(nèi)的組成部分句携。寄存器是有限存儲容量的高速存儲部件,它們可用來暫存指令允乐、數(shù)據(jù)和位址矮嫉。
在計算機領(lǐng)域,寄存器是CPU內(nèi)部的元件牍疏,包括通用寄存器蠢笋、專用寄存器和控制寄存器。寄存器擁有非常高的讀寫速度鳞陨,所以在寄存器之間的數(shù)據(jù)傳送非匙蚰快。
Cortex-M4總共有18個寄存器厦滤,相比傳統(tǒng)ARM(如ARM7/ARM9/Cortex-A系列)的38個寄存器已減少很多援岩,減少了內(nèi)核核心面積(Die-size)。
對于編譯器非常友好易用掏导,例如:包含靈活的寄存器配置享怀,任意寄存器之間可實現(xiàn)單周期乘法,任意寄存器可以作為數(shù)據(jù)趟咆、結(jié)構(gòu)或數(shù)組的指針添瓷。此外,Cortex-M4還包含4個特殊功能寄存器PRIMASK忍啸、FAUI仰坦。TMASK、BASEPRI和CONTROL计雌。
2.基本概念
寄存器最起碼具備以下4種功能悄晃。
- 清除數(shù)碼:將寄存器里的原有數(shù)碼清除
- 接收數(shù)碼:在接收脈沖作用下,將外輸入數(shù)碼存人寄存器中
- 存儲數(shù)碼:在沒有新的寫入脈沖來之前,寄存器能保存原有數(shù)碼不變
- 輸出數(shù)碼:在輸出脈沖作用下妈橄,才通過電路輸出數(shù)碼
僅具有以上功能的寄存器稱為數(shù)碼寄存器庶近;有的寄存器還具有移位功能,稱為移位寄存器眷蚓。
寄存器有串行和并行兩種數(shù)碼存取方式鼻种。將n位二進制數(shù)一次存人寄存器或從寄存器中讀出的方式稱為并行方式。將n位二進制數(shù)以每次1位沙热,分成n次存人寄存器并從寄存器讀出叉钥,這種方式稱為串行方式。并行方式只需一個時鐘脈沖就可以完成數(shù)據(jù)操作篙贸,工作速度快投队,但需要n根輸入和輸出數(shù)據(jù)線。串行方式要使用幾個時鐘脈沖完成輸入或輸出操作爵川,工作速度慢敷鸦,但只需要一根輸入或輸出數(shù)據(jù)線,傳輸線少寝贡,適用于遠距離傳輸扒披。
3.結(jié)構(gòu)
在數(shù)字電路中,用來存放二進制數(shù)據(jù)或代碼的電路稱為寄存器圃泡。寄存器是由具有存儲功能的觸發(fā)器組合起來構(gòu)成的碟案。一個觸發(fā)器可以存儲1位二進制代碼,存放門位二進制代碼的寄存器需用竹個觸發(fā)器來構(gòu)成洞焙。
對寄存器中的觸發(fā)器只要求它們具有置1蟆淀,置0的功能即可,因而無論是用電平觸發(fā)的觸發(fā)器澡匪,還是用脈沖觸發(fā)或邊沿觸發(fā)的觸發(fā)器,都可以組成寄存器褒链。
由電平觸發(fā)的動作特點可知唁情,在CLK高電平期間,Q端的狀態(tài)跟隨D端狀態(tài)的改變而改變甫匹;CLK變成低電平以后甸鸟,Q端將保持CLK變?yōu)榈碗娖綍r刻D端的狀態(tài)。
74HC175則是用CMOS邊沿觸發(fā)器組成的4位寄存器兵迅,根據(jù)邊沿觸發(fā)的動作特點可知抢韭,觸發(fā)器輸出端的狀態(tài)僅僅取決于CLK上升沿到達時刻D端的狀態(tài)』屑可見刻恭,雖然74LS75和74HC175都是4位寄存器,但由于采用了不同結(jié)構(gòu)類型的觸發(fā)器,所以動作特點是不同的鳍贾。
為了增加使用的靈活性鞍匾,在有些寄存器電路中還附加了一些控制電路,使寄存器又增添了異步置零骑科、輸出三態(tài)控制和保持等功能橡淑。這里所說的保持,是指CLK信號到達時觸發(fā)器不隨D端的輸入信號而改變狀態(tài)咆爽,保持原來的狀態(tài)不變梁棠。
上面介紹的兩個寄存器電路中,接收數(shù)據(jù)時所有各位代碼都是同時輸入的斗埂,而且觸發(fā)器中的數(shù)據(jù)是并行地出現(xiàn)在輸出端的掰茶,因此將這種輸入、輸出方式稱為并行輸入蜜笤、并行輸出方式濒蒋。
4.類型
4.1 通用寄存器組
通用寄存器組包括AX、BX把兔、CX沪伙、DX4個16位寄存器,用以存放16位數(shù)據(jù)或地址县好。也可用作8位寄存器围橡。用作8位寄存器時分別記為AH、AL缕贡、BH翁授、BL、CH晾咪、CL收擦、DH、DL谍倦。只能存放8位數(shù)據(jù)塞赂,不能存放地址。它們分別是AX昼蛀、BX宴猾、CX、DX的高八位和低八位叼旋。若AX=1234H仇哆,則AH=12H,AL=34H夫植。通用寄存器通用性強讹剔,對任何指令,它們具有相同的功能。為了縮短指令代碼的長度辟拷,在8086中撞羽,某些通用寄存器用作專門用途。例如衫冻,串指令中必須用CX寄存器作為計數(shù)寄存器诀紊,存放串的長度,這樣在串操作指令中不必給定CX的寄存器號隅俘,縮短了串操作指令代碼的長度邻奠。下面一一介紹:
- AX(AH、AL):累加器为居。有些指令約定以AX(或AL)為源或目的寄存器碌宴。輸入/輸出指令必須通過AX或AL實現(xiàn),例如:端口地址為43H的內(nèi)容讀入CPU的指令為INAL蒙畴,43H或INAX贰镣,43H。目的操作數(shù)只能是AL/AX膳凝,而不能是其他的寄存器
- BX(BH碑隆、BL):基址寄存器。BX可用作間接尋址的地址寄存器和基地址寄存器蹬音,BH上煤、BL可用作8位通用數(shù)據(jù)寄存器
- CX(CH、CL):計數(shù)寄存器著淆。CX在循環(huán)和串操作中充當計數(shù)器劫狠,指令執(zhí)行后CX內(nèi)容自動修改,因此稱為計數(shù)寄存器
- DX(DH永部、DL):數(shù)據(jù)寄存器独泞。除用作通用寄存器外,在1/O指令中可用作端口地址寄存器扬舒,乘除指令中用作輔助累加器
4.2 指針和變址寄存器
- BP( Base Pointer regilter):基址指針寄存器
- SP( Stack Pointer Register):堆棧指針寄存器
- SI( Source Index register):源變址寄存器
- DI( Destination Index Register):目的變址寄存器
這組寄存器存放的內(nèi)容是某一段內(nèi)地址偏移量阐肤,用來形成操作數(shù)地址,主要在堆棧操作和變址運算中使用讲坎。BP和SP寄存器稱為指針寄存器,與SS聯(lián)用愧薛,為訪問現(xiàn)行堆棧段提供方便晨炕。通常BP寄存器在間接尋址中使用,操作數(shù)在堆棧段中毫炉,由SS段寄存器與BP組合形成操作數(shù)地址即BP中存放現(xiàn)行堆棧段中一個數(shù)據(jù)區(qū)的“基址”的偏移量瓮栗,所以稱BP寄存器為基址指針。
SP寄存器在堆棧操作中使用,PUSH和POP指令是從SP寄存器得到現(xiàn)行堆棧段的段內(nèi)地址偏移量费奸,所以稱SP寄存器為堆棧指針弥激,SP始終指向棧頂。
寄存器SI和DI稱為變址寄存器愿阐,通常與DS一起使用微服,為訪問現(xiàn)行數(shù)據(jù)段提供段內(nèi)地址偏移量。在串指令中缨历,其中源操作數(shù)的偏移量存放在SⅠ中以蕴,目的操作數(shù)的偏移量存放在DI中,SI和DI的作用不能互換辛孵,否則傳送地址相反丛肮。在串指令中,SI魄缚、DI均為隱含尋址宝与,此時,SI和DS聯(lián)用冶匹,D和ES聯(lián)用习劫。
4.3 段寄存器
8086/8088CPU可直接尋址1MB的存儲器空間,直接尋址需要20位地址碼徙硅,而所有內(nèi)部寄存器都是16位的榜聂,只能直接尋址6KB,因此采用分段技術(shù)來解決嗓蘑。將1MB的存儲空間分成若干邏輯段须肆,每段最長64KB,這些邏輯段在整個存儲空間中可浮動桩皿。
8086/8088CPU內(nèi)部設(shè)置了4個16位段寄存器豌汇,它們分別是代碼段寄存器CS、數(shù)據(jù)段寄存器DS泄隔、堆棧段寄存器SS拒贱、附加段寄存器ES、由它們給出相應(yīng)邏輯段的首地址佛嬉,稱為“段基址”逻澳。段基址與段內(nèi)偏移地址組合形成20位物理地址,段內(nèi)偏移地址可以存放在寄存器中暖呕,也可以存放在存儲器中斜做。
例如:代碼段寄存器CS存放當前代碼段基地址,IP指令指針寄存器存放了下一條要執(zhí)行指令的段內(nèi)偏移地址湾揽,其中CS=2000H瓤逼,IP=001AH笼吟。通過組合,形成20位存儲單元的尋址地址為2001AH霸旗。
代碼段內(nèi)存放可執(zhí)行的指令代碼贷帮,數(shù)據(jù)段和附加段內(nèi)存放操作的數(shù)據(jù),通常操作數(shù)在現(xiàn)行數(shù)據(jù)段中诱告,而在串指令中撵枢,目的操作數(shù)指明必須在現(xiàn)行附加段中。堆棧段開辟為程序執(zhí)行中所要用的堆棧區(qū)蔬啡,采用先進后出的方式訪問它诲侮。各個段寄存器指明了一個規(guī)定的現(xiàn)行段,各段寄存器不可互換使用箱蟆。程序較小時沟绪,代碼段、數(shù)據(jù)段空猜、堆棧段可放在一個段內(nèi)绽慈,即包含在64KB之內(nèi),而當程序或數(shù)據(jù)量較大時辈毯,超過了64KB坝疼,那么可以定義多個代碼段或數(shù)據(jù)段、堆棧段谆沃、附加段《坌祝現(xiàn)行段由段寄存器指明段地址,使用中可以修改段寄存器內(nèi)容唁影,指向其他段耕陷。有時為了明確起見,可在指令前加上段超越的前綴据沈,以指定操作數(shù)所在段哟沫。
4.4 指令指針寄存器IP
8086/8088CPU中設(shè)置了一個16位指令指針寄存器IP,用來存放將要執(zhí)行的下一條指令在現(xiàn)行代碼段中的偏移地址锌介。程序運行中嗜诀,它由BIU自動修改,使IP始終指向下一條將要執(zhí)行的指令的地址孔祸,因此它是用來控制指令序列的執(zhí)行流程的隆敢,是一個重要的寄存器。8086程序不能直接訪問IP崔慧,但可以通過某些指令修改IP的內(nèi)容筑公。例如,當遇到中斷指令或調(diào)用子程序指令時尊浪,8086自動調(diào)整IP的內(nèi)容匣屡,將IP中下一條將要執(zhí)行的指令地址偏移量人棧保護,待中斷程序執(zhí)行完畢或子程序返回時拇涤,可將保護的內(nèi)容從堆棧中彈出到IP捣作,使主程序繼續(xù)運行。在跳轉(zhuǎn)指令時鹅士,則將新的跳轉(zhuǎn)目標地址送入IP券躁,改變它的內(nèi)容,實現(xiàn)了程序的轉(zhuǎn)移掉盅。
4.5 標志寄存器FR
標志寄存器FR也稱程序狀態(tài)字寄存器也拜。
FR是16位寄存器坛善,其中有9位有效位用來存放狀態(tài)標志和控制標志蔓纠。狀態(tài)標志共6位,CF观游、PF永票、AF卵贱、ZF、SF和OF侣集,用于寄存程序運行的狀態(tài)信息键俱,這些標志往往用作后續(xù)指令判斷的依據(jù)∈婪郑控制標志有3位编振,IF、DF和TF臭埋,用于控制CPU的操作踪央,是人為設(shè)置的。
4.6 移位寄存器SR
在數(shù)字電路中斋泄,移位寄存器是一種在若干相同時間脈沖下工作的以觸發(fā)器為基礎(chǔ)的器件杯瞻,數(shù)據(jù)以并行或串行的方式輸入到該器件中,然后每個時間脈沖依次向左或右移動一個比特炫掐,在輸出端進行輸出魁莉。這種移位寄存器是一維的,事實上還有多維的移位寄存器募胃,即輸入旗唁、輸出的數(shù)據(jù)本身就是一些列位。實現(xiàn)這種多維移位寄存器的方法可以是將幾個具有相同位數(shù)的移位寄存器并聯(lián)起來痹束。
移位寄存器中的數(shù)據(jù)可以在移位脈沖作用下依次逐位右移或左移检疫,數(shù)據(jù)既可以并行輸入、并行輸出祷嘶,也可以串行輸入屎媳、串行輸出夺溢,還可以并行輸入、串行輸出烛谊,串行輸入风响、并行輸出,十分靈活丹禀,用途也很廣状勤。
移位寄存器不僅能寄存數(shù)據(jù),而且能在時鐘信號的作用下使其中的數(shù)據(jù)依次左移或右移双泪。
四位移位寄存器的原理圖如圖所示持搜。FF0、FF1焙矛、FF2葫盼、FF3是四個邊沿觸發(fā)的D觸發(fā)器,每個觸發(fā)器的輸出端Q接到右邊一個觸發(fā)器的輸入端D薄扁。因為從時鐘信號CP的上升沿加到觸發(fā)器上開始到輸出端新狀態(tài)穩(wěn)定地建立起來有一段延遲時間剪返,所以當時鐘信號同時加到四個觸發(fā)器上時,每個觸發(fā)器接收的都是左邊一個觸發(fā)器中原來的數(shù)據(jù)(FF0接收的輸入數(shù)據(jù)D1)邓梅。寄存器中的數(shù)據(jù)依次右移一位脱盲。
5.工作原理
在計算機及其他計算系統(tǒng)中,寄存器是一種非常重要的日缨、必不可少的數(shù)字電路苛件钱反,它通常由觸發(fā)器(D觸發(fā)器)組成,主要作用是用來暫時存放數(shù)碼或指令匣距。一個觸發(fā)器司以存放一位二進制代碼面哥,若要存放N位二進制數(shù)碼,則需用N個觸發(fā)器毅待。
寄存器應(yīng)具有接收數(shù)據(jù)尚卫、存放數(shù)據(jù)和輸出數(shù)據(jù)的功能,它由觸發(fā)器和門電路組成尸红。只有得到“存人脈沖”(又稱“存入指令”吱涉、“寫入指令”)時,寄存器才能接收數(shù)據(jù)外里;在得到“讀出”指令時怎爵,寄存器才將數(shù)據(jù)輸出。
寄存器存放數(shù)碼的方式有并行和串行兩種盅蝗。并行方式是數(shù)碼從各對應(yīng)位輸入端同時輸入到寄存器中鳖链;串行方式是數(shù)碼從一個輸入端逐位輸入到寄存器中。
寄存器讀出數(shù)碼的方式也有并行和串行兩種墩莫。在并行方式中芙委,被讀出的數(shù)碼同時出現(xiàn)在各位的輸出端上逞敷;在串行方式中,被讀出的數(shù)碼在一個輸出端逐位出現(xiàn)题山。
6.寄存器組織
ARM微處理器共有37個32位寄存器兰粉,其中31個為通用寄存器,6個為狀態(tài)寄存器顶瞳。但是這些寄存器不能被同時訪問,具體哪些寄存器是可編程訪問的愕秫,取決于微處理器的工作狀態(tài)及具體的運行模式慨菱。但在任何時候,通用寄存器R14~R0戴甩、程序計數(shù)器PC符喝、一個或兩個狀態(tài)寄存器都是可訪問的。
ARM9處理器共有37個32位長的寄存器甜孤,這些寄存器包括:
- RO~R12:均為32位通用寄存器协饲,用于數(shù)據(jù)操作。但是注意:絕大多數(shù)16位Thumb指令只能訪問R0~R7缴川,而32位Thumb -2指令可以訪問所有寄存器茉稠。
- 堆棧指針:堆棧指針的最低兩位永遠是O,這意味著堆棸芽洌總是4字節(jié)對齊的而线。
- 鏈接寄存器:當呼叫一個子程序時,由R14存儲返回地址恋日。
- 程序計數(shù)器:指向當前的程序地址膀篮,如果修改它的值,就能改變程序的執(zhí)行流岂膳。
- 6個狀態(tài)寄存器(1個CPSR誓竿、5個SPSR),用以標識CPU的丁作狀態(tài)及程序的運行狀態(tài)谈截,均為32位筷屡,目前只使用了其巾的一部分。
Cortex-A8處理器有40個32位長的寄存器傻盟,多了監(jiān)控模式下的寄存器速蕊,如RO~R12、R15娘赴、CPSR通用规哲,R13_ mon、R14_mon诽表、SPSR_mon三個專用寄存器唉锌。
7.寄存器尋址
寄存器尋址就是利用寄存器中的數(shù)值作為操作數(shù)隅肥,這種尋址方式是各類微處理器經(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等损趋。因為寄存器尋址不需要通過總線操作訪問存儲器患久,所以指令執(zhí)行速度比較快。
寄存器尋址( Register Addressing)是以通用寄存器的內(nèi)容作為操作數(shù)的尋址方式浑槽,在該尋址方式下蒋失,操作數(shù)存放在寄存器中。寄存器尋址方式的尋址對象為:A桐玻,B篙挽,DPTR,RO~R7镊靴。其中铣卡,B僅在乘除法指令中為寄存器尋址,在其他指令中為直接尋址偏竟。A可以按寄存器尋址又可以直接尋址煮落,直接尋址時寫成ACC。