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