新闻中心

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

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

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

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

11.4.16比较指令CMP(3)

(1)编码格式

比较指令CMP(3)的编码格式如图11.22所示。

图11.22CMP(3)指令的编码格式

比较指令CMP(3)将两个寄存器的值做比较,其中一个寄存器为r8~r14或PC寄存器高16位。并根据比较结果更新程序状态寄存器的标志位。程序中比较指令后通常跟条件执行指令,实现指令的分支跳转。

(2)指令的语法格式

CMPRn>,Rm>

①Rn>

操作数寄存器。保存将要进行比较的第一个操作数,其取值可以为r0~r15的任意寄存器。

②Rm>

操作数寄存器。保存将要进行比较的第二个操作数,其取值可以为r0~r15的任意寄存器。

(3)指令操作的伪代码

alu_out=Rn–Rm

NFlag=alu_out[31]

ZFlag=ifalu_out==0then1else0

CFlag=NOTBorrowFrom(Rn-Rm)

VFlag=OverflowFrom(Rn-Rm)

注意

指令操作数寄存器Rn>和Rm>中,至少有一个寄存器为r8~r14或PC寄存器的高16位,否则,指令的执行结果不可预知。

(4)对应的指令

CMPRn>,Rm>

11.4.17异或指令EOR

(1)编码格式

比较指令EOR的编码格式如图11.23所示。

图11.23EOR指令的编码格式

EOR指令将两个寄存器中的数值按位执行“异或”操作,并根据指令的执行结果更新程序状态寄存器的标志位。

(2)指令的语法格式

EORRn>,Rm>

①Rn>

操作数寄存器。同时保存指令的第一个操作数和指令的执行结果。

②Rm>

操作数寄存器。保存将要进行比较的第二个操作数。

(3)指令操作的伪代码

Rd=RdORRm

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

CFlag=unaffected

VFlag=unaffected

(4)对应的指令

EORSRd>,Rd>,Rm>

11.4.18逻辑左移指令LSL(1)

(1)编码格式

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

图11.24LSL(1)指令的编码格式

逻辑左移指令LSL(1)可以实现以2为底的幂的乘法。进行移位后空出的位添0。

(2)指令的语法格式

LSLRd>,Rm>,#immed_5>

①Rd>

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

②Rm>

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

③immed_5>

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

(3)指令操作的伪代码

ifimmed_5==0

CFlag=unaffected

Rd=Rm

Else/*immed_5>0*/

CFlag=Rm[32–immed_5]

Rd=Rmlogical_shift_leftimmed_5

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)对应的指令

MOVSRd>,Rm>,LSL#immed_5>



评论


相关推荐

技术专区

关闭