一ARM微處理器的指令的分類與_第1頁(yè)
一ARM微處理器的指令的分類與_第2頁(yè)
一ARM微處理器的指令的分類與_第3頁(yè)
一ARM微處理器的指令的分類與_第4頁(yè)
一ARM微處理器的指令的分類與_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

、ARM微處理器的指令的分類與格式ARM微處理器的指令集是加載/存儲(chǔ)型的,也即指令集僅能處理寄存器中的數(shù)據(jù),且處理結(jié)果都要放回寄存器中,對(duì)系統(tǒng)存儲(chǔ)器的訪問(wèn)則需要通過(guò)專門的加載/存儲(chǔ)指令來(lái)完成。ARM微處理器的指令集可以分為跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、程序狀態(tài)寄存器(PSR)處理指令、加載/存儲(chǔ)指令、協(xié)處理器指令和異常產(chǎn)指令六類。下是ARM微處理器的基本指令。助記符指令功能描述ADC帶進(jìn)位加法指令A(yù)DD加法指令A(yù)ND邏輯與指令B 跳轉(zhuǎn)指令BIC位清零指令BL 帶返回的跳轉(zhuǎn)指令BLX 帶返回和狀態(tài)切換的跳轉(zhuǎn)指令BX 帶狀態(tài)切換的跳轉(zhuǎn)指令CDP協(xié)處理器數(shù)據(jù)操作指令CMN 比較反值指令CMP 比較指令EOR異或指令LDC 存儲(chǔ)器到協(xié)處理器的數(shù)據(jù)傳輸指令LDM 加載多個(gè)寄存器指令LDR 存儲(chǔ)器到寄存器的數(shù)據(jù)傳輸指令MCR從ARM寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳輸指令MLA乘加運(yùn)算指令MOV 數(shù)據(jù)傳送指令MRC 從協(xié)處理器寄存器到ARM寄存器的數(shù)據(jù)傳輸指令MRS 傳送CPSR或SPSR的內(nèi)容到通寄存器指令MSR 傳送通寄存器到CPSR或SPSR的指令MUL 32位乘法指令MLA 32位乘加指令MVN 數(shù)據(jù)取反傳送指令ORR 邏輯或指令RSB 逆向減法指令RSC 帶借位的逆向減法指令SBC 帶借位減法指令STC 協(xié)處理器寄存器寫入存儲(chǔ)器指令STM 批量?jī)?nèi)存字寫入指令STR 寄存器到存儲(chǔ)器的數(shù)據(jù)傳輸指令SUB 減法指令SWI 軟件中斷指令SWP 交換指令TEQ 相等測(cè)試指令TST 位測(cè)試指令二、指令的條件域當(dāng)處理器作在ARM狀態(tài)時(shí), 乎所有的指令均根據(jù)CPSR中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時(shí),指令被執(zhí)行,否則指令被忽略。每條ARM指令包含4位的條件碼,位于指令的最4位[31:28]。條件碼共有16種,每種條件碼可用兩個(gè)字符表示,這兩個(gè)字符可以添加在指令助記符的后面和指令同時(shí)使用。16種條件標(biāo)志碼中只有15種可以使用,標(biāo)志碼1111保留不用。條件碼助記符后綴標(biāo)志 含義0000EQZ置位相等0001NEZ清零不相等0010CSC置位無(wú)符號(hào)數(shù)大于或等于0011CCC清零無(wú)符號(hào)數(shù)小于0100MIN置位負(fù)數(shù)0101PLN清零正數(shù)或零0110VSV置位溢出0111VCV清零未溢出1000HIC置位Z清零 符號(hào)數(shù)于1001LSC清零Z置位 符號(hào)數(shù)于或等于1010GEN等于V帶符號(hào)數(shù)大于或等于1011LTN不等于V 帶符號(hào)數(shù)于1100GTZ清零且(N等于V)帶符號(hào)數(shù)于1101LEZ置位或(N不等于V)帶符號(hào)數(shù)于或等于1110AL忽略無(wú)條件執(zhí)行三、ARM指令的尋址式1、立即尋址 操作數(shù)在指令中直接給出ADDR0,R0,#1;R0□R0+1ADDR0,R0,#0x3f;R0□R0+0x3f2、寄存器尋址 操作數(shù)在寄存器ADDR0,R1,R2;R0□R1+R23、寄存器間接尋址操作數(shù)的地址在寄存器ADDR0,R1,[R2];R0□R1+[R2]LDRR0,[R1];R0□[R1]STRR0,[R1];[R1]□R04、基址變址尋址 操作數(shù)地址=基址寄存器+指令中給出的地址偏移LDRR0,[R1,#4];R0□[R1+4]LDRR0,[R1,#4]!;R0□[R1+4]、R1□R1+4LDRR0,[R1],#4;R0□[R1]、R1□R1+4LDRR0,[R1,R2];R0□[R1+R2]5、多寄存器尋址類似寄存器尋址,此處是多個(gè)寄存器而已LDMIAR0,{R1,R2,R3,R4};R1□[R0];R2□[R0+4];R3□[R0+8];R4□[R0+12]6、相對(duì)尋址目標(biāo)地址=pc當(dāng)前值+指令給出的標(biāo)號(hào)偏移地址BLNEXT;跳轉(zhuǎn)到程序NEXT處執(zhí)行NEXTMOVPC,LR;從子程序返回7、堆棧尋址ARM微處理器支持這四種類型的堆棧工作方式。-滿遞增堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。-滿遞減堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生成。-空遞增堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由低地址向高地址生成。-空遞減堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成。四、ARM指令集1、跳轉(zhuǎn)指令使用專門的跳轉(zhuǎn)指令。 32MB地址空間直接向程序計(jì)數(shù)器PC寫跳轉(zhuǎn)地址值。 4GB地址空間B跳轉(zhuǎn)指令BL帶返回的跳轉(zhuǎn)指令BLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令BX帶狀態(tài)切換的跳轉(zhuǎn)指令B{條件} 標(biāo)地址其他的類似2、數(shù)據(jù)處理指令數(shù)據(jù)處理指令可分為數(shù)據(jù)傳送指令、算術(shù)邏輯運(yùn)算指令和比較指令等。數(shù)據(jù)傳送指令用于在寄存器和存儲(chǔ)器之間進(jìn)行數(shù)據(jù)的雙向傳輸。算術(shù)邏輯運(yùn)算指令完成常用的算術(shù)與邏輯的運(yùn)算,該類指令不但將運(yùn)算結(jié)果保存在目的寄存器中,同時(shí)更新CPSR中的相應(yīng)條件標(biāo)志位。較指令不保存運(yùn)算結(jié)果,只更新CPSR中相應(yīng)的條件標(biāo)志位。數(shù)據(jù)處理指令包括:—MOV數(shù)據(jù)傳送指令 MOV{條件}{S} 的寄存器,源操作數(shù)MOVR1,R0 ;將寄存器R0的值傳送到寄存器R1MOVPC,R14 ;將寄存器R14的值傳送到PC,常于程序返回MOVR1,R0,LSL#3 ;將寄存器R0的值左移3位后傳送到R1—MVN數(shù)據(jù)取反傳送指令 MVN{條件}{S} 的寄存器,源操作數(shù)MVNR0,#0;將立即數(shù)0取反傳送到寄存器R0中,完成后R0=-1CMP 較指令 CMP{條件}操作數(shù)1,操作數(shù)2CMPR1,R0;將寄存器R1的值與寄存器R0的值相減,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位CMPR1,#100;將寄存器R1的值與立即數(shù)100相減,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位CMN反值較指令 CMN{條件}操作數(shù)1,操作數(shù)2CMNR1,R0 ;將寄存器R1的值與寄存器R0的值相加,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位CMNR1,#100 ;將寄存器R1的值與立即數(shù)100相加,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位TST位測(cè)試指令 TST{條件}操作數(shù)1,操作數(shù)2TSTR1,#%1 ;于測(cè)試在寄存器R1中是否設(shè)置了最低位(%表 進(jìn)制數(shù))TSTR1,#0xffe;將寄存器R1的值與立即數(shù)0xffe按位與,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位TEQ相等測(cè)試指令 TEQ{條件}操作數(shù)1,操作數(shù)2TEQR1,R2 ;將寄存器R1的值與寄存器R2的值按位異或,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位ADD加法指令 ADD{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2ADDR0,R1,R2;R0=R1+R2ADDR0,R1,#256 ;R0=R1+256ADDR0,R2,R3,LSL#1;R0=R2+(R3<<1)ADC帶進(jìn)位加法指令 ADC{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2ADDSR0,R4,R8;加低端的字ADCSR1,R5,R9;加第二個(gè)字,帶進(jìn)位ADCSR2,R6,R10 ;加第三個(gè)字,帶進(jìn)位ADCR3,R7,R11 ;加第四個(gè)字,帶進(jìn)位SUB減法指令 SUB{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2SUBR0,R1,R2;R0=R1-R2SUBR0,R1,#256 ;R0=R1-256SUBR0,R2,R3,LSL#1;R0=R2-(R3<<1)SBC帶借位減法指令SBC{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2SUBSR0,R1,R2;R0=R1-R2-!C,并根據(jù)結(jié)果設(shè)置CPSR的進(jìn)位標(biāo)志位RSB逆向減法指令RSC{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2RSBR0,R1,R2;R0=R2-R1RSBR0,R1,#256 ;R0=256-R1RSBR0,R2,R3,LSL#1;R0=(R3<<1)-R2RSC帶借位的逆向減法指令RSC{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2RSCR0,R1,R2;R0=R2-R1-!CAND邏輯與指令A(yù)ND{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2ANDR0,R0,#3 ;該指令保持R0的0、1位,其余位清零。ORR邏輯或指令ORR{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2ORRR0,R0,#3 ;該指令設(shè)置R0的0、1位,其余位保持不變EOR邏輯異或指令 EOR{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2EORR0,R0,#3 ;該指令反轉(zhuǎn)R0的0、1位,其余位保持不變。BIC位清除指令 BIC{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2BICR0,R0,#%1011 ;該指令清除R0中的位0、1、和3,其余的位保持不變。3、乘法指令與乘加指令A(yù)RM微處理器支持的乘法指令與乘加指令共有6條,可分為運(yùn)算結(jié)果為32位和運(yùn)算結(jié)果為64位兩類,與前面的數(shù)據(jù)處理指令不同,指令中的所有操作數(shù)、目的寄存器必須為通用寄存器,不能對(duì)操作數(shù)使用立即數(shù)或被移位的寄存器,同時(shí),目的寄存器和操作數(shù)1必須是不同的寄存器。乘法指令與乘加指令共有以下6條:MUL32位乘法指令MUL{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2MULR0,R1,R2 ;R0=R1×R2MULSR0,R1,R2 ;R0=R1×R2,同時(shí)設(shè)置CPSR中的相關(guān)條件標(biāo)志位MLA32位乘加指令MLA{條件}{S} 的寄存器,操作數(shù)1,操作數(shù)2,操作數(shù)3MLAR0,R1,R2,R3;R0=R1×R2+R3MLASR0,R1,R2,R3;R0=R1×R2+R3,同時(shí)設(shè)置CPSR中的相關(guān)條件標(biāo)志位SMULL64位有符號(hào)數(shù)乘法指令SMULL{條件}{S} 的寄存器Low, 的寄存器低High,操作數(shù)1,操作數(shù)2SMULLR0,R1,R2,R3;R0=(R2×R3)的低32位;R1=(R2×R3)的32位—SMLAL64位有符號(hào)數(shù)乘加指令SMLAL{條件}{S} 的寄存器Low, 的寄存器低High,操作數(shù)1,操作數(shù)2SMLALR0,R1,R2,R3;R0=(R2×R3)的低32位+R0;R1=(R2×R3)的32位+R1—UMULL64位符號(hào)數(shù)乘法指令UMULL{條件}{S} 的寄存器Low, 的寄存器低High,操作數(shù)1,操作數(shù)2UMULLR0,R1,R2,R3;R0=(R2×R3)的低32位;R1=(R2×R3)的32位—UMLAL64位符號(hào)數(shù)乘加指令UMLAL{條件}{S} 的寄存器Low, 的寄存器低High,操作數(shù)1,操作數(shù)2UMLALR0,R1,R2,R3;R0=(R2×R3)的低32位+R0;R1=(R2×R3)的32位+R14、程序狀態(tài)寄存器訪問(wèn)指令A(yù)RM微處理器支持程序狀態(tài)寄存器訪問(wèn)指令,用于在程序狀態(tài)寄存器和通用寄存器之間傳送數(shù)據(jù),程序狀態(tài)寄存器訪問(wèn)指令包括以下兩條:—MRS程序狀態(tài)寄存器到通寄存器的數(shù)據(jù)傳送指令 MRS{條件}通寄存器,程序狀態(tài)寄存器(CPSR或SPSR)MRSR0,CPSR"專送CPSR的內(nèi)容到R0MRSR0,SPSR;傳送SPSR的內(nèi)容到R0—MSR通寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令 MSR{條件}程序狀態(tài)寄存器(CPSR或SPSR)_<域>,操作數(shù)MSRCPSR,R0;傳送R0的內(nèi)容到CPSRMSRSPSR,R0;傳送R0的內(nèi)容到SPSRMSRCPSR_c,R0;傳送R0的內(nèi)容到SPSR,但僅僅修改CPSR中的控制位域5、加載/存儲(chǔ)指令A(yù)RM微處理器支持加載/存儲(chǔ)指令用于在寄存器和存儲(chǔ)器之間傳送數(shù)據(jù),加載指令用于將存儲(chǔ)器中的數(shù)據(jù)傳送到寄存器,存儲(chǔ)指令則完成相反的操作。常用的加載存儲(chǔ)指令如下:—LDR字?jǐn)?shù)據(jù)加載指令 LDR{條件} 的寄存器,<存儲(chǔ)器地址>LDRR0,[R1] ;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀寄存器R0。LDRR0,[R1,R2] ;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀寄存器R0。LDRR0,[R1,#8] ;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀寄存器R0。LDRR0,[R1,R2]! ;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀寄存器R0,并將新地址R1+R2寫R1。LDRR0,[R1,#8]! ;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀寄存器R0,并將新地址R1+8寫RioLDRR0,[Ri],R2 ;將存儲(chǔ)器地址為Ri的字?jǐn)?shù)據(jù)讀寄存器R0,并將新地址R1+R2寫RioLDRR0,[Ri,R2,LSL#2]!;將存儲(chǔ)器地址為Ri+R2×4的字?jǐn)?shù)據(jù)讀寄存器R0,并將新地址Ri+R2×4寫RioLDRR0,[Ri],R2,LSL#2;將存儲(chǔ)器地址為Ri的字?jǐn)?shù)據(jù)讀寄存器R0,并將新地址Ri+R2×4寫Rio—LDRB字節(jié)數(shù)據(jù)加載指令LDR{條件}B 的寄存器,<存儲(chǔ)器地址>LDRBR0,[Ri] ;將存儲(chǔ)器地址為Ri的字節(jié)數(shù)據(jù)讀寄存器R0,并將R0的24位清零。LDRBR0,[Ri,#8] ;將存儲(chǔ)器地址為Ri+8的字節(jié)數(shù)據(jù)讀寄存器R0,并將R0的24位清零。—LDRH半字?jǐn)?shù)據(jù)加載指令LDR{條件}H 的寄存器,<存儲(chǔ)器地址>LDRHR0,[Ri] ;將存儲(chǔ)器地址為Ri的半字?jǐn)?shù)據(jù)讀寄存器R0,并將R0的i6位清零。LDRHR0,[Ri,#8] ;將存儲(chǔ)器地址為Ri+8的半字?jǐn)?shù)據(jù)讀寄存器R0,并將R0的i6位清零。LDRHR0,[Ri,R2] ;將存儲(chǔ)器地址為Ri+R2的半字?jǐn)?shù)據(jù)讀寄存器R0,并將R0的i6位清零?!猄TR字?jǐn)?shù)據(jù)存儲(chǔ)指令 STR{條件}源寄存器,〈存儲(chǔ)器地址>STRR0,[Ri],#8 ;將R0中的字?jǐn)?shù)據(jù)寫以Ri為地址的存儲(chǔ)器中,并將新地址Ri+8寫RioSTRR0,[Ri,#8] ;將R0中的字?jǐn)?shù)據(jù)寫以Ri+8為地址的存儲(chǔ)器中?!猄TRB字節(jié)數(shù)據(jù)存儲(chǔ)指令STR{條件}B源寄存器,〈存儲(chǔ)器地址>STRBR0,[Ri] ;將寄存器R0中的字節(jié)數(shù)據(jù)寫以Ri為地址的存儲(chǔ)器中。STRBR0,[Ri,#8];將寄存器R0中的字節(jié)數(shù)據(jù)寫以Ri+8為地址的存儲(chǔ)器中。STRH半字?jǐn)?shù)據(jù)存儲(chǔ)指令STR{條件}H源寄存器,〈存儲(chǔ)器地址>STRHR0,[R1] ;將寄存器R0中的半字?jǐn)?shù)據(jù)寫以R1為地址的存儲(chǔ)器中。STRHR0,[R1,#8] ;將寄存器R0中的半字?jǐn)?shù)據(jù)寫以R1+8為地址的存儲(chǔ)器中。6、批量數(shù)據(jù)加載/存儲(chǔ)指令A(yù)RM微處理器所支持批量數(shù)據(jù)加載/存儲(chǔ)指令可以一次在一片連續(xù)的存儲(chǔ)器單元和多個(gè)寄存器之間傳送數(shù)據(jù),批量加載指令用于將一片連續(xù)的存儲(chǔ)器中的數(shù)據(jù)傳送到多個(gè)寄存器,批量數(shù)據(jù)存儲(chǔ)指令則完成相反的操作。常用的加載存儲(chǔ)指令如下:LDM批量數(shù)據(jù)加載指令STM批量數(shù)據(jù)存儲(chǔ)指令LDM(或STM)指令LDM(或STM)指令的格式為:LDM(或STM){條件}{類型}基址寄存器{!},寄存器列表{∧}LDM(或STM)指令于從由基址寄存器所指的 連續(xù)存儲(chǔ)器到寄存器列表所指的多個(gè)寄存器之間傳送數(shù)據(jù),該指令的常見(jiàn)用途是將多個(gè)寄存器的內(nèi)容入棧或出棧。其中,{類型}為以下幾種情況:IA每次傳送后地址加1;IB每次傳送前地址加1;DA每次傳送后地址減1;DB每次傳送前地址減1;FD滿遞減堆棧;ED空遞減堆棧;FA滿遞增堆棧;EA空遞增堆棧;{!}為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送完畢之后,將最后的地址寫入基址寄存器,否則基址寄存器的內(nèi)容不改變。基址寄存器不允許為RIS,寄存器列表可以為R0R15的任意組合。{∧}為可選后綴,當(dāng)指令為L(zhǎng)DM且寄存器列表中包含R15,選該后綴時(shí)表:除了正常的數(shù)據(jù)傳送之外,還將SPSR復(fù)制到CPSR。同時(shí),該后綴還表傳或傳出的是戶模式下的寄存器,而不是當(dāng)前模式下的寄存器。STMFDR13!,{R0,R4-R12,LR};將寄存器列表中的寄存器(R0,R4到R12,LR)存堆棧。LDMFDR13!,{R0,R4-R12,PC};將堆棧內(nèi)容恢復(fù)到寄存器(R0,R4到R12,LR)。7、數(shù)據(jù)交換指令A(yù)RM微處理器所支持?jǐn)?shù)據(jù)交換指令能在存儲(chǔ)器和寄存器之間交換數(shù)據(jù)。數(shù)據(jù)交換指令有如下兩條:SWP字?jǐn)?shù)據(jù)交換指令 SWP{條件} 的寄存器,源寄存器1,[源寄存器2]SWPR0,R1,[R2];將R2所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)傳送到R0,同時(shí)將R1中的字?jǐn)?shù)據(jù)傳送到R2所指向的存儲(chǔ)單元。SWPR0,R0,[R1];該指令完成將R1所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)與R0中的字?jǐn)?shù)據(jù)交換。SWPB字節(jié)數(shù)據(jù)交換指令SWP{條件}B 的寄存器,源寄存器1,[源寄存器2]SWPBR0,R1,[R2];將R2所指向的存儲(chǔ)器中的字節(jié)數(shù)據(jù)傳送到R0,R0的24位清零,同時(shí)將R1中的低8位數(shù)據(jù)傳送到R2所指向的存儲(chǔ)單元。SWPBR0,R0,[R1];該指令完成將R1所指向的存儲(chǔ)器中的字節(jié)數(shù)據(jù)與R0中的低8位數(shù)據(jù)交換。8、移位指令A(yù)RM微處理器內(nèi)嵌的桶型移位器(BarrelShifter), 持?jǐn)?shù)據(jù)的各種移位操作,移位操作在ARM指令集中不作為單獨(dú)的指令使用,它只能作為指令格式中是一個(gè)字段,在匯編語(yǔ)言中表示為指令中的選項(xiàng)。例如,數(shù)據(jù)處理指令的第二個(gè)操作數(shù)為寄存器時(shí),就可以加入移位操作選項(xiàng)對(duì)它進(jìn)行各種移位操作。移位操作包括如下6種類型,ASL和LSL是等價(jià)的,可以由互換:LSL邏輯左移 通寄存器,LSL(或ASL)操作數(shù)MOVR0,R1,LSL#2;將R1中的內(nèi)容左移兩位后傳送到R0中。LSR邏輯右移 通寄存器,LSR操作數(shù)MOVR0,R1,LSR#2;將R1中的內(nèi)容右移兩位后傳送到R0中,左端零來(lái)填充ASR算術(shù)右移 通寄存器,ASR操作數(shù)MOVR0,R1,ASR#2;將R1中的內(nèi)容右移兩位后傳送到R0中,左端第31位的值來(lái)填充ASL算術(shù)左移 通寄存器,ASR操作數(shù)MOVR0,R1,ASL#2;將R1中的內(nèi)容右移兩位后傳送到R0中,右端第2位的值來(lái)填充ROR循環(huán)右移 通寄存器,ROR操作數(shù)MOVR0,R1,ROR#2;將R1中的內(nèi)容循環(huán)右移兩位后傳送到R0中。RRX帶擴(kuò)展的循環(huán)右移 通寄存器,RRX操作數(shù)MOVR0,R1,RRX#2;將R1中的內(nèi)容進(jìn)行帶擴(kuò)展的循環(huán)右移兩位后傳送到R0中。9、協(xié)處理器指令A(yù)RM微處理器可支持多達(dá)16個(gè)協(xié)處理器,用于各種協(xié)處理操作,在程序執(zhí)行的過(guò)程中,每個(gè)協(xié)處理器只執(zhí)行針對(duì) 的協(xié)處理指令,忽略ARM處理器和其他協(xié)處理器的指令。ARM的協(xié)處理器指令主要于ARM處理器初始化ARM協(xié)處理器的數(shù)據(jù)處理操作,以及在ARM處理器的寄存器和協(xié)處理器的寄存器之間傳送數(shù)據(jù),和在ARM協(xié)處理器的寄存器和存儲(chǔ)器之間傳送數(shù)據(jù)。ARM協(xié)處理器指令包括以下5條:CDP協(xié)處理器數(shù)操作指令LDC協(xié)處理器數(shù)據(jù)加載指令STC協(xié)處理器數(shù)據(jù)存儲(chǔ)指令MCRARM處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳送指令MRC協(xié)處理器寄存器到ARM處理器寄存器的數(shù)據(jù)傳送指令--CDP指令CDP指令的格式為:CDP{條件}協(xié)處理器編碼,協(xié)處理器操作碼1, 的寄存器,源寄存器1,源寄存器2,協(xié)處理器操作碼2。CDP指令于ARM處理器通知ARM協(xié)處理器執(zhí)行特定的操作,若協(xié)處理器不能成功完成特定的操作,則產(chǎn)生未定義指令異常。其中協(xié)處理器操作碼1和協(xié)處理器操作碼2為協(xié)處理器將要執(zhí)行的操作, 的寄存器和源寄存器均為協(xié)處理器的寄存器,指令不涉及ARM處理器的寄存器和存儲(chǔ)器。指令示例:CDPP3,2,C12,C10,C3,4;該指令完成協(xié)處理器P3的初始化---LDC指令LDC指令的格式為:LDC{條件}{L}協(xié)處理器編碼,的寄存器,[源寄存器]LDC指令用于將源寄存器所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中,若協(xié)處理器不能成功完成傳送操作,則產(chǎn)未定義指令異常。其中,{L}選項(xiàng)表指令為長(zhǎng)讀取操作,如于雙精度數(shù)據(jù)的傳輸。指令示例:LDCP3,C4,[R0];將ARM處理器的寄存器R0所指向的存儲(chǔ)器中的字?jǐn)?shù)據(jù)傳送到協(xié)處理器P3的寄存器C4中。---STC指令STC指令的格式為:STC{條件}{L}協(xié)處理器編碼,源寄存器,[的寄存器]STC指令用于將源寄存器中的字?jǐn)?shù)據(jù)傳送到目的寄存器所指向的存儲(chǔ)器中,若協(xié)處理器不能成功完成傳送操作,則產(chǎn)未定義指令異常。其中,{L}選項(xiàng)表指令為長(zhǎng)讀取操作,如于雙精度數(shù)據(jù)的傳輸。指令示例:STCP3,C4,[R0];將協(xié)處理器P3的寄存器C4中的字?jǐn)?shù)據(jù)傳送到ARM處理器的寄存器R0所指向的存儲(chǔ)器中。---MCR指令MCR指令的格式為:MCR{條件}協(xié)處理器編碼,協(xié)處理器操作碼1,源寄存器, 的寄存器1, 的寄存器2,協(xié)處理器操作碼2。MCR指令于將ARM處理器寄存器中的數(shù)據(jù)傳送到協(xié)處理器寄存器中,若協(xié)處理器不能成功完成操作,則產(chǎn)生未定義指令異常。其中協(xié)處理器操作碼1和協(xié)處理器操作碼2為協(xié)處理器將要執(zhí)行的操作,源寄存器為ARM處理器的寄存器, 的寄存器1和的寄存器2均為協(xié)處理器的寄存器。指令示例:MCRP3,3,R0,C4,C5,6;該指令將ARM處理器寄存器R0中的數(shù)據(jù)傳送到協(xié)處理器P3的寄存器C4和C5中。---MRC指令MRC指令的格式為:MRC{條件}協(xié)處理器編碼,協(xié)處理器操作碼1, 的寄存器,源寄存器1,源寄存器2,協(xié)處理器操作碼2。MRC指令于將協(xié)處理器寄存器中的數(shù)據(jù)傳送到ARM處理器寄存器中,若協(xié)處理器不能成功完成操作,則產(chǎn)生未定義指令異常。其中協(xié)處理器操作碼1和協(xié)處理器操作碼2為協(xié)處理器將要執(zhí)行的操作, 的寄存器為ARM處理器的寄存器,源寄存器1和源寄存器2均為協(xié)處理器的寄存器。指令示例:MRCP3,3,R0,C4,C5,6;該指令將協(xié)處理器P3的寄存器中的數(shù)據(jù)傳送到ARM處理器寄存器10、異常產(chǎn)生指令A(yù)RM微處理器所支持的異常指令有如下兩條:SWI軟件中斷指令BKPT斷點(diǎn)中斷指令--SWI指令SWI指令的格式為:SWI{條件}24位的立即數(shù)SWI指令于產(chǎn)軟件中斷,以便戶程序能調(diào)操作系統(tǒng)的系統(tǒng)例程。操作系統(tǒng)在SWI的異常處理程序中提供相應(yīng)的系統(tǒng)服務(wù),指

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論