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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論