您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > ARM和Thumb-2指令集快速参考卡
ARM®和Thumb®-2指令集快速参考卡表关键字Rm{,opsh}请参阅表寄存器,可选择移动常数个位reglist以逗号隔开的寄存器列表,括在大括号{和}内。Operand2请参阅表灵活的操作数2。移位和循环移位只可用于Operand2。reglist-PC作为reglist,不能包含PC。fields请参阅表PSR字段。reglist+PC作为reglist,包含PC。PSRAPSR(应用程序状态寄存器)、CPSR(当前处理器状态寄存器)或SPSR(保存的处理器状态寄存器)flagsnzcvq(ALU标记PSR[31:27])或g(SIMDGE标记PSR[19:16])C*,V*在体系结构v4及更早版本中,标记不可预知;在体系结构v5及以后版本中,标记保持不变。§请参阅表ARM体系结构版本。Rs|sh可为Rs或一个立即数移位值。每种移位类型的允许值与+/-+或–。(+可省略。)表寄存器,可选择移动常数个位中的相同。iflags中断标记。一个或多个a、i、f(中止、中断、快速中断)。x、yB或T,B表示半寄存器[15:0],T表示半寄存器[31:16]。p_mode请参阅表处理器模式imm8mARM:32位常数,由8位值向右循环移偶数位生成。SPmp_mode所指定的处理模式的SPThumb:32位常数,由8位值左移任意位生成,lsb位域的最低有效位。格式模式为0xXYXYXYXY、0x00XY00XY或0xXY00XY00。width位域宽度,width+lsb必须=32。prefix请参阅并行指令的前缀{X}如果有X,则RsX为Rs循环16位生成。否则,RsX为Rs。{IA|IB|DA|DB}之后增加、之前增加、之后减小、之前减小。{!}如果有!,则在数据传送完毕后更新基址寄存器(前变址)。IB和DA不可用于Thumb状态下。如果省略,则缺省为IA。{S}如果有S,则更新条件标记。sizeB、SB、H或SH,含义分别为字节、有符号字节、半字和有符号半字。{T}如果有T,则带有用户模式特权。SB和SH不可用于STR指令。{R}如果存在R,则对结果进行舍入,否则将其截断。运算§汇编器S更新操作说明加法加法ADD{S}Rd,Rn,Operand2NZCVRd:=Rn+Operand2N带进位ADC{S}Rd,Rn,Operand2NZCVRd:=Rn+Operand2+进位N宽T2ADDRd,Rn,#imm12Rd:=Rn+imm12,imm12的范围为0-4095T、P饱和{加倍}5EQ{D}ADDRd,Rm,RnRd:=SAT(Rm+Rn)加倍:Rd:=SAT(Rm+SAT(Rn*2))Q地址PC相对的寻址ADRRd,labelRd:=label,有关label相对于当前指令的范围,请参阅注释LN、L减法减法SUB{S}Rd,Rn,Operand2NZCVRd:=Rn–Operand2N带进位SBC{S}Rd,Rn,Operand2NZCVRd:=Rn–Operand2–NOT(进位)N宽T2SUBRd,Rn,#imm12Rd:=Rn–imm12,imm12的范围为0-4095T、P反向减法RSB{S}Rd,Rn,Operand2NZCVRd:=Operand2–RnN带进位反向减法RSC{S}Rd,Rn,Operand2NZCVRd:=Operand2–Rn–NOT(进位)A饱和{加倍}5EQ{D}SUBRd,Rm,RnRd:=SAT(Rm–Rn)加倍:Rd:=SAT(Rm–SAT(Rn*2))Q从异常中返回,无出栈。SUBSPC,LR,#imm8NZCVPC=LR–imm8,CPSR=SPSR(当前模式),imm8的范围为0-255。并行算法半字方式加法6prefixADD16Rd,Rn,RmRd[31:16]:=Rn[31:16]+Rm[31:16],Rd[15:0]:=Rn[15:0]+Rm[15:0]G半字方式减法6prefixSUB16Rd,Rn,RmRd[31:16]:=Rn[31:16]–Rm[31:16],Rd[15:0]:=Rn[15:0]–Rm[15:0]G字节方式加法6prefixADD8Rd,Rn,RmRd[31:24]:=Rn[31:24]+Rm[31:24],Rd[23:16]:=Rn[23:16]+Rm[23:16],Rd[15:8]:=Rn[15:8]+Rm[15:8],Rd[7:0]:=Rn[7:0]+Rm[7:0]G字节方式减法6prefixSUB8Rd,Rn,RmRd[31:24]:=Rn[31:24]–Rm[31:24],Rd[23:16]:=Rn[23:16]–Rm[23:16],Rd[15:8]:=Rn[15:8]–Rm[15:8],Rd[7:0]:=Rn[7:0]–Rm[7:0]G交换半字,半字方式加法,半字方式减法6prefixASXRd,Rn,RmRd[31:16]:=Rn[31:16]+Rm[15:0],Rd[15:0]:=Rn[15:0]–Rm[31:16]G交换半字,半字方减法,半字方式加法6prefixSAXRd,Rn,RmRd[31:16]:=Rn[31:16]–Rm[15:0],Rd[15:0]:=Rn[15:0]+Rm[31:16]G差值的绝对值无符号求和6USAD8Rd,Rm,RsRd:=Abs(Rm[31:24]–Rs[31:24])+Abs(Rm[23:16]–Rs[23:16])+Abs(Rm[15:8]–Rs[15:8])+Abs(Rm[7:0]–Rs[7:0])差值的绝对值无符号求和,再累加6USADA8Rd,Rm,Rs,RnRd:=Rn+Abs(Rm[31:24]–Rs[31:24])+Abs(Rm[23:16]–Rs[23:16])+Abs(Rm[15:8]–Rs[15:8])+Abs(Rm[7:0]–Rs[7:0])饱和有符号饱和字,右移6SSATRd,#sat,Rm{,ASRsh}Rd:=SignedSat((RmASRsh),sat)。sat的范围为1-32,sh的范围为1-31。Q、R有符号饱和字,左移6SSATRd,#sat,Rm{,LSLsh}Rd:=SignedSat((RmLSLsh),sat)。sat的范围为1-32,sh的范围为0-31。Q有符号饱和两个半字6SSAT16Rd,#sat,RmRd[31:16]:=SignedSat(Rm[31:16],sat),Rd[15:0]:=SignedSat(Rm[15:0],sat)。sat的范围为1-16。Q无符号饱和字,右移6USATRd,#sat,Rm{,ASRsh}Rd:=UnsignedSat((RmASRsh),sat)。sat的范围为0-31,sh的范围为1-31。Q、R无符号饱和字,左移6USATRd,#sat,Rm{,LSLsh}Rd:=UnsignedSat((RmLSLsh),sat)。sat的范围为0-31,sh的范围为0-31。Q无符号饱和两个半字6USAT16Rd,#sat,RmRd[31:16]:=UnsignedSat(Rm[31:16],sat),Rd[15:0]:=UnsignedSat(Rm[15:0],sat)。sat的范围为0-15。QARM和Thumb-2指令集快速参考卡运算§汇编器S更新操作说明乘法乘法MUL{S}Rd,Rm,RsNZC*Rd:=(Rm*Rs)[31:0](如果Rs为Rd,则S可用于Thumb-2中)N、S并累加MLA{S}Rd,Rm,Rs,RnNZC*Rd:=(Rn+(Rm*Rs))[31:0]S乘减T2MLSRd,Rm,Rs,RnRd:=(Rn–(Rm*Rs))[31:0]无符号长乘法UMULL{S}RdLo,RdHi,Rm,RsNZC*V*RdHi,RdLo:=unsigned(Rm*Rs)S长整数无符号乘加UMLAL{S}RdLo,RdHi,Rm,RsNZC*V*RdHi,RdLo:=unsigned(RdHi,RdLo+Rm*Rs)S无符号长乘法,两次加法6UMAALRdLo,RdHi,Rm,RsRdHi,RdLo:=unsigned(RdHi+RdLo+Rm*Rs)长整数有符号乘法SMULL{S}RdLo,RdHi,Rm,RsNZC*V*RdHi,RdLo:=signed(Rm*Rs)S并乘加(长整数)SMLAL{S}RdLo,RdHi,Rm,RsNZC*V*RdHi,RdLo:=signed(RdHi,RdLo+Rm*Rs)S16*16位5ESMULxyRd,Rm,RsRd:=Rm[x]*Rs[y]32*16位5ESMULWyRd,Rm,RsRd:=(Rm*Rs[y])[47:16]16*16位并累加5ESMLAxyRd,Rm,Rs,RnRd:=Rn+Rm[x]*Rs[y]Q32*16位并累加5ESMLAWyRd,Rm,Rs,RnRd:=Rn+(Rm*Rs[y])[47:16]Q长整数16*16位并累加5ESMLALxyRdLo,RdHi,Rm,RsRdHi,RdLo:=RdHi,RdLo+Rm[x]*Rs[y]两次有符号乘法,乘积相加6SMUAD{X}Rd,Rm,RsRd:=Rm[15:0]*RsX[15:0]+Rm[31:16]*RsX[31:16]Q并累加6SMLAD{X}Rd,Rm,Rs,RnRd:=Rn+Rm[15:0]*RsX[15:0]+Rm[31:16]*RsX[31:16]Q并累加(长整数)6SMLALD{X}RdLo,RdHi,Rm,RsRdHi,RdLo:=RdHi,RdLo+Rm[15:0]*RsX[15:0]+Rm[31:16]*RsX[31:16]两次有符号乘法,乘积相减6SMUSD{X}Rd,Rm,RsRd:=Rm[15:0]*RsX[15:0]–Rm[31:16]*RsX[31:16]Q并累加6SMLSD{X}Rd,Rm,Rs,RnRd:=Rn+Rm[15:0]*RsX[15:0]–Rm[31:16]*RsX[31:16]Q并累加(长整数)6SMLSLD{X}RdLo,RdHi,Rm,RsRdHi,RdLo:=RdHi,RdLo+Rm[15:0]*RsX[15:0]–Rm[31:16]*RsX[31:16]有符号高位字乘法6SMMUL{R}Rd,Rm,RsRd:=(Rm*Rs)[63:32]并累加6SMMLA{R}Rd,Rm,Rs,RnRd:=Rn+(Rm*Rs)[63:32]乘减6SMMLS{R}Rd,Rm,Rs,RnRd:=Rn–(Rm*Rs)[63:32]带内部40位累加XSMIAAc,Rm,RsAc:=Ac+Rm*Rs组合半字XSMIAPHAc,Rm,RsAc:=Ac+Rm[15:0]*Rs[15:0]+Rm[31:16]*Rs[31:16]半字XSMIAxyAc,Rm,RsAc:=Ac+Rm[x]*Rs[y]除法有符号或无符号RMopRd,Rn,RmRd:=Rn/Rmop为SDIV(有符号)或UDIV(无符号)T移动数据移动MOV{S}Rd,Operand2NZCRd:=Operand2请参阅移位指令N求反移动MVN{S}Rd,Operand2NZCRd:=0xFFFFFFFFEOROperand2N移到顶部T2MOVTRd,#imm16Rd[31:16]:=imm16,Rd[15:0]不受影响,imm16的范围为0-65535宽T2MOVRd,#imm16Rd[15:0]:=imm16,Rd[31:16]=0,imm16范围为0-6553540位累加器到寄存器XSMRARdLo,RdHi,AcRdLo:=Ac[31:0],RdHi:=Ac[39:32]寄存器到40位累加器XSMARAc,
本文标题:ARM和Thumb-2指令集快速参考卡
链接地址:https://www.777doc.com/doc-6723230 .html