ARM支持16個協(xié)處理器,在程序執(zhí)行過程中,每個協(xié)處理器忽略屬于ARM處理器和其他協(xié)處理器指令,當一個協(xié)處理器硬件不能執(zhí)行屬于她的協(xié)處理器指令時,就會產(chǎn)生一個未定義的異常中斷,在異常中斷處理程序中,可以通過軟件模擬該硬件的操作,比如,如果系統(tǒng)不包含向量浮點運算器,則可以選擇浮點運算軟件模擬包來支持向量浮點運算
ARM協(xié)處理器指令包括如下三類:
1用于ARM處理器初始化ARM協(xié)處理器的數(shù)據(jù)操作
2:用于ARM處理器的寄存器和ARM協(xié)處理器的寄存器間的數(shù)據(jù)傳送操作
3:用于在ARM協(xié)處理器的寄存器和內(nèi)存單元之間傳送數(shù)據(jù)
這些指令包括如下5條
CDP協(xié)處理器數(shù)據(jù)操作指令
LDC協(xié)處理器數(shù)據(jù)讀入指令
STC協(xié)處理器數(shù)據(jù)寫入指令
MCR ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令
MRC 協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳送指令
使用方法:
CDP p5, 2,c12,c10,c3,4 ;協(xié)處理器p5的操作初始化,其中操作碼1為2,操作碼2為4,目標寄存器為c12,源操作數(shù)寄存器位c10,和c3
LDC 指令從一系列連續(xù)的內(nèi)存單元將數(shù)據(jù)讀取到協(xié)處理器的寄存器中,如果協(xié)處理器不能成功的執(zhí)行該操作,將產(chǎn)生未定義的指令異常操作
實例:
LDC p6, CR4,[R2,#4];R2為ARM寄存器,指令讀取內(nèi)存單元R2+4的字數(shù)據(jù),傳送到協(xié)處理器p6的CR4寄存器中
STC(協(xié)處理器數(shù)據(jù)寫入指令)
STC指令將協(xié)處理器的寄存器中的數(shù)據(jù)寫入一些列內(nèi)存單元中
實例:
STC p8,CR8,[R2,#4]! ;R2為ARM寄存器,
指令將協(xié)處理器P8的CR8寄存器中的字數(shù)據(jù)寫入到內(nèi)存單元(R2+4)中,
然后執(zhí)行R2=R2+4操作
MCR(ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令)
MCR 指令將ARM處理器的寄存器中的數(shù)據(jù)傳送到協(xié)處理器的寄存器中,如果協(xié)處理器不能成功執(zhí)行該操作,將產(chǎn)生未定義的指令異常中斷
實例
MCR p14,3,R7,c7,c11,6 ;指令從ARM寄存器中將數(shù)據(jù)傳送到協(xié)處理器p14的寄存器中,
其中R7為ARM寄存器,存放源操作數(shù),C7和C11位協(xié)處理器
寄存器,為目標寄存器,操作碼1為3,操作碼2為6
MRC協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳送指令
MRC指令將協(xié)處理器寄存器中的數(shù)值傳送到ARM的寄存器中,如果協(xié)處理器不能成功的執(zhí)行這些操作,那么將產(chǎn)生未定義的指令異常中斷
實例
MRC p15,2,R5,c0,c2,4 ;指令將協(xié)處理器p15寄存器中的數(shù)據(jù)傳送到ARM寄存器中,
其中,R5為ARM寄存器,是目標寄存器,C0和C2為協(xié)處理器
寄存器,存放源操作數(shù),操作碼1為2,操作碼2為4