逻辑运算类指令的功能是进行与、或、非、异或逻辑运算和对数据进行清0、移位。它包括逻辑与、逻辑或、逻辑非、逻辑异或、清0和移位指令。
1.逻辑与指令
逻辑与指令的操作码助记符是“ANL”。
指令格式:ANL操作数1,操作数2
指令的功能是将操作数1与操作数2按位进行相与运算,结果保存在操作数1中。
逻辑与指令有6条,各条指令的形式和功能见表3-19。
表3-19 逻辑与指令
(续)
下面以一个程序段为例来说明逻辑与指令的功能。例如:
上面的第1条指令是将数据31H(00110001)送到累加器A中,第2条指令是将数据12H(00010010)送到寄存器R3中,第3条指令是将A和R3中的数据进行按位相与(00110001∧00010010)运算。运算过程如下:
运算结果为00010000(10H),将结果保存在A中。
2.逻辑或指令
逻辑或指令的操作码助记符是“ORL”。
指令格式:ORL操作数1,操作数2
指令的功能是将操作数1与操作数2按位进行相或运算,结果保存在操作数1中。
逻辑或指令有6条,各条指令的形式和功能见表3-20。
表3-20 逻辑或指令
下面以一个程序段为例来说明逻辑或指令的功能。例如:
上面的第1条指令是将数据31H(00110001)送到累加器A中,第2条指令是将数据12H(00010010)送到寄存器R3中,第3条指令是将A和R3中的数据按位进行相或(00110001∨00010010)运算。运算过程如下:
运算结果为00110011(33H),将结果保存在A中。
3.逻辑非指令
逻辑非指令的操作码助记符是“CPL”。
逻辑非指令的形式和功能见表3-21。
表3-21 逻辑非指令
下面以一个程序段为例来说明逻辑非指令的功能。例如:
MOV A,#35H
CPL A
上面的第1条指令是将数据35H(00110101)送到累加器A中,第2条指令是将的数据35H按位取反,得到的结果CAH(11001010)仍保存在A中。
4.逻辑异或指令
逻辑异或指令的操作码助记符是“XRL”。
指令格式:XRL操作数1,操作数2(www.xing528.com)
指令的功能是将操作数1与操作数2按位进行异或运算,结果保存在操作数1中。在两位数进行异或运算时,若两数相异(即两位数不同)结果为“1”,相同则为“0”。
逻辑异或指令有6条,各条指令的形式和功能见表3-22。
表3-22 逻辑异或指令
下面以一个程序段为例来说明逻辑异或指令的功能。例如:
上面的第1条指令是将数据31H(00110001)送到累加器A中,第2条指令是将数据12H(00010010)送到寄存器R3中,第3条指令是将A和R3中的数据按位进行异或运算(00110001⊕00010010)。运算过程如下:
运算结果为00100011(23H),将结果保存在A中。
【例3-6】 图3-6所示为单片机系统硬件图,把8个LED分成两组(高4位与低4位),实现两组交互闪烁。
解答:设计要点如下
1)若LED亮,则P1口输出0,因此刚开始时输出00001111B(化成十六进制为0FH),高4位亮,低4位不亮。
2)若实现两组LED(高4位和低4位)交替闪烁只需要使P1交替输出00001111(0FH)和11110000(F0H),可以看出两个数刚好相反。
3)在交替之中,需要加入一段延时,因为单片机运行速度很快,如不加延时人眼会分辨不出。
流程图与程序设计如下:
小提示
请思考后,用多种方式实现将A的内容取反。
5.清0指令
清0指令的操作码助记符是“CLR”。清0指令的形式和功能见表3-23。
表3-23 清0指令
下面以一个程序段为例来说明清0指令的功能。例如:
上面的第1条指令是将数据35H(00110101)送到累加器A中,第2条指令是将A中的内容清0,A中清0的结果是00H(00000000)。
6.移位指令
移位指令又分不带进位的左环移指令、带进位的左环移指令、不带进位的右环移指令和带进位的右环移指令。各条指令的形式和功能见表3-24。
表3-24 移位指令
(续)
下面以一个程序段为例来说明移位指令的功能。例如:
上面的第1条指令是将数据12H(00010010)送到累加器A中;第2条指令是将A中的数据00010010(12H)左移上位,数据变为00100100(24H);第3条指令是将A中的数据00100100(24H)再左移一位,数据变为01001000(48H)。
可以看出,数据每左移一位,相当于将累加器A中的数据进行了“×2”运算(如数据12H左移一位变为24H,数据24H左移一位就变为48H)。同样在右移(RR A)时,A中的数据每移一位,就相当于进行了“÷2”运算
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。