微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Thumb指令集之:Thumb数据处理指令

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

时间:09-30 来源:互联网 点击:

。详见指令操作伪代码。

(2)指令的语法格式

RORRd>,Rs>

①Rd>

目的寄存器。存储指令的操作结果和被移位的数值。

②Rs>

循环左移的位数。

(3)指令操作的伪代码

ifRs[7:0]==0then

CFlag=unaffected

Rd=unaffected

ElseifRs[4:0]==0then

CFlag=Rd[31]

Rd=unaffected

Else/*Rs[4:0]>0*/

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

Rd=RdRotate_RightRs[4:0]

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)对应的ARM指令

MOVSRd>,Rd>,RORRs>

11.4.30带进位的减指令SBC

(1)编码格式

带进位的减指令SBC的编码格式如图11.36所示。

图11.36SBC指令的编码格式

SBC指令从指定寄存器中减去另一个寄存器的数值,再减去寄存器CPSR中C条件标志位的反码,并把结果保存到目标寄存器中,同时根据操作的结果更新CPSR中相应的条件标志位。

(2)指令的语法格式

SBCRd>,Rm>

①Rd>

被减数寄存器,同时保存指令的操作结果。

②Rm>

减数寄存器,保存减法操作的减数。

(3)指令操作的伪代码

Rd=Rd–Rm–NOT(CFlag)

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

CFlag=NOTBorrowFrom(Rd–Rm–NOT(CFlag))

VFlag=OverflowFrom(Rd–Rm–NOT(CFlag))

(4)对应的ARM指令

SBCSRd>,Rd>,Rm>

11.4.31减法指令SUB(1)

(1)编码格式

减法指令SUB(1)的编码格式如图11.37所示。

图11.37SUB(1)指令的编码格式

SUB(1)指令从指定寄存器减去3位立即数(取值范围为0~8),并把指令的操作结果保存到寄存器,同时根据结果更新CPSR中相应的条件标志位。

(2)指令的语法格式

SUBRd>,Rn>,#immed_3>

①Rd>

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

②Rn>

被减数寄存器,包含减法操作的被减数。

③immed_3>

作为减数的立即数,该立即数的取值范围为0~8。

(3)指令操作的伪代码

Rd=Rn–immed_3

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

CFlag=NOTBorrowFrom(Rn–immed_3)

VFlag=OverflowFrom(Rn–immed_3)

(4)对应的ARM指令

SUBSRd>,Rn>,#immed_3>

11.4.32减法指令SUB(2)

(1)编码格式

减法指令SUB(2)的编码格式如图11.38所示。

SUB(2)指令从指定寄存器减去8位立即数(即,取值范围为0~256),并把指令的操作结果保存到寄存器,同时根据结果更新CPSR中相应的条件标志位。

图11.38SUB(2)指令的编码格式

(2)指令的语法格式

SUBRd>,#immed_8>

①Rd>

第一个源操作数所在的寄存器,存放减法操作的被减数,同时将减法操作的执行结果保存到该寄存器。

②immed_8>

8位立即数,即减法操作的减数,取值范围为0~255。

(3)指令操作的伪代码

Rd=Rd–immed_8

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

CFlag=NOTBorrowFrom(Rn–immed_8)

VFlag=OverflowFrom(Rn–immed_8)

(4)对应的ARM指令

SUBSRd>,Rd>,#immed_8>

11.4.33减法指令SUB(3)

(1)编码格式

减法指令SUB(3)的编码格式如图11.39所示。

图11.39SUB(3)指令的编码格式

SUB(3)指令将指定寄存器的值和另一个寄存器表示的值做减法运算,并根据指令的操作结果更新状态寄存器的标志位。

(2)指令的语法格式

SUBRd>,Rn>,Rm>

①Rd>

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

②Rn>

源寄存器,存放第一个操作数,即减法运算的被减数。

③Rm>

源寄存器,存放第二个操作数,即减法运算的减数。

(3)指令操作的伪代码

Rd=Rd–Rm

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

CFlag=NOTBorrowFrom(Rn–Rm)

VFlag=OverflowFrom(Rn–Rm)

(4)对应的ARM指令

SUBSRd>,Rn>,Rm>

11.4.34减法指令SUB(4)

(1)编码格式

减法指令SUB(4)的编码格式如图11.40所示。

图11.40SUB(4)指令的编码格式

SUB(4)指令从堆栈指针SP中减去7位立即数的4倍,也就是说其取值为在0~508范围内4的倍数。

(2)指令的语法格式

SUBSP,#immed_7>×4

①SP

程序的堆栈指针,同时也为指令的目的寄存器,存放指令的运算结果。

②immed_7>

7位立即数,其值的4倍将作为减数参加运算。

(3)指令操作的伪代码

SP=SP–(immed_72)

注意

在Thumb指令集中,使用满递减堆栈,该指令常被用于元素的入栈操作。

(4)对应的ARM指令

SUBSP,SP,#immed_7>*4

11.4.35位测试指令TST

(1)编码格式

位测试指令TST的编码格式如图11.41所示。

图11.41TST指令的编码格式

TST指令将两个寄存器的值按位做逻辑与操作,并根据指令的执行结果更新CPSR中相应的条件标志位。TST指令常被用于测试寄存器中某一位

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top