在arm 處理器共有37個寄存器。其中包含,31個通用寄存器,6個狀態寄存器,多有的這些寄存器都是32位寄存器。Arm微處理器有7中工作模式,在不同的工作模式下有不同的寄存器組,某些寄存器在不同的工作模式下是公用的。
下圖是arm微控制器的組織模式:
其中 R13,R14,R15,分別對應SP棧頂地址寄存器(指向函數中的局部變量的內存空間)、lR鏈接寄存器(函數return時將會返回到IR指向的內存空間執行),PC程序計數器寄存器(保存當前正在執行的機器指令所在存儲單元的地址值,可以自動加1操作跳過4個字節指向下一條指令的地址)。
這些寄存器是arm中央處理器內的組成部分,在其內部存在一個指令寄存器(IR)用來保存當前正在執行的一條指令。PC保存的是正在執行的這條指令的地址。不同的中央處理器的指令寄存器長度是不一樣的,通常和指令的長度相等。ARM指令長度為32比特位,IR的大小也是32bits。一條指令的32個比特位被分為兩段操作碼和地址碼。執行指令前先檢測指令是否是合法的指令,如果不能識別會產生未定義指令異常。指令寄存器中操作碼會送入指令譯碼器中。經過譯碼后想操作控制器發出具體操作的制定信號,例如加法,減法等。
獲取一條指令的過是,將PC指向的主存地址中的指令從主存取出并送入指令寄存器IR中,然后PC自加1,跳過4個字節的存儲單元,指向主存中的下一條指令。
指令寄存器是用來存放當前的處理器正在執行的指令,比如對于arm匯編語言中的一條指令mov r1, #5, 會被匯編器編譯為32個比特位的 E3A01005H。E3A01005H在取值的時候就會從主存儲其中取出并送入IR寄存器中。經過執行 r1 寄存器被賦值為5。
ARM處理器中指令寄存器(IR)和程序計數器(PC)的區別:
程序計數器PC也就是上圖中標識的R15寄存器,用于保存主存的內存地址,它指向的內存中保存的是一條一條的ARM指令(4字節一個的機器指令)。執行完成一條指令之后PC會自定加1(移動四個字節),執行主存中的下一條機器指令。PC寄存器用于保存地址,這個概念跟C語言中的指針變量類似,所以有地方也稱它為PC指針。
指令寄存器IR用于保存PC指向的保存在主存中的機器指令。大家知道一條指令的執行包括取指,譯碼,執行三個過程。其中取指過程就是將PC指向的保存在主存中的機器指令獲取到處理器中的IR寄存器中,也就是將機器指令從主存獲取到處理器的過程。然后再通過譯碼和執行,那么一條指令就執行結束了。