ARM:指令寄存器
時間:2018-12-12 來源:未(wei)知
在arm 處理(li)器共有(you)37個寄(ji)存(cun)(cun)(cun)器。其中包(bao)含(han),31個通用寄(ji)存(cun)(cun)(cun)器,6個狀態寄(ji)存(cun)(cun)(cun)器,多有(you)的(de)(de)這些寄(ji)存(cun)(cun)(cun)器都是32位寄(ji)存(cun)(cun)(cun)器。Arm微(wei)處理(li)器有(you)7中工作模式,在不(bu)同(tong)的(de)(de)工作模式下有(you)不(bu)同(tong)的(de)(de)寄(ji)存(cun)(cun)(cun)器組(zu),某些寄(ji)存(cun)(cun)(cun)器在不(bu)同(tong)的(de)(de)工作模式下是公用的(de)(de)。
下圖是arm微控(kong)制器的組織(zhi)模式:

其中 R13,R14,R15,分別對(dui)應(ying)SP棧頂地址寄存器(qi)(指(zhi)向函數(shu)中的(de)(de)局(ju)部變量的(de)(de)內(nei)存空間)、lR鏈接(jie)寄存器(qi)(函數(shu)return時將會(hui)返回(hui)到IR指(zhi)向的(de)(de)內(nei)存空間執(zhi)行),PC程(cheng)序計數(shu)器(qi)寄存器(qi)(保存當前正在執(zhi)行的(de)(de)機器(qi)指(zhi)令所在存儲單元的(de)(de)地址值,可以(yi)自動加1操作跳過4個字(zi)節(jie)指(zhi)向下一條指(zhi)令的(de)(de)地址)。
這些寄存(cun)(cun)器(qi)是(shi)(shi)(shi)arm中(zhong)央處理器(qi)內(nei)的(de)組成部分(fen)(fen),在(zai)(zai)其(qi)內(nei)部存(cun)(cun)在(zai)(zai)一(yi)(yi)(yi)個指(zhi)令(ling)(ling)(ling)(ling)寄存(cun)(cun)器(qi)(IR)用來保(bao)存(cun)(cun)當前(qian)正(zheng)在(zai)(zai)執行的(de)一(yi)(yi)(yi)條(tiao)指(zhi)令(ling)(ling)(ling)(ling)。PC保(bao)存(cun)(cun)的(de)是(shi)(shi)(shi)正(zheng)在(zai)(zai)執行的(de)這條(tiao)指(zhi)令(ling)(ling)(ling)(ling)的(de)地(di)址。不(bu)同的(de)中(zhong)央處理器(qi)的(de)指(zhi)令(ling)(ling)(ling)(ling)寄存(cun)(cun)器(qi)長(chang)度是(shi)(shi)(shi)不(bu)一(yi)(yi)(yi)樣的(de),通(tong)常和指(zhi)令(ling)(ling)(ling)(ling)的(de)長(chang)度相等。ARM指(zhi)令(ling)(ling)(ling)(ling)長(chang)度為32比特位(wei),IR的(de)大小也是(shi)(shi)(shi)32bits。一(yi)(yi)(yi)條(tiao)指(zhi)令(ling)(ling)(ling)(ling)的(de)32個比特位(wei)被分(fen)(fen)為兩(liang)段操作碼(ma)和地(di)址碼(ma)。執行指(zhi)令(ling)(ling)(ling)(ling)前(qian)先(xian)檢(jian)測(ce)指(zhi)令(ling)(ling)(ling)(ling)是(shi)(shi)(shi)否(fou)是(shi)(shi)(shi)合法(fa)的(de)指(zhi)令(ling)(ling)(ling)(ling),如果不(bu)能(neng)識別會產生未定(ding)義指(zhi)令(ling)(ling)(ling)(ling)異(yi)常。指(zhi)令(ling)(ling)(ling)(ling)寄存(cun)(cun)器(qi)中(zhong)操作碼(ma)會送入指(zhi)令(ling)(ling)(ling)(ling)譯碼(ma)器(qi)中(zhong)。經過(guo)譯碼(ma)后想操作控制(zhi)器(qi)發(fa)出具體操作的(de)制(zhi)定(ding)信號,例如加法(fa),減(jian)法(fa)等。
獲(huo)取一條指令(ling)(ling)的過是,將PC指向的主(zhu)(zhu)存(cun)(cun)地址中(zhong)的指令(ling)(ling)從主(zhu)(zhu)存(cun)(cun)取出(chu)并(bing)送入指令(ling)(ling)寄存(cun)(cun)器IR中(zhong),然(ran)后PC自加1,跳過4個(ge)字(zi)節的存(cun)(cun)儲單元,指向主(zhu)(zhu)存(cun)(cun)中(zhong)的下一條指令(ling)(ling)。
指(zhi)(zhi)令(ling)寄(ji)存(cun)(cun)器是用來存(cun)(cun)放當前的(de)處理器正(zheng)在執(zhi)行的(de)指(zhi)(zhi)令(ling),比如對于arm匯編(bian)語言中(zhong)的(de)一(yi)條(tiao)指(zhi)(zhi)令(ling)mov r1, #5, 會被匯編(bian)器編(bian)譯為32個(ge)比特位的(de) E3A01005H。E3A01005H在取值(zhi)的(de)時候就(jiu)會從主存(cun)(cun)儲其中(zhong)取出(chu)并送入IR寄(ji)存(cun)(cun)器中(zhong)。經過執(zhi)行 r1 寄(ji)存(cun)(cun)器被賦(fu)值(zhi)為5。
ARM處理器(qi)中指(zhi)令寄存(cun)器(qi)(IR)和程序計(ji)數(shu)器(qi)(PC)的區別(bie):
程序計數(shu)器(qi)(qi)(qi)PC也就是(shi)上圖中(zhong)標識的(de)(de)R15寄(ji)存(cun)(cun)(cun)器(qi)(qi)(qi),用于(yu)保(bao)存(cun)(cun)(cun)主(zhu)存(cun)(cun)(cun)的(de)(de)內(nei)存(cun)(cun)(cun)地址,它指(zhi)向的(de)(de)內(nei)存(cun)(cun)(cun)中(zhong)保(bao)存(cun)(cun)(cun)的(de)(de)是(shi)一(yi)條(tiao)一(yi)條(tiao)的(de)(de)ARM指(zhi)令(4字節一(yi)個(ge)(ge)(ge)的(de)(de)機(ji)器(qi)(qi)(qi)指(zhi)令)。執(zhi)行完成一(yi)條(tiao)指(zhi)令之后(hou)PC會自定加1(移動四個(ge)(ge)(ge)字節),執(zhi)行主(zhu)存(cun)(cun)(cun)中(zhong)的(de)(de)下一(yi)條(tiao)機(ji)器(qi)(qi)(qi)指(zhi)令。PC寄(ji)存(cun)(cun)(cun)器(qi)(qi)(qi)用于(yu)保(bao)存(cun)(cun)(cun)地址,這個(ge)(ge)(ge)概念(nian)跟(gen)C語言中(zhong)的(de)(de)指(zhi)針變量類似(si),所以有地方也稱它為(wei)PC指(zhi)針。
指(zhi)(zhi)(zhi)令(ling)寄存(cun)器IR用于保存(cun)PC指(zhi)(zhi)(zhi)向的(de)保存(cun)在主存(cun)中的(de)機器指(zhi)(zhi)(zhi)令(ling)。大家知(zhi)道一條指(zhi)(zhi)(zhi)令(ling)的(de)執行包(bao)括取(qu)指(zhi)(zhi)(zhi),譯(yi)碼,執行三個過程。其中取(qu)指(zhi)(zhi)(zhi)過程就(jiu)(jiu)是將(jiang)PC指(zhi)(zhi)(zhi)向的(de)保存(cun)在主存(cun)中的(de)機器指(zhi)(zhi)(zhi)令(ling)獲取(qu)到處(chu)理器中的(de)IR寄存(cun)器中,也就(jiu)(jiu)是將(jiang)機器指(zhi)(zhi)(zhi)令(ling)從主存(cun)獲取(qu)到處(chu)理器的(de)過程。然后再(zai)通過譯(yi)碼和執行,那么一條指(zhi)(zhi)(zhi)令(ling)就(jiu)(jiu)執行結束了。

