1. 程式人生 > >1.21.ARM彙編指令集9之協處理器指令

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