1、第3章ARM指令集第5课c逻辑运算指令 c-1. AND 功能:将两个源操作数按位作逻辑与操作,将结果保存到目标寄存器中,可能会更新条件标志位。 语法格式及伪码: 使用:用于提取寄存器内容的某些位(用一个掩码和寄存器中值做与操作,掩码中对应寄存器中要提取的位设为1,其余位设置为0)。 c-2. ORR 功能:将两个源操作数按位作逻辑或操作,将结果保存到目标寄存器中,可能会更新条件标志位。 语法格式及伪码: 使用:用于将寄存器中的某些位设置为1(设计一个掩码和寄存器做或操作,掩码中对应寄存器中欲设置的位置为1,其余设置为0)。 举例(将R2的高8位传送到R3的低8位) c-3. EOR 功能:将
2、两个源操作数按位作逻辑异或操作,将结果保存到目标寄存器中,可能会更新条件标志位。 语法格式及伪码: 使用:用于将寄存器中某些位取反(将掩码中对应于寄存器要取反的位设置为1,其余设置为0)。 d比较指令 d-1. CMP 功能:将两个源操作数相减,并更新条件标志位(后续指令可根据条件标志位决定是否被执行)。 语法格式及伪码: 使用:不保存操作结果,只用来修改条件标志位。 d-2. CMN 功能:将两个源操作数相加,并更新条件标志位(后续指令可根据条件标志位决定是否被执行)。 语法格式及伪码: 使用:当OP2=0或0x80000000(负零)时,CMP和CMN的操作结果不同。 e测试指令 e-1.
3、 TST 功能:将两个操作数按位做逻辑与操作,根据结果更新条件标志位(和比较指令一样只能修改,结果被丢弃)。 语法格式及伪码: 使用:用于测试寄存器中某个/些位是1还是0(测试多个位时,可以一个一个测试;测试是利用“Z”条件标志位的取值来实现的)。 e-2.TEQ 功能:将两个操作数按位做逻辑异或操作,根据结果更新条件标志位(和比较指令一样只能修改,结果被丢弃)。 语法格式及伪码: 使用:用于比较两个操作数是否相同(利用“Z”实现)或两个操作数的符号是否相同(利用“N”实现)。 f乘法指令 ARM有两类乘法指令:1.32位的乘法指令;2.64位的乘法指令。细分下来共有6条指令: f-1.MUL
4、 功能:实现两个32位数(有符号/无符号均可)的乘积,将结果放入一个32位寄存器中,可以更新条件标志位。 语法格式及伪码: 使用:只保存结果的低32位,对于有/无符号数而言执行结果相同;对于ARMv5版本及以上,指令不影响C位(以前版本中指令执行后C值不确定);Rm、Rs和Rd为R15时指令的执行结果不可预测(不能使用R15)。 f-2.MLA 功能:实现两个32位数(有符号/无符号均可)的乘积,再加上第三个操作数,将结果放入一个32位寄存器中,可以更新条件标志位。 语法格式及伪码: 使用:同MUL(MLA R0,R1,R2,R3)。 f-3.SMULL 功能:实现两个32位有符号数的乘积,6
5、4位的结果存放在两个寄存器中,可能修改条件标志位。 语法格式及伪码: 使用:对于ARMv5版本及以上,指令不影响C位(以前版本中指令执行后C值不确定);Rm、Rs和RdHi/RdLo为R15时指令的执行结果不可预测(不能使用R15)。 / SMULL R1,R2,R3,R4 R2=(R3R4)63:32,R1=(R3R4)31:0 f-4.SMLAL 功能:实现两个32位有符号数的乘积,并与目的寄存器中的值相加,64位的结果存放在目的寄存器中,可能修改条件标志位。 语法格式及伪码: 使用:同SMULL。 f-5.UMULL 功能:实现两个32位无符号数的乘积,64位的结果存放在两个寄存器中,可能修改条件标志位。 语法格式及伪码: 使用:同SMULL。 f-6.UMLAL 功能:实现两个32位无符号数的乘积,并与目的寄存器中的值相加,64位的结果存放在目的寄存器中,可能修改条件标志位。 语法格式及伪码: 使用:同SMULL。 g其它-位清除指令(BIC) 功能:将寄存器的值和OP2的反码做逻辑与操作,将结果保存到Rd,可能更新条件标志位。 语法格式及伪码: 使用:用于将寄存器中某些位设置为0(将掩码中对应位的值设置为1)。h补充-前导0个数计数指令(CLZ) 功能:用于计算操作数最高端0的个数(ARMv5及以上版本包含)。 语法格式及伪码:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1