




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
常用Cortex-M匯編指令附錄1列出了常用地Cortex-M匯編指令,包括:數據操作指令,轉移指令,存儲器數據傳送指令,異常及其它指令等,上述每一類指令都按照16位指令與32位指令分別講解。1.數據操作指令表1.116位數據操作指令指令名稱指令格式指令功能ADC(帶進位加法)ADC<Rd>,<Rm>Rd+=Rm+CADD(加法)ADD<Rd>,<Rn>,#<imm3>Rd=Rn+imm3ADD<Rd>,#<imm8>Rd+=imm8ADD<Rd>,<Rn>,<Rm>Rd=Rn+RmADD<Rd>,<Rm>Rd+=RmADD<Rd>,PC,#<imm8>*4Rd=PC+imm8*4ADD<Rd>,SP,#<imm8>*4Rd=SP+imm8*4ADD<Rd>,SP,#<imm7>*4Rd=SP+imm7*4ADDSP,SP,#<imm7>*4SP+=imm7*4AND(按位與)AND<Rd>,<Rm>Rd&=RmASR(算術右移)ASR<Rd>,<Rm>,#<imm5>Rd=Rm算術右移imm5ASR<Rd>,<Rs>Rd=Rd算術右移寄存器Rs數個位數BIC(按位清零)BIC<Rd>,<Rs>Rd&=~RsN(負向比較)N<Rn>,<Rm>將Rm取二進制補碼后再與Rn比較P(比較)P<Rn>,#<imm8>Rn與8位立即數比較,并根據結果更新標志位地值P<Rn>,<Rm>Rn與Rm比較,并根據結果更新標志位地值EOR(異或)EOR<Rd>,<Rm>Rd^=RmLSL(邏輯左移)LSL<Rd>,<Rm>,#<imm5>Rd=Rm<<imm5LSL<Rd>,<Rs>Rd<<=RsLSR(邏輯右移)LSR<Rd>,<Rm>,#<imm5>LSR<Rd>,<Rs>Rd=Rm>>imm5Rd>>=RsMOV(傳送)MOV<Rd>,#<imm8>Rd=(U32)imm8MOV<Rd>,<Rm>Rd=RmMUL(乘法)MUL<Rd>,<Rm>Rd*=RmMVN(取按位取反值)MVN<Rd>,<Rm>Rd=~RmNEG(取補碼值)NEG<Rd>,<Rm>Rd=~Rm+1ORR(按位或)ORR<Rd>,<Rm>Rd|=RmSBC(帶借位減法)SBC<Rd>,<Rm>Rd-=Rm+CSUB(減法)SUB<Rd>,#<imm8>Rd-=imm8SUB<Rd>,<Rn>,<Rm>Rd=Rn-RmSUBSP,#<imm7>*4SP-=imm7*4TST(測試)TST<Rn>,<Rm>執行Rn&Rm,并根據結果更新標志位REV(反轉)REVH/REV16(反轉)REV<Rd>,<Rn>Rd=Rn字內地字節順序反轉REV16<Rd>,<Rn>Rd=Rn兩個半字內地字節順序反轉SXTB(字節提取擴展符號位)SXTB<Rd>,<Rm>從寄存器Rm中提取字節[7:0],傳送到寄存器Rd中,并用符號位擴展到32位SXTH(半字提取擴展符號位)SXTH<Rd>,<Rm>從寄存器Rm中提取半字[15:0],傳送到寄存器Rd中,并用符號位擴展到32位UXTB(字節提取擴展零位)UXTB<Rd>,<Rm>從寄存器Rm中提取字節[7:0],傳送到寄存器Rd中,并用零位擴展到32位UXTH(半字提取擴展零位)UXTH<Rd>,<Rm>從寄存器Rm中提取半字[15:0],傳送到寄存器Rd中,并用零位擴展到32位表1.232位數據操作指令指令名稱指令格式指令功能ADC(帶進位加法)ADC{S}.W<Rd>,<Rn>,#<imm12>Rd=Rn+imm12+C。有S就按結果更新標志位,下同ADC{S}.W<Rd>,<Rn>,<Rm>{,<shift>}Rd=Rn+移位后地Rm+C位ADD(加法)ADD{S}.W<Rd>,<Rn>,#<imm12>Rd=Rn+imm12ADD{S}.W<Rd>,<Rm>{,<shift>}Rd=Rd+移位后地RmADDW(寬加法)ADDW.W<Rd>,<Rn>,#<imm12>Rd=Rn+imm12AND(按位與)AND{S}.W<Rd>,<Rn>,#<imm12>Rd=Rn&imm12ASR(算術右移)ASR{S}.W<Rd>,<Rn>,<Rm>Rd=Rn>>Rm,有S按結果更新標志位BIC(按位清零)BIC{S}.W<Rd>,<Rn>,#<imm12>Rd=Rn&~imm12BIC{S}.W<Rd>,<Rn>{,<shift>}Rd&=移位后地Rn取反BFC(位區清零)BFC.WRd,#<lsb>,#<width>Rd[(width+lsb-1):lsb]=0,Rd其它位不受影響。BFI(位區插入)BFI.WRd,Rn,#<lsb>,#<width>Rd[(width+lsb-1):lsb]=Rn[(width-1):0],Rd其它位不受影響。N(負向比較)N.W<Rn>,#<imm12>Rn與12位立即數取補后地值比較,更新標志位N.W<Rn>,<Rm>{,<shift>}Rn與移位后地Rm取補后地值比較,更新標志位P(比較)P.W<Rn>,#<immed_12>Rn與12位立即數比較P.W<Rn>,<Rm>{,<shift>}Rn與移位后地Rm比較,Rm地值不變CLZ(計算前導0個數)CLZ.W<Rd>,<Rn>Rd=Rn中前導零地數目EOR(異或)EOR{S}.W<Rd>,<Rn>,<Rm>{,<shift>}Rd=Rn與按需移位后地Rm作異或操作,Rm地值不變LSL(邏輯左移)LSL{S}.W<Rd>,<Rn>,<Rm>Rd=Rn<<RmLSR(邏輯右移)LSR{S}.W<Rd>,<Rn>,<Rm>Rd=Rn>>RmMLA(乘加)MLA.W<Rd>,<Rn>,<Rm>,<Racc>Rd=Racc+Rn*RmMLS(乘減)MLS.W<Rd>,<Rn>,<Rm>,<Racc>Rd=Racc-Rn*RmMOVW(加載)MOVT(加載)MOVW.W<Rd>,#<imm16>將16位立即數傳送到Rd地低半字中,并把高半字清零MOVT.W<Rd>,#<imm16>將16位立即數傳送到Rd地高半字中,Rd地低半字不受影響MUL(乘法)MUL.W<Rd>,<Rn>,<Rm>Rd=Rn*RmORR(按位或)ORN(按位或)ORR{S}.W<Rd>,<Rn>,#<imm12Rd=Rn|imm12ORR{S}.W<Rd>,<Rn>,<Rm>{,<shift>}先移位Rm,然后Rd=Rn|新RmORN{S}.W<Rd>,<Rn>,#<immed12)Rd=Rn|~imm12ORN{S}.W<Rd>,<Rn>,<Rm>{,<shift>}先移位Rm,然后Rd=Rn|~新RmRBIT(位反轉)RBIT.W<Rd>,<Rm>Rd=Rm按位反轉后地值REV(反轉)REVH/REV(16反轉)REVSH(反轉)REV.W<Rd>,<Rm>Rd=Rm字內地字節順序反轉REV16.W<Rd>,<Rn>Rd=Rn每個半字內地字節順序反轉REVSH.W<Rd>,<Rn>Rd=Rn低半字內地字節反轉后再符號擴展ROR(循環右移)ROR{S}.W<Rd>,<Rn>,<Rm>Rd=Rn循環右移Rm位RRX(帶進位循環右移一位)RRX.WRd,RnRd=(Rn>>1)+(C<<31)SBFX(帶符號位段提取)SBFX.W<Rd>,<Rn>,#<lsb>,#<width>抽取Rn中以lsb位為最低有效位,共width寬度地位段,并帶符號擴展到Rd中SDIV(帶符號除法)SDIV<c><Rd>,<Rn>,<Rm>Rd=Rn/RmSMLAL(帶符號64位乘加)SMLAL.W<RdLo>,<RdHi>,<Rn>,<Rm>RdHi:RdLo+=Rn*RmSMULL帶符號64位乘法SMULL.W<RdLo>,<RdHi>,<Rn>,<Rm>RdHi:RdLo=Rn*RmSSAT(帶符號數飽與運算)SSAT<C><Rd>,#<imm>,<Rn>{,<shift>}先移位Rn,再把Rn地低imm位執行帶符號飽與操作,并把結果帶符號擴展后寫到RdSBC(減法)SUB(減法)SUBW(減法)SBC{S}.W<Rd>,<Rn>,#<imm12>Rd=Rn-imm12-CSUB{S}.W<Rd>,<Rn>,#<imm12>Rd=Rn-imm12SUB{S}.W<Rd>,<Rn>,<Rm>{,<shift>}先移位Rm,Rd=Rn-新RmSUBW.W<Rd>,<Rn>,#<imm12>Rd=Rn-imm12SXTB(帶符號擴展)SXTH(帶符號擴展)SXTB.W<Rd>,<Rm>{,ROR#<imm>}先循環移位Rm,然后取出Rm地低8位,帶符號擴展到32位,并存儲到RdSXTH.W<Rd>,<Rm>{,ROR#<imm>}先循環移位Rm,然后取出Rm地低16位,帶符號擴展到32位,并存儲到RdTEQ(按位異或)TEQ.W<Rn>,#<imm12>Rn與imm12按位異或,并根據結果更新標志位TEQ.W<Rn>,<Rm>{,<shift>}先移位Rm,然后Rn與Rm按位異或,并根據結果更新標志位TST(按位與)TST.W<Rn>,#<imm12)>Rn與imm12按位與,并根據結果更新標志位TST.W<Rn>,<Rm>{,<shift>}先移位Rm,然后Rn與Rm按位與,并根據結果更新標志位UBFX(抽取)UBFX.W<Rd>,<Rn>,#<lsb>,#<width>抽取Rn中以lsb位為最低有效位,共width寬度地位段,并無符號擴展到Rd中UDIV(無符號除法)UDIV<c><Rd>,<Rn>,<Rm>Rd=Rn/RmUMLAL(無符號64位乘加)UMLAL.W<RdLo>,<RdHi>,<Rn>,<Rm>RdHi:RdLo+=Rn*RmUMULL(無符號64位乘法)UMULL.W<RdLo>,<RdHi>,<Rn>,<Rm>RdHi:RdLo=Rn*RmUSAT(無符號擴展)UXTB(無符號擴展)UXTH(無符號擴展)USAT<c><Rd>,#<imm>,<Rn>{,<shift>}先移位Rn,再把Rn地低imm位執行帶符號飽與操作,將結果無符號擴展后寫到Rd中UXTB.W<Rd>,<Rm>{,<rotation>}先循環移位Rm,然后取出Rm地低8位,無符號擴展到32位,并存儲到RdUXTH.W<Rd>,<Rm>{,<rotation>}先循環移位Rm,然后取出Rm地低16位,無符號擴展到32位,并存儲到Rd2.轉移指令表1.316位轉移指令指令名稱指令格式指令功能B(轉移)BL(轉移)BLX(轉移)B<cond><targetaddress>按<cond>條件決定是否跳轉B<label>無條件跳轉BL<Rm>帶鏈接跳轉BLX<Rm>轉移到由寄存器Rm給出地地址,Rm地LSB切換處理器狀態,值得注意地是:因它帶有改變狀態地功能,因此Rm地LSB需要是1,以確保不會試圖進入Arm狀態CBZ(比較轉移)CBNZ(比較轉移)CBZ<Rn>,<label>比較結果為零時跳轉CBNZ<Rn>,<label>比較結果不為零時分支IT(條件轉移)IT<cond>以下面一條指令為條件IT<x><cond>以下面兩條指令為條件IT<x><y><cond>以下面三條指令為條件IT<x><y><z><cond>以下面四條指令為條件表1.432位轉移指令指令名稱指令格式指令功能B(轉移)BL(轉移)B.W<label>無條件分支BL<label>帶鏈接地分支BL<C><label>帶鏈接地分支(立即數)TBB(查表轉移)TBH(查表轉移)TBB[<Rn>,<Rm>]PC+=((U8)*(Rn+Rm))*2,從字節數組中選一個8位前向跳轉地址并轉移TBH[<Rn>,<Rm>,LSL#1]PC+=((U16)*(Rn+Rm*2))*2,從半字節數組中選一個16位前向跳轉地址并轉移3.存儲器數據傳送指令表1.516位存儲器數據傳送指令指令名稱指令格式指令功能LDR(從存儲器中加載字到寄存器中)LDR<Rd>,[<Rn>,#<offset5*4>]加載Rn[offset5*4]地址處地字到RdLDR<Rd>,[<Rn>,<Rm>]加載Rn[Rm]地址處地字到RdLDR<Rd>,[PC,#<offset8>*4]加載PC[offset8*4+4]地址處地字到RdLDR<Rd>,[SP,#<offset8>*4]加載SP[offset8*4]地址處地字到RdLDRH(從存儲器中加載半字到寄存器中)LDRH<Rd>,[<Rn>,#<offset5>*2]加載Rn[offset5*2]地址處地半字到RdLDRH<Rd>,[<Rn>,<Rm>]加載Rn[Rm]地址處地半字到RdLDRB(從存儲器中加載字節到寄存器中)LDRB<Rd>,[<Rn>,#<offset5>]加載Rn[offset5]地址處地字節到RdLDRB<Rd>,[<Rn>,<Rm>]加載Rn[Rm]地址處地字節到RdLDRSH(加載半字并擴展符號位)LDRSH<Rd>,[<Rn>,<Rm>]加載Rn+Rm地址處地半字,并帶符號擴展送到RdLDRSB(加載字節并擴展符號位)LDRSB<Rd>,[<Rn>,<Rm>]加載Rn+Rm地址處地字節,并帶符號擴展送到RdSTR(將寄存器中地字存儲到存儲器中)STR<Rd>,[<Rn>,#<offset5>*4]Rn[offset5*4]=RdSTR<Rd>,[<Rn>,<Rm>]Rn[Rm]=RdSTR<Rd>,[SP,#<offset8>*4]SP[offset8*4]=RdSTRH(將寄存器中地低半字存儲到存儲器中)STRH<Rd>,[<Rn>,#<offset5>*2]*((U16*)(Rn+offset5*2))=(U16)RdSTRH<Rd>,[<Rn>,<Rm>]*((U16*)(Rn+Rm))=(U16)RdSTRB(將寄存器中地低字節存儲到存儲器中)STRB<Rd>,[<Rn>,#<offset5>]*((U8*)(Rn+offset5))=(U8)RdSTRB<Rd>,[<Rn>,<Rm>]*((U8*)(Rn+Rm))=(U8)RdLDMIA(多字加載)LDMIA<Rn>!,<register>多個連續地存儲器字加載STMIA(多字存儲)STMIA<Rn>!,<registers>將多個寄存器字保存到連續地存儲單元中,首地址由Rn給出,每保存完一個Rn+4PUSH(壓棧)PUSH<registers>若干寄存器壓棧PUSH<registers,LR>若干寄存器與LR壓棧POP(出棧)POP<registers>若干寄存器出棧PUSH<registers,PC>若干寄存器與PC出棧表1.632位存儲器數據傳送指令指令名稱指令格式指令功能LDR(從存儲器中加載字到寄存器中)LDR.W<Rxf>,[<Rn>,#<offset12>]Rxf=Rn[offset12]LDR.WPC,[<Rn>,#<offset12>]PC=Rn[offset12]LDR.W<Rxf>,[<Rn>],#+/–<offset8>Rxf=*Rn;Rn+/-=offset8LDR.W<Rxf>,[<Rn>,#<+/–<offset8>]!Rn+/-=offset8;Rxf=*RnLDR.WPC,[<Rn>,#+/–<offset8>]!PC=Rn[offset8]Rn+/-=offset8LDR.W<Rxf>,[<Rn>,<Rm>{,LSL#<shift>}]Rxf=Rn[左移后地Rm],左移只能是0,1,2,3LDR.WPC,[<Rn>,<Rm>{,LSL#<shift>}]PC=Rn[左移后地Rm],左移只能是0,1,2,3LDR.W<Rxf>,[PC,#+/–<offset12>]Rxf=PC[+/–offset12]LDR.WPC,[PC,#+/–<offset12>]PC=PC[+/–offset12]LDRH(從存儲器中加載半字到寄存器中)LDRH.W<Rxf>,[<Rn>,#<offset12>]Rxf=(U16)Rn[offset12]LDRH.W<Rxf>,[<Rn>,#<+/–<offset8>]!Rxf=(U16)Rn[offset8];Rn+/-=offset8LDRH.W<Rxf>,[<Rn>,<Rm>{,LSL#<shift>}]Rxf=(U16)Rn[左移后地Rm],左移只能是0,1,2,3LDRH.W<Rxf>,[PC,#+/–<offset12>]Rxf=(U16)PC[+/–offset12]LDRB(從存儲器中加載字節到寄存器中)LDRB.W<Rxf>,[<Rn>,#<offset12>]Rxf=(U8)Rn[offset12]LDRB.W<Rxf>.[<Rn>],#+/-<offset8>Rxf=(U8)*Rn;Rn+/-=offset8LDRB.W<Rxf>,[<Rn>,<Rm>{,LSL#<shift>}]Rxf=(U8)Rn[左移后地Rm];左移只能是0,1,2,3LDRB.W<Rxf>,[<Rn>,#<+/–<offset8>]!Rxf=Rn[offset8];Rn+/-=offset8LDRB.W<Rxf>,[PC,#+/–<offset12>]Rxf=PC[+/–offset12]LDRSH(加載半字并擴展符號位)LDRSH.W<Rxf>,[<Rn>,#<offset12>]加載Rn+offset12地址處地半字,并帶符號擴展到Rxf中LDRSH.W<Rxf>,[<Rn>],#+/-<offset8>加載Rn地址處地半字,并帶符號擴展到Rxf中。然后Rn+/-=offset8LDRSH.W<Rxf>,[<Rn>,#<+/–<offset8>]!先做Rn+/-=offset8,再加載新Rn地址處地半字,并帶符號擴展到Rxf中LDRSH.W<Rxf>,[<Rn>,<Rm>{,LSL#<shift>}]先把Rm按要求左移0,1,2,3位,再加載Rn+新Rm地址處地半字,并帶符號擴展到Rxf中LDRSH.W<Rxf>,[PC,#+/–<offset12>]加載PC+/–offset12地址處地半字,并帶符號擴展到Rxf中LDRSB(加載字節并擴展符號位)LDRSB.W<Rxf>,[<Rn>,#<offset12>]加載Rn+offset12地址處地字節,并帶符號擴展到Rxf中LDRSB.W<Rxf>.[<Rn>],#+/-<offset8>加載Rn地址處地字節,并帶符號擴展到Rxf中,然后Rn+/-=offset8LDRSB.W<Rxf>,[<Rn>,#<+/–<offset8>]!先Rn+/-=offset8,再加載新Rn地址處地字節,并帶符號擴展到Rxf中LDRSB.W<Rxf>,[<Rn>,<Rm>{,LSL#<shift>}]先把Rm按要求左移0,1,2,3位,再加載Rn+新Rm地址處地字節,并帶符號擴展到Rxf中LDRSB.W<Rxf>,[PC,#+/–<offset12>]加載PC+/-offset12地址處地字節,并帶符號擴展到Rxf中LDRD(加載雙字)LDRD.W<Rxf>,<Rxf2>,[<Rn>,#+/–<offset8>*4]{!}讀取Rn地址加上8位偏移量乘以4處地雙字到Rxf(低32位),Rxf2(高32位),前索引。并且可選在加載后更新RnLDRD.W<Rxf>,<Rxf2>,[<Rn>],#+/–<offset8>*4讀取Rn處地雙字到Rxf(低32位),Rxf2(高32位);Rn+/-=offset8*4LDM(多字連續加載)LDM{IA|DB}.W<Rn>{!},<registers>多存儲器寄存器加載,加載后加4或加載前減4STR(將寄存器中地字存儲到存儲器中)STR.W<Rxf>,[<Rn>,#<offset12>]Rn[offset12]=RxfSTR.W<Rxf>,[<Rn>],#+/–<offset8>Rn=Fxf,Rn+/-=offset8STR.W<Rxf>,[<Rn>,<Rm>{,LSL#<shift>}]先左移Rm,然后Rn[新Rm]=Rxf,左移位數只能是0,1,2,3STR{T}.W<Rxf>,[<Rn>,#+/–<offset8>]{!}Rn[+/-offset8]=Rxf,若有‘!’,則需執行Rn+/-=offset8STRB(將寄存器中地低字節存儲到存儲器中)STRB{T}.W<Rxf>,[<Rn>,#+/–<offset8>]{!}*((U8*)(Rn+offset8))=(U8)Rxf,若有‘!’,則需執行Rn+/-=offset8STRB.W<Rxf>,[<Rn>,#<offset12>]*((U8*)(Rn+offset12))=(U8)RxfSTRB.W<Rxf>,[<Rn>],#+/–<offset8>*((U8*)Rn)=(U8)Rxf,Rn+/-=offset8STRB.W<Rxf>,[<Rn>,<Rm>{,LSL#<shift>}]先左移Rm,左移位數只能是0,1,2,3,再*((U8*)(Rn+新Rm))=(U8)RxfSTM(將多寄存器中地字存儲到連續存儲空間)STM{IA|DB}.W<Rn>{!},<registers>)多個寄存器字連續保存到由Rn給出地首地址中,每存儲一個后自增(IA)/每存儲一個前自減(DB)STRD(將2個寄存器中地雙字存到存儲器中)STRD.W<Rxf>,<Rxf2>,[<Rn>,#+/–<offset8>*4]{!}*(Rn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學課后服務研究論文
- 2025至2030中國智慧醫院行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國日光燈行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國無線心電圖機行業發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030中國數字文旅行業市場發展現狀及消費需求及有效策略與實施路徑評估報告
- 農村特色農產品種植銷售合同
- 六年級日記坐竹筏300字(13篇)
- 我最敬佩的人老師作文(13篇)
- 我的成長日記:從一個難忘的經歷出發12篇
- 學校運動會的發言稿8篇范文
- 音樂課件《爵士樂》
- 廣州市退休人員個人情況登記表
- 課程設計DLP4-13型鍋爐中硫煙煤煙氣袋式除塵濕式脫硫系統設計
- 中學生如何正確交友主題班會
- 健康教育學第三版課后題答案
- Java Web 程序設計(山東聯盟)智慧樹知到課后章節答案2023年下濰坊學院
- (完整版)四宮格數獨題目204道(可直接打印)及空表(一年級數獨題練習)
- 勞務派遣投標方案(完整技術標)
- 日內瓦公約(全文)
- 中建金屬屋面施工方案完整版
- 支付清算系統參與者考試題庫五
評論
0/150
提交評論