Thumb指令集之:Thumb数据处理指令
目标寄存器。 ②#immed_8> 8位的立即数。该立即数将和寄存器Rd>的值相加,并将结果保存到Rd>中。 (3)指令操作的伪代码 Rd=Rd+immed_8 NFlag=Rd[31] ZFlag=ifRd==0then1else0 CFlag=CarryFrom{Rn+immed_8} VFlag=OverflowFrom{Rn+immed_8} (4)对应的ARM指令 ADDSRd>,Rd>,#immed_8> (1)编码格式 寄存器加法指令ADD(3)的编码格式如图11.10所示。 图11.10ADD(3)指令的编码格式 此种形式的加法指令将两个寄存器的值相加,将结果放入第三个目标寄存器,并根据操作结果更新标志位。 (2)指令的语法格式 ADDRd>,Rn>,Rm> ①Rd> 加法操作的目标寄存器。 ②Rn> 操作数寄存器。存放加法操作的第一个操作数。 ③Rm> 操作数寄存器。存放加法操作的第二个操作数。 (3)指令操作的伪代码 Rd=Rn+Rm NFlag=Rd[31] ZFlag=ifRd==0then1else0 CFlag=CarryFrom(Rn+Rm) VFlag=OverflowFrom(Rn+Rm) (1)编码格式 寄存器加法指令ADD(4)的编码格式如图11.11所示。 图11.11ADD(4)指令的编码格式 此种形式的加法指令将两个寄存器的值相加,将结果放入第三个目标寄存器。该指令不更新程序状态字的标志位。 注意 该指令与ADD(3)的区别在于其操作数寄存器。该指令的操作数寄存器为r8~r14和PC高寄存器。操作结果对程序状态字的标志位没有影响。 (2)指令的语法格式 ADDRd>,Rm> ①Rd> 指令的操作数寄存器,其中保存加法操作的一个操作数,并将指令的操作结果放入该寄存器。取值范围为r0~r15。 ②Rm> 操作数寄存器。存放加法操作的第二个操作数。可以为r0~r15的任意寄存器。 (3)指令操作的伪代码 Rd=Rd+Rm (1)编码格式 寄存器加法指令ADD(5)的编码格式如图11.12所示。 图11.12ADD(5)指令的编码格式 该指令将一个立即数和PC值相加,并将PC相关地址写入目标寄存器。立即数可以是0~1020范围内的任意数值的4倍。该指令不更新程序状态字的标志位。 (2)指令的语法格式 ADDRd>,PC,#immed_8>×4 ①Rd> 指令的目的寄存器,存放指令的操作结果。 ②PC PC相关地址。 ③immed_8> 加到PC值上的8位立即数。 (3)指令操作的伪代码 Rd=(PCAND0xfffffffc)+(immed_82) (1)编码格式 寄存器加法指令ADD(6)的编码格式如图11.13所示。 图11.13ADD(6)指令的编码格式 该指令将一个立即数和SP值相加,并将SP相关地址写入目标寄存器。立即数可以是0~1020范围内的任意4的倍数。该指令不更新程序状态字的标志位。 (2)指令的语法格式 ADDRd>,SP,#immed_8>×4 ①Rd> 指令的目的寄存器,存放指令的操作结果。 ②SP SP相关地址。 ③immed_8> 该立即数的4倍将与SP值相加。 (3)指令操作的伪代码 Rd=SP+(immed_82) (1)编码格式 寄存器加法指令ADD(6)的编码格式如图11.14所示。 该指令将一个立即数和SP值相加,并将SP相关地址写回SP寄存器。立即数可以是0~508范围内的任意数值的4倍。该指令不更新程序状态字的标志位。 图11.14ADD(7)指令的编码格式 (2)指令的语法格式 ADDSP,#immed_7>×4 ①SP SP相关地址,同时也为指令的目标寄存器。 ②immed_7> 指定的7位立即数,该立即数的4倍将与SP值相加。 (1)编码格式 逻辑与指令AND的编码格式如图11.15所示。 图11.15AND指令的编码格式 AND指令实现两个寄存器值的按位“与”操作。程序状态字的标志位根据指令的执行结果更新。 (2)指令的语法格式 ANDRd>,Rm> ①Rd> 操作数寄存器,包含指令的第一个操作数。同时也为指令操作结果的目的寄存器。 ②Rm> 操作数寄存器,保护指令的第二个操作数。 (3)指令操作的伪代码 Rd=RdANDRm NFlag=Rd[31] ZFlag=ifRd==0then1else0 CFlag=unaffected VFlag=unaffected (4)对应的ARM指令 ANDSRd>,Rd>,Rm> (1)编码格式 算术右移指令ASR(1)的编码格式如图11.16所示。 图11.16ASR(1)指令的编码格式 这种形式的算术右移指令可以方便的实现将一个寄存器的值除以一个常数。该常数是以2为底的幂。 (2)指令的语法格式 ASRRd>,Rm>,#immed_5> ①Rd> 目的寄存器。用于存放指令操作的结果。 ②Rm> 操作数寄存器。存放将要被右移的数据。 ③immed_5> 指定右移的位数。该常数取值范围为1~31。 (3)指令操作的伪代码 Ifimmed_5==0 CFlag=Rm[31]11.4.4寄存器加法指令ADD(3)
11.4.5寄存器加法指令ADD(4)
11.4.6PC相关加法指令ADD(5)
11.4.7SP相关加法指令ADD(6)
11.4.8SP相关加法指令ADD(7)
11.4.9逻辑与指令AND
11.4.10算术右移指令ASR(1)
Thumb指令集 数据处理指令 ARM MOV指令 移位指令 相关文章:
- Thumb指令集之: Thumb指令的特点及实现(08-30)
- Thumb指令集之: Thumb跳转指令(08-30)
- Thumb指令集之: Thumb指令应用(08-30)
- Thumb指令集之: ARM和Thumb的混合编程(08-30)
- Thumb指令集与ARM指令集的区别(11-21)
- Thumb指令集之: Thumb指令应用(09-30)