arm的汇编指令精选合辑
将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
- 什么是LED驱动时序?LCD背光驱动程序设计(04-26)
- LCD驱动的移植及其GUI仿真如何进行,LCD数模转换现实原理及其源代码(04-25)
- wince代码写入LCD驱动参考,数码产品怎样分别是不是LCD坏点(04-26)
- ARM微处理器助记符指令及其功能描述(04-30)
- 布线工程师如何充分“掌控”时钟信号?(02-21)
- FPGA组成、工作原理和开发流程(10-13)