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

嵌入式系统 时间:2013-09-30来源:网络

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)对应的ARM指令

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)对应的ARM指令

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)对应的ARM指令

MOVSRd>,Rd>,LSRRs>

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

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

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

或用微信扫描左侧二维码

相关文章

查看电脑版