微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > arm的汇编指令精选合辑

arm的汇编指令精选合辑

时间:06-04 来源:网络整理 点击:

将R15用作Rn,则使用的值是指令的地址加8。在有寄存器控制移位的任何数据处理指令中,不能将R15用于任何操作数。

  例1:

  ADD R2,R1,R3 ;(R1)+(R3)→R2

  例2:

  SUBS R2,R2,#1 ;(R2)-1→R2

  BEQ LABEL ;如等于0,转向LABEL

  例3:R0中的内容乘以5:

  ADD R0,R0,R0,LSL #2 ;(R0)*5→R0

  ADD R0,R0,LSL #1

  例4:R0中的内容乘以10:

  ADD R0,R0,R0,LSL #2 ;(R0)*10→R0

  MOV R0,R0,LSL #1

  例5:R0中的内容乘以10,再加R1中的内容:

  ADD R0,R0,R0,LSL #2 ;(R0)*10+R1→R0

  MOV R0,R1,R0,LSL #1

  例6:

  ADDS R2,R2,R0 ;(R3R2)+(R1R0)→R3R2

  ADC R3,R3,R1

  例7:

  ADDNE R0,R1,#&ff ;if Z=0 then(R1)+0xff→R0

  例8:R1中的内容乘7,送给R0:

  RSB R0,R1,R1,LSL #3 ;(R1)*7→R0

  2 前导零计数指令

  功能:CLZ(Count Leading Zeros)指令对Rm中值的高位(leading zeros)个数进行计数,结果放到Rd中。若源寄存器全为0,则结果为32。若[31]为1,则结果为0。

  格式:

  CLZ{《条件码》}Rd,Rm

  其中:

  Rd ARM结果寄存器,Rd不允许是R15。

  Rm 操作数寄存器。

  注释:

  CLZ指令适用于ARM v5指令系统以上版本。这条指令不影响条件码标志。

  例:

  CLZ R4,R9

  CLZNE R2,R3

  3 乘法指令

  格式:

  (1) MUL{《条件码》}{S},Rd,Rm,Rs

  (2) MLA{《条件码》}Rd,Rm,Rs,Rn

  其中:

  Rd 结果寄存器。

  Rm,Rs,Rn 操作数寄存器。

  R15不能用于Rd,Rm,Rs或Rn。Rd不能与Rm相同。

  (3) 《mul》{《条件码》}{S}RdHi,RdLO,Rm,Rs

  mul中类型包括UMILL、UMLAL、SMULL、SMLAL。

  其中:

  RdLo,RdHi ARM结果寄存器。对于UMLAL和SMLAL,这两个寄存器用于保存累加值。

  Rm,Rs 操作数寄存器。

  R15不能于RdHi,RdLo,Rm或Rs。RdLO、RdHi和Rm必须是不同的寄存器。

  (4) SUML《x》《y》{条件码}Rd,Rm,Rs

  其中:

  《x》 B或T。B意味着使用Rm的低端(位[15:0]),T意味着使用Rs的高端(位[31:16])。

  《y》 B或T。B意味着使用Rm的低端(位[15:0]),T意味着使用Rs的高端(位[31:16])。

  Rd 结果寄存器。

  Rm,Rs 乘数寄存器。

  R15不能用于Rd,Rm和Rs。Rd、Rm、Rs可用相同的寄存器。

  (5) SMLA《x》《y》{条件码}Rd,Rm,Rs可用相同的寄存器。

  其中:

  《x》、《y》、Rm和Rn含义同SMUL《x》《y》指令。

  R15不能用于Rd、Rm和Rs。Rd、Rm、Rs可用相同的寄存器。

  (6) SMULW《y》{条件码}Rd,Rm,Rs

  其中:

  《y》、Rd、Rm、Rs和Rn含义同SMUL《x》《y》指令。

  R15不能用于Rd、Rm和Rs。Rd、Rm、Rs可用相同的寄存器。

  (7) SMULW《y》{条件码}Rd,Rm,Rs

  其中:

  《y》、Rd、Rm、Rs和Rn含义同SMUL《x》《y》指令。

  R15不能用作Rd、Rm、Rs或Rn的任何一个。任何Rd、Rm、Rs或Rn可用相同的寄存器。

  (8) SMULW《y》{条件码}Rd,Rm,Rs,Rn

  其中:

  《y》、Rd、Rm、Rs和Rn含义同SMUL《x》《y》指令。

  R15不能用作Rd、Rm、Rs或Rn的任何一个。任何Rd、Rm、Rs或Rn可用相同的寄存器。

  (9) SMULW《y》{条件码}RdLo,RdHi,Rm,Rs

  其中:

  《x》《y》含义同SMULxy指令。

  RdHi,RdLo 结果寄存器。它们也存储累加值。

  Rm,Rs 乘数寄存器。

  ARM乘法类指令用法如表3-4所示。

  表3-4 ARM乘法类指令

  注释:

  若指定S标志位,则MUL和MLA指令将:①根据结果更新标志N和Z;②不影响标志V;③在ARM v4以前版本中标志C不可靠;④在ARM v5及以后版本中不影响标志C。

  若指定结果S标志位,则UMULL,UMLAL,SMULL和SMLAL指令将:①根据结果更新标志N和Z;②在ARM v4及以前版本中标志C不可靠;③在ARM v5及以后版本中不影响标志C或V。

  SMULAxy指令不影响任何条件码标志。若加法出现溢出,则置位标志Q。使用MRS指令读标志Q的状态。注意:这条指令永远也不会清除Q标志。要清除Q标志,则应使用MSR指令。

  SMULxy、SMULWy、SMLALxy指令不影响任何条件标志。

  SMULxy、SMULWy、SMLALxy、SMLAxy和SMLAWy指令适用于ARM v5TE指令系统及以上版本。

  例:

  SMLALLES R8,R9,R7,R6

  SMULLNE R0,R1,R9,R0

  4 QADD、QSUB、QDAAA和QDSUB指令

  功能:这4条指令属于DSP增强指令,完成饱和加、饱和减,饱和乘2加、饱和乘2减4种饱和运算功能。

  格式:

  《操作码》{条件码}Rd,Rm,Rn

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top