協處理器及其他指令之:協處理器指令
9.1協處理器指令
ARM體系結構允許通過增加協處理器來擴展指令集。最常用的協處理器是用于控制片上功能的系統協處理器。例如控制Cache和存儲管理單元的CP15寄存器。此外,還有用于浮點運算的浮點ARM協處理器,各生產商還可以根據需要開發自己的專用協處理器。
ARM協處理器具有自己專用的寄存器組,它們的狀態由控制ARM狀態的指令的鏡像指令來控制。
程序的控制流指令由ARM處理器來處理,所有協處理器指令只能同數據處理和數據傳送有關。按照RISC的Load/Store體系原則,數據的處理和傳送指令是被清楚分開的,所以它們有不同的指令格式。
ARM處理器支持16個協處理器,在程序執行過程中,每個協處理器忽略ARM和其他協處理器指令。當一個協處理器硬件不能執行屬于它的協處理器指令時,將產生一個未定義指令異常中斷,在該異常中斷處理過程中,可以通過軟件仿真該硬件操作。如果,一個系統中不包含向量浮點運算器,則可以選擇浮點運算軟件包來支持向量浮點運算。
ARM協處理器可以部分地執行一條指令,而后產生中斷。如除法運算除數為0和溢出,這樣可以更好地處理運行時產生(run-time-generated)的異常。但是,指令的部分執行是由協處理器完成的,此過程對ARM來說是透明的。當ARM處理器重新獲得執行時,它將從產生異常的指令處開始執行。
對某一個協處理器來說,并不一定用到協處理器指令中的所有的域。具體協處理器如何定義和操作完全由協處理器的制造商自己決定,因此ARM協處理器指令中的協處理器寄存器的標識符以及操作助記符也有各種不同的實現定義。程序員可以通過宏定義這些指令的語法格式。
ARM協處理器指令分以下3類。
·協處理器數據操作。協處理器數據操作完全是協處理器內部操作,它完成協處理器寄存器的狀態改變。如浮點加運算,在浮點協處理器中兩個寄存器相加,結果放在第3個寄存器中。這類指令包括CDP指令。
·協處理器數據傳送指令。這類指令從寄存器讀取數據裝入協處理器寄存器,或將協處理器寄存器的數據裝入存儲器。因為協處理器可以支持自己的數據類型,所以每個寄存器傳送的字數與協處理器有關。ARM處理器產生存儲器地址,但傳送的字節由協處理器控制。這類指令包括LDC和STC指令。
·協處理器寄存器傳送指令。在某些情況下,需要ARM處理器和協處理器之間傳送數據。如一個浮點運算協處理器,FIX指令從協處理器寄存器取得浮點數據,將它轉換為整數,并將整數傳送到ARM寄存器中。經常需要用浮點比較產生的結果來影響控制流,因此,比較結果必須傳送到ARM的CPSR中。這類協處理器寄存器傳送指令包括MCR和MRC。
表9.1列出了所有協處理器處理指令。
表9.1 協處理器指令
助記符 | 操作 |
CDP | 協處理器數據操作 |
LDC | 裝載協處理器寄存器 |
MCR | 從ARM寄存器傳數據到協處理器寄存器 |
MRC | 從協處理器寄存器傳數據到ARM寄存器 |
STC | 存儲協處理器寄存器 |
9.1.1協處理器數據操作指令CDP
1.指令編碼格式
此指令用于控制數據在協處理器寄存器內部的操作。通常情況下該指令由協處理器完成,如果協處理器不能成功地執行該操作,將產生未定義指令異常。
指令的編碼格式如圖9.1所示。
圖9.1CDP指令編碼格式
評論