本节介绍逻辑操作指令,下面对这些指令进行详细说明。
1.ANDS<Rd>,<Rm>
该指令将寄存器Rd和寄存器Rm中的内容做“逻辑与”运算,将结果保存在寄存器Rd中,同时更新寄存器APSR中的N、Z和C标志,但不更新V标志,该汇编助记符指令的机器码格式如图4.50所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。
图4.50 ANDS<Rd>,<Rm>指令的机器码格式
指令ANDS R0,R1,其机器码为(4008) 16 。该指令将寄存器R0和寄存器R1中的内容做“逻辑与”运算,将结果保存在寄存器R0中,同时更新寄存器APSR中的标志。
2.ORRS<Rd>,<Rm>
该指令将寄存器Rd和寄存器Rm中的内容做“逻辑或”运算,将结果保存在寄存器Rd中,同时更新寄存器APSR中的N、Z和C标志,但不更新V标志,该汇编助记符指令的机器码格式如图4.51所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。
图4.51 ORRS<Rd>,<Rm>指令的机器码格式
指令ORRS R0,R1,其机器码为(4308) 16 。该指令将寄存器R0和寄存器R1中的内容做“逻辑或”运算,将结果保存在寄存器R0中,同时更新寄存器APSR中的标志。
3.EORS<Rd>,<Rm>
该指令将寄存器Rd和寄存器Rm中的内容做“逻辑异或”运算,将结果保存在寄存器Rd中,同时更新寄存器APSR中的N、Z和C标志,但不更新V标志,该汇编助记符指令的机器码格式如图4.52所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。
图4.52 EORS<Rd>,<Rm>指令的机器码格式
指令EORS R0,R1,其机器码为(4048) 16 。该指令将寄存器R0和寄存器R1中的内容做“逻辑异或”运算,将结果保存在寄存器R0中,同时更新寄存器APSR中的标志。
4.MVNS<Rd>,<Rm>
该指令将寄存器Rm的[31:0]位按位做“逻辑取反”运算,将结果保存在寄存器Rd中,同时更新寄存器APSR中的N、Z和C标志,但不更新V标志,该汇编助记符指令的机器码格式如图4.53所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。
图4.53 MVNS<Rd>,<Rm>指令的机器码格式
指令MVNS R0,R1,其机器码为(43C8) 16 。该指令将寄存器R1的[31:0]位按位做“逻辑取反”运算,将结果保存在寄存器R0中,同时更新寄存器APSR中的标志。
5.BICS<Rd>,<Rm>
该指令将寄存器Rm的[31:0]位按位做“逻辑取反”运算,然后与寄存器Rd中的[31:0]位做“逻辑与”运算,将结果保存在寄存器Rd中,同时更新寄存器APSR中的N、Z和C标志,但不更新V标志。该汇编助记符指令的机器码格式如图4.54所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。
图4.54 BICS<Rd>,<Rm>指令的机器码格式
指令BICS R0,R1,其机器码为(4388) 16 。该指令将寄存器R1的[31:0]位按位做“逻辑取反”运算,然后与寄存器R0中的[31:0]位做“逻辑与”运算,将结果保存在寄存器R0中,同时更新寄存器APSR中的标志。
6.TST<Rd>,<Rm>
该指令将寄存器Rd和寄存器Rm中的内容做“逻辑与”运算,但是不保存结果,同时更新寄存器APSR中的N、Z和C标志,但不更新V标志,该汇编助记符指令的机器码格式如图4.55所示。从该指令的机器码格式可知,寄存器Rm和Rd的范围为R0~R7。
图4.55 TST<Rd>,<Rm>指令的机器码格式
指令TST R0,R1,其机器码为(4208) 16 。该指令将寄存器R0和寄存器R1中的内容做“逻辑与”运算,但是不保存结果,并且更新寄存器APSR中的标志。
思考与练习4.10:说明以下指令实现的功能。
(1)ANDS R2,R2,R1______________________________
(2)ORRS R2,R2,R5______________________________
(3)ANDS R5,R5,R8______________________________
(4)EORS R7,R7,R6______________________________
(5)BICS R0,R0,R1______________________________