新闻中心

EEPW首页>嵌入式系统>设计应用> Thumb指令集之:Thumb数据处理指令

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

作者: 时间:2013-09-30 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/257041.htm

11.4.19逻辑左移指令LSL(2)

(1)编码格式

逻辑左移指令LSL(2)的编码格式如图11.25所示。

图11.25LSL(2)指令的编码格式

逻辑左移指令LSL(2)可以实现以2为底的幂的乘法。进行移位后空出的位添0并根据指令的操作结果更新程序状态寄存器的标志位。

(2)指令的语法格式

LSLRd>,Rs>

①Rd>

操作数寄存器,包含被移位的值并保存指令的执行结果。

②Rs>

包含逻辑左移位数的寄存器。

(3)指令操作的伪代码

ifRs[7:0]==0

CFlag=unaffected

Rd=unaffected

ElseifRs[7:0]32then

CFlag=Rd[32–Rs[7:0]]

Rd=Rdlogical_shift_leftRs[7:0]

ElseifRs[7:0]==32then

CFlag=Rd[0]

Rd=0

ElseifRs[7:0]==32then

CFlag=Rd[0]

Rd=0

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

CFlag=0

Rd=0

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)对应的指令

MOVSRd>,Rd>,LSLRs>

11.4.20逻辑右移指令LSR(1)

(1)编码格式

逻辑左移指令LSR(1)的编码格式如图11.26所示。

图11.26LSR(1)指令的编码格式

逻辑右移指令LSR(1)可以实现以2为底的幂做除数的除法。进行移位后空出的位添0,并根据指令的执行结果更新程序状态寄存器的标志位。

(2)指令的语法格式

LSRRd>,Rm>,#immed_5>

①Rd>

目的寄存器。存储指令的操作结果。

②Rm>

操作数寄存器。该寄存器保存的数据将进行右移操作。

③immed_5>

逻辑右移位数,范围为0~31。

(3)指令操作的伪代码

ifimmed_5==0

CFlag=Rd[31]

Rd=0

Else/*immed_5>0*/

CFlag=Rd[immed_5-1]

Rd=RmLogial_shift_rightimmed_5

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)对应的指令

MOVSRd>,Rm>,LSR#immed_5>

11.4.21逻辑右移指令LSR(2)

(1)编码格式

逻辑左移指令LSR(2)的编码格式如图11.27所示。

图11.27LSR(2)指令的编码格式

逻辑右移指令LSR(2)可以实现以2为底的幂做除数的无符号除法。进行移位后空出的位添0,并根据指令的操作结果更新程序状态寄存器的标志位。

(2)指令的语法格式

LSRRd>,Rs>

①Rd>

操作数寄存器,包含被移位的值并保存指令的执行结果。

②Rs>

包含逻辑右移位数的寄存器。

(3)指令操作的伪代码

ifRs[7:0]==0

CFlag=unaffected

Rd=unaffected

ElseifRs[7:0]32then

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

Rd=Rdlogical_shift_RightRs[7:0]

ElseifRs[7:0]==32then

CFlag=Rd[31]

Rd=0

ElseifRs[7:0]==32then

CFlag=Rd[0]

Rd=0

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

CFlag=0

Rd=0

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)对应的指令

MOVSRd>,Rd>,LSRRs>



评论


相关推荐

技术专区

关闭