寄存器工作原理與組織尋址
在計算機(jī)及其他計算系統(tǒng)中,寄存器是一種非常重要的、必不可少的數(shù)字電路苛件,它通常由觸發(fā)器(D觸發(fā)器)組成,主要作用是用來暫時存放數(shù)碼或指令。一個觸發(fā)器司以存放一位二進(jìn)制代碼,若要存放N位二進(jìn)制數(shù)碼,則需用N個觸發(fā)器。 [6] 寄存器應(yīng)具有接收數(shù)據(jù)、存放數(shù)據(jù)和輸出數(shù)據(jù)的功能,它由觸發(fā)器和門電路組成。只有得到“存入脈沖”(又稱“存入指令”、“寫入指令”)時,寄存器才能接收數(shù)據(jù);在得到“讀出”指令時,寄存器才將數(shù)據(jù)輸出。 [6] 寄存器存放數(shù)碼的方式有并行和串行兩種。并行方式是數(shù)碼從各對應(yīng)位輸入端同時輸入到寄存器中;串行方式是數(shù)碼從一個輸入端逐位輸入到寄存器中。 寄存器讀出數(shù)碼的方式也有并行和串行兩種。在并行方式中,被讀出的數(shù)碼同時出現(xiàn)在各位的輸出端上;在串行方式中,被讀出的數(shù)碼在一個輸出端逐位出現(xiàn)。
(1)代碼要存得進(jìn);(2)代碼要記得住;(3)代碼要取得出。 [7] 寄存器是由具有存儲功能的觸發(fā)器組合起來構(gòu)成的。一個觸發(fā)器可以存儲1位2進(jìn)制代碼,存放n位2進(jìn)制代碼的寄存器,需用n個觸發(fā)器來構(gòu)成。對寄存器中的觸發(fā)器只要求它具有置1、置0的功能即可,因而無論用何種類型的觸發(fā)器都可組成寄存器。 按照功能的不同,寄存器可分為基本寄存器和移位寄存器兩大類?;炯拇嫫髦荒懿⑿兴腿霐?shù)據(jù),需要時也只能并行輸出。移位寄存器中的數(shù)據(jù)可以在移位脈沖作用下依次逐位右移或左移,數(shù)據(jù)既可以并行輸入、并行輸出,也可以串行輸入、串行輸出,還可以并行輸入、串行輸出或串行輸入、并行輸出,十分靈活,用途也很廣。
ARM微處理器共有37個32位寄存器,其中31個為通用寄存器,6個為狀態(tài)寄存器。但是這些寄存器不能被同時訪問,具體哪些寄存器是可編程訪問的,取決于微處理器的工作狀態(tài)及具體的運行模式。但在任何時候,通用寄存器R14~R0、程序計數(shù)器PC、一個或兩個狀態(tài)寄存器都是可訪問的。 ARM9處理器共有37個32位長的寄存器,這些寄存器包括:(1) RO~R12:均為32位通用寄存器,用于數(shù)據(jù)操作。但是注意:絕大多數(shù)16位Thumb指令只能訪問R0~R7,而32位Thumb -2指令可以訪問所有寄存器。 (2)堆棧指針:堆棧指針的最低兩位永遠(yuǎn)是O,這意味著堆棧總是4字節(jié)對齊的。 (3)鏈接寄存器:當(dāng)呼叫一個子程序時,由R14存儲返回地址。 (4)程序計數(shù)器:指向當(dāng)前的程序地址,如果修改它的值,就能改變程序的執(zhí)行流。 (5)6個狀態(tài)寄存器(1個CPSR、5個SPSR),用以標(biāo)識CPU的工作狀態(tài)及程序的運行狀態(tài),均為32位,目前只使用了其中的一部分。 Cortex-A8處理器有40個32位長的寄存器,多了監(jiān)控模式下的寄存器,如RO~R12、R15、CPSR通用,R13_ mon、R14_mon、SPSR_mon三個專用寄存器。
寄存器尋址就是利用寄存器中的數(shù)值作為操作數(shù),這種尋址方式是各類微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。 [10] 寄存器尋址是指操作數(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í)行速度比較快。 [11] 寄存器尋址( Register Addressing)是以通用寄存器的內(nèi)容作為操作數(shù)的尋址方式,在該尋址方式下,操作數(shù)存放在寄存器中。寄存器尋址方式的尋址對象為:A,B,DPTR,RO~R7。其中,B僅在乘除法指令中為寄存器尋址,在其他指令中為直接尋址。A可以按寄存器尋址又可以直接尋址,直接尋址時寫成ACC。