arm的汇编指令精选合辑
《操作码》包括:QADD、QSUB、QDADD和QDSUB指令。
其中:
Rd 结果寄存器。
Rm,Rn 操作寄存器。
注释:
饱和运算是DSP指令所特有的功能,对加/减法指令的结果做了如下修改:
(1) 如果加/减法指令的结果在- ~ -1之间,饱和运算的结果取加/减法指令的结果。
(2) 如果加/减法指令的结果大于 -1,饱和运算的结果取最终结果为 -1。
(3) 如果加/减法指令结果小于- ,饱和运算的结果取最终结果为时尚- 。
QDADD和QDSUB指令计算SAT(Rm+SAT(Rn*2)),饱和可发生在加倍操作,加法上,或两咱情况下同时发生。或饱和仅发生在加倍操作上,则标志Q置位,但最后结果是不饱和的。SAT意为饱和运算。
这些指令不影响标志N、Z、C和V。若出现饱和,则置位Q标志。可使用MRS指令来读Q标志的状态。注意:即使是饱和不出现,这些指令也从不清除Q标志。使用MSR指令清除Q标志。
QADD、QSUB、QDADD和QDSUB指令适用于ARM v5TE指令系统及以上版本。
例:
QADD R0,R1,R9 ;SAT(R1+R9)→R0
QDSUBLT R9,R0,R1 ;SAT(R0-SAT((R9)*2))→R9
3.2.5 ARM转移类指令
ARM转移类指令完成循环、调用子程序和从ARM状态转向Thumb状态等功能,包括B、BL、BX和BLX指令。
1 转移/转移带链接类指令
功能:B、BL指令完成当前执行指令地址的转移,偏移地址量可以达到32M,BL指令可以把转移指令后第1条指令的地址放进链接寄存器R14中完成连接作用,通常用来完成子程序的调用。
转移地址通常由24位有符号数组成,由于指令地址的代位为00,故可进行2位的左移运算,因此总的偏移量达到±32M。
格式:
B{L}{《条件码》}《Label》
其中:
Label 程序相对偏移表达式。
注释:
BL(Branch and Link)指令将下一条指令的地址拷贝到R14(LR,链接寄存器)并引起处理器转移到Label。BL指令(L=1),等价于先把(PC)→R14,再(PC)+offset→PC.
机器级的B和BL指令限制在当前指令的± (±32M)字节范围内。但是,即使Label走超出了该范围,汇编可以使用这些指令。
例1:条件转移。
CMP R0,35 ;如果R0小于5
BLT SUB1 ;则转SUB1
BGE SUB2 ;否则转SUB2
例2:程序调用。
BL SUB ;调用子程序SUB
… ;返回点
SUB … ;子程序入口
MOV PC,R14 ;执行完返回
例3:执行循环。
MOV R0,#10 ;设置循环次数
LOOP …
SUBS R0,#1 ;循环次数减1
BNE LOOP ;如果循环次数不为0,继续循环
… ;否则结束循环
2 转移交换、转移带链接和交换指令BX,BLX
功能:BX、BLX指令用来支持者Thumb指令集,可以全处理器由ARM指令转向Thumb指令或者由于某种原因Thumb指令返回到执行ARM指令。
格式:
(1)B{L}X{《条件码》}寄存器Rm
(2)BLX《Label》
其中:
RM 含有转移地址的寄存器。Rm的位[0]不用来作为地址的一部分。若Rm的位[0]为1,则指令将CPSR中的标志T置位,且将目标地址的代码解释为Thumb代码。若Rm的位[0]为0,则位[1]就不能为1。
注释:
在指令格式中,寄存器Rm中可以存放转移地址的值,如果Rm中的第0位为1,处理器将Thumb指令;如果为0,执行ARM指令。
在指令格式2中偏移地址量的计算与B或BL指令相同。
BLX指令有如下用法:
l将下一条指令的地址拷贝到R14中(LR,链接寄存器)。
l转移到Label或Rm中的地址。
l若下面的两条中的任何一条成立,则指令集切换到Thumb,即
-Rm的位[0]为1;
-使用"BLX Label"形式。
机器级的"BLX Label"指令不能转移当前指令±32MB范围之外的地址BLX指令格式1可以是条件或者无条件执行,而指令格式2是无条件执行。
例1:无条件转移。
BX R0 ;按R0内容转移
;如果R[0]为1,转Thumb状态
例2:Thumb子程序调用。
CODE32 ;ARM代码
…
BLX TSUB ;Thumb代码执行
TSUB … ;Thumb指令TSUB子程序
BX R14 ;返回ARM代码
3.2.6 ARM协处理器类指令
ARM协处理器指令完成与协处理器有关的操作,如协处理器内部寄存器之间的数据传送、协处理器与存储器之间的数据传送、协处理器与CPU寄存器之间的数据传送。这些指令依赖于使用特写的协处理器。协处理器设计者可以自由地按需要设计处理器的功能,而且这些指令通常借助于汇编器。
1CDP和CDP2指令(CDP,Coprocessor Data operaTIon)
功能:完成协处理器寄存器数据操作。
格式:CDP{条件码} CP#,opc
- 什么是LED驱动时序?LCD背光驱动程序设计(04-26)
- LCD驱动的移植及其GUI仿真如何进行,LCD数模转换现实原理及其源代码(04-25)
- wince代码写入LCD驱动参考,数码产品怎样分别是不是LCD坏点(04-26)
- ARM微处理器助记符指令及其功能描述(04-30)
- 布线工程师如何充分“掌控”时钟信号?(02-21)
- FPGA组成、工作原理和开发流程(10-13)