指令系统逻辑操作指令 ■逻辑操作指令: 10101010 (A)=0AAH(C)=1 10101010 CLRA:清零 10101010 00111000 CPLA:求反 10010010 ANDA,#38H:相与 ORA,#38H:相或 XRLA,#38H:相异或 RLA:循环左移 →01010101 RRLA:循环右移 Aha pe pa p o 01010101 RRCA:带进位右移 1101010f6 RLCA:带进位左移 0101010 01101010
指令系统-逻辑操作指令 ◼ 逻辑操作指令: (A)=0AAH (C)=1 CLR A:清零 CPL A:求反 AND A,#38H:相与 OR A,#38H :相或 XRL A,#38H :相异或 RL A:循环左移 RRL A:循环右移 RRC A:带进位右移 RLC A:带进位左移 10101010 01010101 00111000 00101000 10101010 00111000 10111010 10101010 00111000 10010010 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 C 1 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 C 0
指令系统-数据传送指令 堆栈操作指令A 88 USH A 进栈PUSH 88H Y SP 08H 88H 出栈POP SP 07H XX O7H XX 1 POP B ■字节交换指令 B 88H XCH A, Rn SP O7H XX ■半字节交换指令 A 56H A58H SWAP A (A)=35H-(A)=53H RO 20H)RO 20H XCHD A, ORi 20H 78H 20H 76H
指令系统-数据传送指令 ◼ 堆栈操作指令 进栈PUSH ◼半字节交换指令 SWAP A (A)=35H →(A)=53H ◼字节交换指令 XCH A,Rn 出栈POP SP 07H XX B 88H SP 08H 07H XX A 88H 88H PUSH A POP B SP 07H XX A 88H XCHD A,@Ri A R0 20H 56H 20H 78H A R0 20H 58H 20H 76H
指令系统-位操作指令指令 位操作指令只限于可位寻址的位(位地址记为 bt),它的累加器是PSW7(CY),记为C 位置位指令 clr bit、CLRC、 setb bit、 SETB O 位控制转移指令 b bit rel、 jnb bit,rel、 JC, rel、JNc,rel ■位传送指令 MO∨C,bit、 Mov bit,C ■位运算指令(ANL、ORL、CPL) ANL C, bit 注意:位运算必须通过C进行计 ANLC,\bit(注意bt内的值并不变化)算,且运算结果在C中。 例:(C)=1,(20H)=1,ANLC,\20H后,(C)=0,(20H)=1
指令系统-位操作指令指令 ◼ 位操作指令只限于可位寻址的位(位地址记为 bit),它的累加器是PSW.7(CY),记为C。 ◼ 位置位指令 CLR bit、CLR C、SETB bit、SETB C ◼ 位控制转移指令 JB bit,rel、 JNB bit,rel、 JC,rel、 JNC,rel ◼ 位传送指令 MOV C,bit、 MOV bit ,C ◼ 位运算指令(ANL、ORL、CPL) ANL C,bit ANL C,\bit(注意bit内的值并不变化) 例:(C)=1,(20H)=1, ANL C,\20H后, (C)=0,(20H)=1 注意:位运算必须通过C进行计 算,且运算结果在C中
并字程序 (20H)=95H(21H)=78H合并为98H存入22H) ORG OOOOH MOVA,20H;(20H)→A 屏蔽20H的低字节ANLA,#0FOH;屏蔽高四位→A (与FOH相与) MOVB,A;暂存B MO∨A,21H;(21H)→A 屏蔽21H的高字节 ANLA,#OFH;屏蔽低四位→A (与0FH相与) ORLA,B;两数相或→A MOV22H,A;(A)→22H 两字节的内容合并 (相或)存入22H MSC51 2.ASM
并字程序 ◼ ((20H)=95H,(21H)=78H,合并为98H存入22H) 屏蔽21H的高字节 (与0FH相与) 两字节的内容合并 (相或)存入22H 屏蔽20H的低字节 (与F0H相与) ORG 0000H MOV A,20H;(20H)→A ANL A,#0F0H;屏蔽高四位→A MOV B,A;暂存B MOV A,21H ;(21H)→A ANL A,#0FH ;屏蔽低四位→A ORL A,B;两数相或→A MOV 22H,A ;(A)→22H MSC51 2_2.ASM
拆字程序 ■(20H)=95H,拆为09H、05H存入21H,22H。95为压缩BCD码, 09、05称单字节BCD码。这个程序以后经常使用。 将20H压入堆栈 ORG OOOOH PUSH 20H 20H的内容入堆栈 交换20H高低字节 MOVA,20H;(20H)→A SWAP A ;A的高低字节对换 屏蔽高字节 ANLA,#0FH;屏蔽高四位→A 并存入21H MO∨21H,A;(A)→21H POPA;栈顶的内容出栈→A 出栈给A ANLA,#0FH;屏蔽低四位→A MOV22H,A;(A)→22H 「屏蔽高字节1 MSC51 并存入22H 返回 23.ASM
拆字程序 ◼ (20H)=95H,拆为09H、05H存入21H, 22H。95为压缩BCD码, 09、05称单字节BCD码。这个程序以后经常使用。 ORG 0000H PUSH 20H ;20H的内容入堆栈 MOV A,20H ;(20H)→A SWAP A ;A的高低字节对换 ANL A,#0FH;屏蔽高四位→A MOV 21H,A ;(A)→21H POP A ;栈顶的内容出栈→A ANL A,#0FH ;屏蔽低四位→A MOV 22H,A;(A)→22H 屏蔽高字节 并存入21H 屏蔽高字节 并存入22H 将20H压入堆栈 交换20H高低字节 出栈给A MSC51 返回 2_3.ASM