Thumb指令集之:Thumb数据处理指令

时间:2013-09-30来源:网络

11.4.10算术右移指令ASR(1)

(1)编码格式

算术右移指令ASR(1)的编码格式如图11.16所示。

图11.16ASR(1)指令的编码格式

这种形式的算术右移指令可以方便的实现将一个寄存器的值除以一个常数。该常数是以2为底的幂。

(2)指令的语法格式

ASRRd>,Rm>,#immed_5>

①Rd>

目的寄存器。用于存放指令操作的结果。

②Rm>

操作数寄存器。存放将要被右移的数据。

③immed_5>

指定右移的位数。该常数取值范围为1~31。

(3)指令操作的伪代码

Ifimmed_5==0

CFlag=Rm[31]

IfRm[31]==0then

Rd=0

Else/*Rm[31]==1*/

Rd=0xffffffff

Else/*immed_5>0*/

CFlag=Rm[immed_5-1]

Rd=RmArithmetic_shift_Rightimmed_5

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)对应的ARM指令

MOVSRd>,Rm>,ASR#immed_5>

注意

在ARMv5以前的体系结构版本中,没有单独的Thumb移位指令。在ARMv6版本中已经增加了位移指令,详细信息请参加ARM体系结构相关文档。

11.4.11算术右移指令ASR(2)

(1)编码格式

算术右移指令ASR(2)的编码格式如图11.17所示。

图11.17ASR(2)指令的编码格式

此种形式的ASR指令的操作数均为寄存器。该指令根据指令的操作结果更新程序状态字的标志位。

(2)指令的语法格式

ASRRd>,Rs>

①Rd>

存放指令的操作数和操作结果。

②Rs>

指定操作数将要被移动的位数。

(3)指令操作的伪代码

IfRs[7:0]==0then

CFlag=unaffected

Rd=unaffected

ElseifRs[7:0]32then

CFlag=Rd[Rs[7:0]-1]

Rd=Rdarithmetic_shift_RightRs[7:0]

Else/*Rs[7:0]>=32*/

CFlag=Rd[31]

IfRd[31]==0then

Rd=0

Else/*Rd[31]==1*/

Rd=0xffffffff

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)对应的ARM指令

MOVSRd>,Rd>,ASRRs>

11.4.12位清零指令BIC

(1)编码格式

位清零指令BIC的编码格式如图11.18所示。

图11.18BIC指令的编码格式

BIC指令将两个寄存器的值按位做“异或”操作。该指令根据指令的执行结果更新程序状态字的标志位。

(2)指令的语法格式

BICRd>,Rm>

①Rd>

存放指令的操作数和操作结果。

②Rm>

操作数寄存器,该寄存器中的数据的反码将会和Rd>中的值做“与”操作。

(3)指令操作的伪代码

Rd=RdANDNOTRm

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

CFlag=unaffected

VFlag=unaffected

(4)对应的ARM指令

BICSRd>,Rd>,Rm>

1 2 3 4 5 6 7 8 9 10 11 12 13

关键词: Thumb指令集 数据处理指令 ARM MOV指令 移位指令

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版