Thumb指令集之:Thumb数据处理指令
11.4.13比较指令CMN
(1)编码格式
比较指令CMN的编码格式如图11.19所示。
图11.19CMN指令的编码格式
比较指令CMN将一个寄存器的值和另一个寄存器的值取负做比较,并根据比较结果更新程序状态字的标志位。程序中比较指令后通常跟条件执行指令。
(2)指令的语法格式
CMNRn>,Rm>
①Rn>
操作数寄存器。用于存放指令的第一个操作数。
②Rm>
操作数寄存器。用于存放指令的第二个操作数。
(3)指令操作的伪代码
Alu_out=Rn+Rm
NFlag=alu_out[31]
ZFlag=ifalu_out==0then1else0
CFlag=NOTBorrowFrom(Rn+Rm)
VFlag=OverflowFrom(Rn+Rm)
(4)对应的ARM指令
CMNRn>,Rm>
11.4.14比较指令CMP(1)
(1)编码格式
比较指令CMP(1)的编码格式如图11.20所示。
图11.20CMP(1)指令的编码格式
比较指令CMP(1)将一个寄存器的值和8位立即数做比较,并根据比较结果更新程序状态字的标志位。程序中比较指令后通常跟条件执行指令。
(2)指令的语法格式
CMPRn>,#immed_8>
①Rn>
操作数寄存器。
②immed_8>
8位常数。将与寄存器Rn>的值做比较。
(3)指令操作的伪代码
Alu_out=Rn–immed_8
NFlag=alu_out[31]
ZFlag=ifalu_out==0then1else0
CFlag=NOTBorrowFrom(Rn–immed_8)
VFlag=OverflowFrom(Rn–immed_8)
(4)对应的ARM指令
CMPRn>,#immed_8>
11.4.15比较指令CMP(2)
(1)编码格式
比较指令CMP(2)的编码格式如图11.21所示。
图11.21CMP(2)指令的编码格式
比较指令CMP(2)将两个寄存器的值做比较,并根据比较结果更新程序状态字的标志位。程序中比较指令后通常跟条件执行指令。
(2)指令的语法格式
CMPRn>,Rm>
①Rn>
操作数寄存器,存放比较的第一个操作数。
②Rm>
操作数寄存器,存放比较的第二个操作数。
(3)指令操作的伪代码
alu_out=Rn–Rm
NFlag=alu_out[31]
ZFlag=ifalu_out==0then1else0
CFlag=NOTBorrowFrom(Rn-Rm)
VFlag=OverflowFrom(Rn-Rm)
(4)对应的ARM指令
CMPRn>,Rm>
评论