文档详情

第三章 MCS-51单片机指令系统及汇编语言程序设计-2.ppt

发布:2017-08-31约3.29万字共109页下载文档
文本预览下载声明
§3-4 逻辑运算类指令 逻辑运算及移位指令共有24条, 其中逻辑指令有“与”、 “或”、 “异或”、 累加器A清零和求反20条, 移位指令4条。 1. 逻辑“与”运算指令 逻辑“与”运算指令共有如下6条, 其助记符为ANL。 逻辑“与”运算指令是将两个指定的操作数按位进行逻辑“与”的操作。 2. 逻辑“或”运算指令 逻辑“或”运算指令共有如下6条指令, 其助记符为ORL。 逻辑“或”指令将两个指定的操作数按位进行逻辑“或”操作。 它常用来使字节中某些位置“1”, 欲保留(不变)的位用“0”与该位相或, 而欲置位的位则用“1”与该位相或。 例如: 若(A)=C0H, (R0)=3FH, (3F)=0FH 执行指令: ORL A, @R0 ; (A) ← (A)∨((R0)) 结果为: (A)=CFH。 又如: 根据累加器A中4~0位的状态, 用逻辑与、 或指令控制P1口4~0位的状态, P1口的高3位保持不变。 ANL A, ; 屏蔽A的高3位 ANL P1, ; 保留P1的高3位 ORL P1, A ; 使P14~0按A4~0置位 若上述程序执行前: (A)=B5H, (P1)=6AH, 则 执行程序后: (A)=15H, (P1)=75H。 3. 逻辑“异或”运算指令 “异或”运算是当两个操作数不一致时结果为1,两个操作数一致时结果为0,这种运算也是按位进行,共有如下6条指令,其助记符为XRL。 逻辑“异或”指令常用来对字节中某些位进行取反操作,欲某位取反则该位与“1”相异或;欲保留某位则该位与“0”相异或。还可利用异或指令对某单元自身异或,以实现清零操作。 以上逻辑“与”、“或”、 “异或”各6条指令有如下共同的特点: (1) 逻辑“与”ANL、“或”ORL、“异或”XRL运算指令除逻辑操作功能不同外,三者的寻址方式相同,指令字节数相同,机器周期数相同。 (2) ANL、ORL、XRL的前两条指令的目的操作数均为直接地址方式,可很方便地对内部RAM的00H~FFH任一单元或特殊功能寄存器的指定位进行清零、置位、取反、保持等逻辑操作。 (3) ANL、 ORL、 XRL的后4条指令, 其逻辑运算的目的操作数均在累加器A中, 且逻辑运算结果保存在A中。 CLR A ; (A) ← 00H, E4 CPL A ; (A) ←(A ) , F4 第1条是对累加器A清零指令, 第2条是把累加器A的内容取反后再送入A中保存的对A求反指令, 它们均为单字节指令。若用其它方法达到清零或取反的目的, 则至少需用双字节指令。 例 1:双字节数求补码。 解:对于一个 16 位数, R3 存高 8 位,R2 存低 8 位,求补结果仍存R3、 R2。求补的参考程序如下: 循环左移 RL A ; (A n+1) ← (An) , (A0) ← (A7) ,23 带进位位循环左移 RLC A ; (A n+1) ← (An ), (CY) ← (A7 ), (A0 ) ← (CY) ,33 循环右移 RR A ; (An) ← (A n+1 ), (A7 ) ← (A0) , 03 带进位位循环右移 RRC A ; (An) ← (A n+1), (CY) ← (A0), (A7) ← (CY),13 另外,值得一提的是在前述数据传送类指令中有一条累加器A的内容半字节交换指令: SWAP A ; (A)7~4 (A)3~0, C4 它实际上相当于执行循环左移指令 4 次。该指令在BCD码的变换中是很有用的,如 3.3.2 节的例 4。 例如: 设(A)=43H, (CY)=0, 则 执行指令: RL A ; RLC A ; RR A ; RRC A ; 结果为: (A)=86H, (CY)=0 (A)=0CH, (CY)=1 (A)=06
显示全部
相似文档