1.21.ARM彙編指令集9之協處理器指令
ARM協處理器指令:CDP & LDC & STC & MCR & MRC
ARM支援協處理器操作,協處理器的控制要通過協處理器命令來實現。
* CDP
協處理器資料操作指令,ARM處理器通過CDP指令通知ARM協處理器執行特定的操作。該操作由協處理器完成,即對命令的引數的解釋與協處理器有關,指令的使用取決與協處理器,若協處理器不能成功的執行該操作,將產生未定義指令異常中斷。
指令格式:
CDP{cond} coproc,opcodel,CRd,CRn,CRm{,opcode2}
其中:
coproc: 指令操作的協處理器名。標準名為Pn,n=1~15
opcodel: 協處理器的特定操作碼。
CRd: 作為目標暫存器的協處理器暫存器
CRn: 存放第1個運算元的協處理器暫存器
CRm: 存放第2個運算元的協處理器暫存器
opcode2: 可選的協處理器特定操作碼
eg:
CDP p7,0,c0,c2,c3,0 ; 協處理器7操作,操作碼為0,可選操作碼為0
CDP p6,1,c3,c4,c5 ; 協處理器6操作,操作碼為0
* LDC
協處理器資料讀取指令,LDC指令從某一連續的記憶體單元將資料讀取到協處理器暫存器中。協處理器資料的傳送由協處理器來控制傳送的字數,若協處理器不能成功的執行該操作,將產生未定義指令異常中斷。
指令格式:
LDC{cond}{L} coproc,CRd,<地址>
其中:
L: 可選後綴,指明是長整數資料傳送
coproc: 指令操作的協處理器名p0~p15
CRd: 作為目標寄存的協處理器暫存器
<地址>: 指令的記憶體地址
eg:
LDC p5,c2,[R2,#4] ; 讀取R2+4指向的記憶體單元資料,傳向協處理器p5的c2暫存器
LDC p6,c2,[R1] ; 讀取R1指向的記憶體單元資料,傳向協處理器p6的c2暫存器
* STC
協處理器資料寫入指令,STC指令將協處理器的暫存器資料寫入到某一連續的記憶體單元中。協處理器的資料的傳送,由協處理器來控制傳送的字數,若協處理器不能成功的執行該操作,將產生未定義指令異常中斷。
指令格式:
STC{cond}{L} coproc,CRd,<地址>
其中:
L: 可選後綴,指明長整數資料傳送
coproc: 指令操作的協處理器名p0~p15
CRd: 作為目標寄存的協處理器暫存器
<地址>: 指令的記憶體地址
eg:
STC p5,c1,[R0]
STC p5,c1,[R0,#-0x04]
* MCR
ARM暫存器到協處理器暫存器的資料傳送指令,MCR指令將ARM暫存器中的資料傳送到協處理器中的暫存器中。若協處理器不能成功執行該操作,將產生未定義指令異常中斷。
指令格式:
MCR{cond} coproc,opcodel,CRd,CRn,CRm{,opcode2}
其中:
coproc: 指令操作的協處理器名,p0~p15
opcodel: 協處理器的特定操作碼
CRd: 作為目標暫存器的協處理器暫存器
CRn: 存放第1個運算元的協處理器暫存器
CRm: 存放第2個運算元的協處理器暫存器
opcode2: 可選的協處理器特定操作碼
eg:
MCR p6,2,R7,c1,c2
MCR p7,0,R1,c3,c2,1
* MRC
協處理器暫存器到ARM處理器暫存器的資料傳送指令,MCR指令將協處理器暫存器中的資料傳送到ARM處理器中的暫存器中。若協處理器不能成功執行該操作,將產生未定義指令異常中斷。
指令格式:
MRC{cond} coproc,opcodel,CRd,CRn,CRm{,opcode2}
其中:
coproc: 指令操作的協處理器名,p0~p15
opcodel: 協處理器的特定操作碼
CRd: 作為目標暫存器的協處理器暫存器
CRn: 存放第1個運算元的協處理器暫存器
CRm: 存放第2個運算元的協處理器暫存器
opcode2: 可選的協處理器特定操作碼
eg:
MRC p6,2,R7,c1,c2
MRC p7,0,R0,c3,c2,1