第3章McS-51单片机指令系统 31MCS51指令系统概述 32寻址方式 33分类指令 MCS51单片机指令系统有如下特点: (1)指令执行时间快 (2)指令短,约有一半的指令为单字节指令。 (3)用一条指令即可实现2个一字节的相乘或相除。 (4)具有丰富的位操作指令。 (5)可直接用传送指令实现端口的输入输出操作。 31MCS51指令系统的概述 311指令分类 312指令格式 313指令描述符号介绍 311指令分类 按指令功能,MCS-5指令系统分为数据传递与交换、算术运算、逻 辑运算、程序转移、布尔处理操作、CPU控制等6类。 布尔处理操作类指令又称位操作指令 312指令格式 在MCS-51指令中,一般指令主要由操作码、操作数组成 指令应具有以下功能: (1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、 减法等。 (2)操作数指明操作的数本身或者是操作数所在的地址。 (3)指定操作结果存放的地址 313指令描述符号介绍 Rn当前选中的寄存器区中的8个工作寄存器R0~R7(n=0~7)。 Ri当前选中的寄存器区中的个工作寄存器R0、R1(i=0,1)。 direct8位的内部数据存储器单元中的地址。 #data—包含在指令中的8位常数。 #data16包含在指令中的16位常数。 adr16—16位目的地址。 addre-1位目的地址
第3章 MCS-51单片机指令系统 3.1 MCS-51指令系统概述 3.2 寻址方式 3.3 分类指令 MCS-51单片机指令系统有如下特点: (1)指令执行时间快。 (2)指令短,约有一半的指令为单字节指令。 (3)用一条指令即可实现2个一字节的相乘或相除。 (4)具有丰富的位操作指令。 (5)可直接用传送指令实现端口的输入输出操作。 3.1 MCS-51指令系统的概述 3.1.1 指令分类 3.1.2 指令格式 3.1.3 指令描述符号介绍 3.1.1 指令分类 • 按指令功能,MCS-51指令系统分为数据传递与交换、算术运算、逻 辑运算、程序转移、布尔处理操作、CPU控制等6类。 • 布尔处理操作类指令又称位操作指令。 3.1.2 指令格式 • 在MCS-51指令中,一般指令主要由操作码、操作数组成。 • 指令应具有以下功能: (1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、 减法等。 (2)操作数指明操作的数本身或者是操作数所在的地址。 (3)指定操作结果存放的地址。 3.1.3 指令描述符号介绍 Rn——当前选中的寄存器区中的8个工作寄存器R0~R7(n=0~7)。 Ri——当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。 direct—8位的内部数据存储器单元中的地址。 #data——包含在指令中的8位常数。 #data16——包含在指令中的16位常数。 addr16——16位目的地址。 addr11——11位目的地址
re1—8位带符号的偏移字节,简称偏移量。 DPTR数据指针,可用作16位地址寄存器。 bit内部RAM或专用寄存器中的直接寻址位。 A—累加器。 B专用寄存器,用于乘法和除法指令中。 C—进位标志或进位位,或布尔处理机中的累加器。 —间址寄存器或基址寄存器的前缀,如aRi, aDPTR。 /—位操作数的前缀,表示对该位操作数取反,如/bit —片内RAM的直接地址或寄存器 (×)—由×寻址的单元中的内容。 -箭头左边的内容被箭头右边的内容所代替。 32寻址方式 321立即寻址 322直接寻址 323寄存器寻址 324寄存器间接寻址 325变址寻址 326相对寻址 327位寻址 321立即寻址 ·指令中跟在操作码以后的第一个字节就是实际的操作数。操作数前面 加有#号 例如:MoVA,#70H ;A←#7OH Mov DPTR, #1600H DPTR+#1600H mov 30H, #40H ;3OH单元←#40H 322直接寻址 ·指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间 有SFR寄存器和内部数据RAM 例如: MOV PSW,#2OH;PSW←#20H,PSW为直接寻址寄存器 的符号地址。 MoVA,30H;A←3H内部RAM单元中的内容,30H为直接给
rel——8位带符号的偏移字节,简称偏移量。 DPTR——数据指针,可用作16位地址寄存器。 bit——内部RAM或专用寄存器中的直接寻址位。 A——累加器。 B——专用寄存器,用于乘法和除法指令中。 C——进位标志或进位位,或布尔处理机中的累加器。 @——间址寄存器或基址寄存器的前缀,如@Ri,@DPTR。 / ——位操作数的前缀,表示对该位操作数取反,如/bit。 ×——片内RAM的直接地址或寄存器。 (×)——由×寻址的单元中的内容。 ——箭头左边的内容被箭头右边的内容所代替。 3.2 寻址方式 3.2.1 立即寻址 3.2.2 直接寻址 3.2.3 寄存器寻址 3.2.4 寄存器间接寻址 3.2.5 变址寻址 3.2.6 相对寻址 3.2.7 位寻址 3.2.1 立即寻址 • 指令中跟在操作码以后的第一个字节就是实际的操作数。操作数前面 加有#号。 例如:MOV A,#70H ;A←#70H MOV DPTR,#1600H ;DPTR←#1600H MOV 30H,#40H ;30H单元←#40H 3.2.2 直接寻址 • 指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间 有SFR寄存器和内部数据RAM。 例如:MOV PSW,# 20H ;PSW←#20H, PSW为直接寻址寄存器 的符号地址。 MOV A,30H ;A←30H内部RAM单元中的内容,30H为直接给
出的内部RAM的地址。 ANL 70H, #48H 把RAM中70H单元内容同48H相“与”结果〉70H单元中 323寄存器寻址 以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B、 DPTR以及R0~R7。 例如:CLRA;A←0 INC DPTR DPTR←DPTR+1 ADD R5, #20H R5+#20H+R5 324寄存器间接寻址 以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接 寻址的存储器空间包括内部数据RAM和外部数据RAM 能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、 R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。 例如: MOV R0,A;内部RAM(R←A其指令操作过程示意 图如图所示 又如:MOXA,aR1;A←外部RAM(P2R)其指令操作过程示 意图如图所示。 再如: MOVX DPTR,A;外部 RAMOPTR)←A 其指令操作过程示意图如图所示。 325变址寻址 变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读 的,因此变址寻址只有读操作而无写操作,在指令符号上采用MOⅤC 的形式(如图所示)。 例如:MOCA,aA+DPTR;A←(A+DPIR) 又如, MOVC A,@A+PC ;A←(A+PC) 这条指令与上条指令不同的是,基址寄存器是PC 326相对寻址 ·以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数 (偏移量)形成新的PC值的寻址方式
出的内部RAM的地址。 ANL 70H ,#48H 把RAM中70H单元内容同48H相“与”结果—〉70H单元中 3.2.3 寄存器寻址 • 以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B 、 DPTR以及R0~R7 。 例如:CLR A ;A←0 INC DPTR ;DPTR←DPTR+1 ADD R5,# 20H ;R5←#20H+R5 3.2.4 寄存器间接寻址 • 以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接 寻址的存储器空间包括内部数据RAM和外部数据RAM。 • 能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、 R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。 例如:MOV @R0,A ;内部RAM(R0)←A其指令操作过程示意 图如图所示。 又如:MOVX A,@R1;A←外部RAM(P2R1)其指令操作过程示 意图如图所示。 再如:MOVX @DPTR,A;外部RAM(DPTR)←A 其指令操作过程示意图如图 所示。 3.2.5 变址寻址 • 变址寻址只能对程序存储器中数据进行操作。由于程序存储器是只读 的,因此变址寻址只有读操作而无写操作,在指令符号上采用MOVC 的形式(如图所示)。 例如:MOVC A,@ A+DPTR;A←(A+DPTR) 又如,MOVC A,@ A+PC ;A←(A+PC) 这条指令与上条指令不同的是,基址寄存器是PC。 3.2.6 相对寻址 • 以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数 (偏移量)形成新的PC值的寻址方式
相对寻址用于修改PC值,主要用于实现程序的分支转移。 例如,SJMP08H ;PC←PC+2+08H 指令操作示意图如图所示 327位寻址 位寻址只能对有位地址的单元作位寻址操作。 ·位寻址其实是一种直接寻址方式,不过其地址是位地址。 例如:SETB10H ;将10H位置1若22H单元中存放着数 据40H,2H单元的D位的位地址为10H,执行上述指令后(22H) 4IH。 又如:MO32H,C;32H←进位位C ORLC,32H;C←CV32H 33分类指令 331数据传送类指令 332算术运算类指令 ·3.3.3逻辑运算与循环类指令 334程序转移类指令 335调用子程序及返回指令 3.3.6位操作指令 337空操作指令 33.1数据传送类指令 数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后 源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的 助记符有MOV、MOwX、MOVC、XCH、XCHD、SWAP、PUSH PoP8种。 源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方 式寻址,目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻 址方式。MCS51单片机片内数据传送途径如图所示。 1.以A为目的操作数 MovA,Rn;A←Rn MOV direct;A←( direct) MOV aRi;A←(Ri) MvA,#data;A←井data
• 相对寻址用于修改PC值,主要用于实现程序的分支转移。 例如,SJMP 08H ;PC←PC+2+08H 指令操作示意图如图 所示。 3.2.7 位寻址 • 位寻址只能对有位地址的单元作位寻址操作。 • 位寻址其实是一种直接寻址方式,不过其地址是位地址。 例如:SETB 10H ;将10H位置1若22H单元中存放着数 据40H,22H单元的D0位的位地址为10H,执行上述指令后(22H) =41H。 又如:MOV 32H,C ;32H←进位位C ORL C ,32H ;C←C∨32H 3.3 分类指令 • 3.3.1 数据传送类指令 • 3.3.2 算术运算类指令 • 3.3.3 逻辑运算与循环类指令 • 3.3.4 程序转移类指令 • 3.3.5 调用子程序及返回指令 • 3.3.6 位操作指令 • 3.3.7 空操作指令 3.3.1 数据传送类指令 • 数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后, 源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的 助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、 POP8种。 • 源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方 式寻址,目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻 址方式。MCS-51单片机片内数据传送途径如图所示。 1.以A为目的操作数 MOV A,Rn ;A← Rn MOV A,direct;A←(direct) MOV A,@Ri ;A←(Ri) MOV A,#data;A← #data
2.以Rn为目的操作数 MOV RI, a Rn MOV Rn, direct: Rn +(direct) MOV Rn,#data;Rn←井data 3.以直接地址为目的操作数 MOV @Ri,A (Ri) MOⅤaRi, direct;(Ri)←( direct) MOⅤaRi,#data;(Ri)←#data 4.以间接地址为目的操作数 MOV @ Ri,A (Ri) A MOⅤaRi, direct;(Ri)←( direct MOV Ri, #data (RD #data 例如:设(30H)=6FH,R1=40H,执行 MOV OR1,30H后,30单元 中数据取出送入R间接寻址的40H单元,(40H)=6FH。 5.以DPTR为目的操作数 MOV DPTR, #data16: DPtR #data16 例如执行MOⅤDPTR,#2000H后, (DPTR)=2000H。 6.访问外部数据RAM MOVX A,@DPTR; A+(DPTR) MOⅤ X DPTR,A;(DPTR)←A MOXA,aRi;A←(P2Ri) MOⅤXaRi,A;(P2Ri)←A 7.读程序存储器 MOVc A, @A+DPTR A+ (A+DPTR) MOVc A,A+PC A←(A+PC) 例如已知A=30H,DPTR=3000H, 程序存储器单元(3030H)=50H,执行 MOVCA,@ A+DPTR后,A=50H 8.数据交换 字节交换 XCH A, Rn ARn XCH A, direct: A(direct)
2.以Rn为目的操作数 MOV Rn,A ;Rn ← A MOV Rn,direct ;Rn ←(direct) MOV Rn,#data ;Rn ← #data 3.以直接地址为目的操作数 MOV @Ri,A ;(Ri) ← A MOV @Ri,direct ;(Ri) ←(direct) MOV @Ri,#data ;(Ri) ← #data 4.以间接地址为目的操作数 MOV @Ri,A ;(Ri) ← A MOV @Ri,direct ;(Ri) ←(direct) MOV @Ri,#data ;(Ri) ← #data 例如:设(30H)=6FH,R1=40H,执行MOV @R1,30H后,30H单元 中数据取出送入R1间接寻址的40H单元,(40H)=6FH。 5.以DPTR为目的操作数 MOV DPTR,#data16 ;DPTR ← #data16 例如执行 MOV DPTR,#2000H 后, (DPTR)= 2000H。 6.访问外部数据RAM MOVX A,@DPTR ;A ← (DPTR) MOVX @DPTR,A ;(DPTR) ← A MOVX A,@Ri ;A ← (P2Ri) MOVX @Ri,A ;(P2Ri)← A 7.读程序存储器 MOVC A,@A+DPTR ;A ← (A+DPTR) MOVC A,@A+PC ;A ← (A+PC) 例如已知A=30H,DPTR=3000H, 程序存储器单元(3030H)=50H,执行MOVC A,@ A+DPTR后,A=50H。 8.数据交换 ⚫ 字节交换 XCH A,Rn ;A Rn XCH A ,direct ;A(direct)
XCH A, @Ri: A(Ri) 半字节交换 XCHD A,@Ri; A0-3(Ri)0-3 SWAP Ai A0-3Ag-7 9.堆栈操作 所谓堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用 存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条 专用指令 PuSH direct;SP←(SP+1),(SP)←( direct) POP direct;( direct)←(SP),SP←SP-1 PUSH是进栈(或称为压入操作)指令。指令执行过程如图所示。 【例3】将片内RAM30H单元与40H单元中的内容互换 方法1(直接地址传送法): MOV 31H, 30H MOV 30H,40H MOV 40H, 31H SJMP S 方法2(间接地址传送法) MOV R0,#40H MOV RI, #30H MOv A, aRO MOV B, ORI MOV CaRl, A MOV aRO, B 方法3(字节交换传送法): MOV A, 30H XCH A,40H MOV 30H,A SJMP S 方法4(堆栈传送法): PUSH 30H PUSH 40H POP 30H POP 40H SMP S 332算术运算类指令
XCH A,@Ri ;A(Ri) ⚫ 半字节交换 XCHD A,@Ri;A0~3(Ri)0~3 SWAP A ;A0~3A4~7 9.堆栈操作 • 所谓堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用 存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条 专用指令: PUSH direct;SP←(SP+1),(SP)←(direct) POP direct ;(direct)←(SP),SP ← SP-1 • PUSH是进栈(或称为压入操作)指令。指令执行过程如图所示。 【例3.1】 将片内RAM 30H单元与40H单元中的内容互换。 方法1(直接地址传送法): MOV 31H,30H MOV 30H,40H MOV 40H,31H SJMP $ 方法2(间接地址传送法): MOV R0,#40H MOV R1,#30H MOV A,@R0 MOV B,@R1 MOV @R1,A MOV @R0,B SJMP $ 方法3(字节交换传送法): MOV A,30H XCH A,40H MOV 30H,A SJMP $ 方法4(堆栈传送法): PUSH 30H PUSH 40H POP 30H POP 40H SJMP $ 3.3.2 算术运算类指令
1.加法指令 ADd A, Rn A←A+Rn ADD A, direct: A+A+(direct) ADDA,aRi;A←A+(Ri) ADD A, #data: A+A+#data 2.带进位加指令 ADDC A,Rn;A←A+Rn+C ADDC A, direct A+A+(direct)+C ADDC A, Ri; A+A+(ri)+O ADDC A, #data A+A+#data +C C为来自PSW状态寄存器中的进位位C。 例如,设A=20H,R0=21H,C=1,执行指令 ADDC A,R0后,A=42H 3.带借位减指令 SUBB A,Rn;A←A-Rn-C SUBB A, direct A+A-(direct)-C SUbB A, @Ri; A+A-(Ri)-C SUbB A, #data A+A-#data-C 例如,设A=39H,R0=20H,(20H)=32H,C=1,执行指令 SUBBA, aR0后,A=06H 4.乘法指令 MUL AB ;BA←A×B A和B中各存放一个8位无符号数,指令执行后,16位乘积的高8位在B 中,低8位存A中。 例如,A=30H,B=60H,执行 MULAB后,A=00H,B=12H 5.除法指令 DVAB;A÷B→商在A中,余数在B中 A和B中各存放一个8位无符号数,A放被除数,B放除数。指令执 行后,A中存放商,B中存入余数。若B=00H,则指令执行后OV=1 A与B不变。 例如,A=30H,B=07H,执行 DIV AB后,A=06H,B=06H
1.加法指令 ADD A,Rn ;A← A + Rn ADD A,direct ;A← A +(direct) ADD A,@Ri ;A← A +(Ri) ADD A,#data ;A← A + #data 2.带进位加指令 ADDC A,Rn ;A← A + Rn + C ADDC A,direct ;A← A +(direct)+ C ADDC A,@Ri;A← A +(Ri)+ C ADDC A,#data ;A← A + #data + C C为来自PSW状态寄存器中的进位位C。 例如,设A=20H,R0=21H,C=1,执行指令 ADDC A,R0后,A=42H。 3.带借位减指令 SUBB A,Rn ;A← A - Rn - C SUBB A,direct ;A← A -(direct)-C SUBB A,@Ri ;A← A -(Ri)-C SUBB A,#data ;A← A - #data – C 例如,设A=39H,R0=20H,(20H)=32H,C=1,执行指令 SUBBA, @R0后,A=06H。 4.乘法指令 MUL AB ;BA← A×B • A和B中各存放一个8位无符号数,指令执行后,16位乘积的高8位在B 中,低8位存A中。 例如,A=30H,B=60H,执行 MUL AB 后,A=00H,B=12H。 5.除法指令 DIV AB ;A÷B→商在A中,余数在B中 A和B中各存放一个8位无符号数,A放被除数,B放除数。指令执 行后,A中存放商,B中存入余数。若B=00H,则指令执行后OV=1, A与B不变。 例如,A=30H,B=07H,执行 DIV AB 后,A=06H,B=06H
6.加1指令 INCA;A←A+1 INC Rn;Rn←Rn+1 inc direct (direct)+( direct)+1 INC @Ri;(Ri)←(Ri)+1 INC DPTR;DPTR←DPTR+1 例如,(30H)=22H,执行INC30H后,(30H)=23H。 7.减1指令 DECA;A←A-1 DEC Rn;Rn←Rn-1 dec direct direct+(direct) DEC @Ri;(Ri)←(Ri)-1 例如,R0=30H,(30H)=22H,执行 DEC R0后,(30H)=21H 8.十进制调整指令 DAA;把A中按二进制相加的结果调整成按BCD码相加的结果 例如,A=65BCD,B=78BCD,C=0,执行下列语句 ADDA, B DA A 后,A=43BCD,C=1。 【例32】试把存放在R1R和R3R4中的两个16位数相加,结果存于 R5R6中。 解:参考程序如下: MOV ,R2;取第一个数的低8位 ADd A, R4 两数的低8位相加 MOV R6, A 保存和的低8位 MOV A, RI 取第一个数的高8位 ADDC A,R3;两数的高8位相加,并把低8位相加时的进位 位加进来 MOVR5,A;把相加的高8位存入R5寄存器中
6.加1指令 INC A ;A← A + 1 INC Rn ;Rn← Rn + 1 INC direct ;(direct)← (direct)+ 1 INC @Ri ;(Ri)←(Ri)+ 1 INC DPTR ;DPTR← DPTR + 1 例如,(30H)=22H,执行 INC 30H 后,(30H)=23H。 7.减1指令 DEC A ;A← A - 1 DEC Rn ;Rn← Rn - 1 DEC direct ;direct← (direct)- 1 DEC @Ri;(Ri)←(Ri)- 1 例如,R0=30H,(30H)=22H,执行 DEC @R0 后,(30H)=21H。 8.十进制调整指令 DA A ;把A中按二进制相加的结果调整成按BCD码相加的结果 例如,A=65BCD,B=78BCD,C=0,执行下列语句 ADD A,B DA A 后,A=43BCD,C=1。 【例3.2】 试把存放在R1R2和R3R4中的两个16位数相加,结果存于 R5R6中。 解:参考程序如下: MOV A,R2 ;取第一个数的低8位 ADD A,R4 ;两数的低8位相加 MOV R6,A ;保存和的低8位 MOV A,R1 ;取第一个数的高8位 ADDC A,R3 ;两数的高8位相加,并把低8位相加时的进位 位加进来 MOV R5,A ;把相加的高8位存入R5寄存器中
SJMP S 333逻辑运算与循环类指令 1.“与”操作指令 2.“或”操作指令 3.“异”操作指令 4.求反与清除指令 5.循环指令 334程序转移类指令 1.无条件转移指令 ●绝对(短)转移指令 AJMP addrll ;PC10~0← addrll 长转移指令 L MP addr16 PC ddre ●短(相对)转移指令 SMP rel;PC←PC+2+rel 间接转移指令 JMP A+DPTR PC + A+ DPTR 条件转移指令 ●累加器为零(非零)转移指令 减1非零转移指令 两数不等转移指令 ●相对偏移量re的求法 335调用子程序及返回指令 1.调用子程序指令 LCALL addrl6 ;PC←PC+3,SP←SP+1,(SP)←PC~-10 ;SP←SP+1,(SP)←PC15~8, PC←addr16 ACALL addrll ;PC←PC+2,SP←SP+1,(SP)←PC~0 ;SP←SP+1,(SP)←PC15~8,PC10-addr1l
SJMP $ 3.3.3 逻辑运算与循环类指令 1.“与”操作指令 2.“或”操作指令 3.“异或”操作指令 4.求反与清除指令 5.循环指令 3.3.4 程序转移类指令 1.无条件转移指令 ⚫ 绝对(短)转移指令 AJMP addr11 ;PC10~0 ← addr11 ⚫ 长转移指令 LJMP addr16 ;PC ← addr16 ⚫ 短(相对)转移指令 SJMP rel ;PC ← PC + 2 + rel ⚫ 间接转移指令 JMP @A+DPTR ;PC ← A + DPTR 2.条件转移指令 ⚫ 累加器为零(非零)转移指令 ⚫ 减1非零转移指令 ⚫ 两数不等转移指令 ⚫ 相对偏移量rel的求法 3.3.5 调用子程序及返回指令 1.调用子程序指令 LCALL addr16 ;PC←PC+3,SP←SP+1,(SP)←PC7~10 ;SP←SP+1,(SP)←PC15~8, PC←addr16 ACALL addr11 ;PC ←PC+2,SP←SP+1,(SP)←PC7~0 ;SP ← SP+1,(SP)← PC15~8,PC10~0←addr11
2.返回指令 RET ;PC15~8←(SP),SP←SP-1 (SP),SP←SP-1 RETI;PC1s~8←(SP),SP←SP-1 ;PC7~0←(SP),SP←SP1 336位操作指令 1.位数据传送指令 MovC,bit;C←(bit MOV bit,C;bit←C 2.位状态修改指令 CLR C ;C←0 clr bit (bit←0 CPL C CP bit (bit←(bit SETB C SeTB bit 3.位逻辑运算指令 ANLC,bit;C←C∧(bi) ANLC,/bit;C←C∧(bit ORLC,bit;C←C(bi) ORLC,/bit;C←CV(bit) 4.位转移指令 JC rel;若C=1, 则转移(PC←PC+2rel);否则程序顺序执行 JNC rel 若C=0, 则转移(PC←PC+2rel);否则程序顺序执 db bit, rel 若(bi)=1, 则转移(PC←PC+3rel);否则程序顺序执行 jnb bit.,rel;若(bit)=0 则转移(PC←PC+3rel);否则程序顺序执行
2.返回指令 RET ;PC15~8← (SP),SP←SP-1 ;PC7~0← (SP),SP←SP-1 RETI ;PC15~8←(SP),SP←SP-1 ;PC7~0 ←(SP),SP←SP-1 3.3.6 位操作指令 1.位数据传送指令 MOV C,bit;C←(bit) MOV bit,C;bit←C 2.位状态修改指令 CLR C ;C←0 CLR bit ;(bit)←0 CPL C ;C← CPL bit ;(bit)←(bit) SETB C ;C←1 SETB bit ;(bit)←1 3.位逻辑运算指令 ANL C,bit ;C←C∧(bit) ANL C,/bit ;C←C∧(bit) ORL C,bit ;C←C∨(bit) ORL C,/bit ;C←C∨(bit) 4.位转移指令 JC rel ; 若C=1, 则转移(PC←PC+2+rel);否则程序顺序执行 JNC rel ; 若C=0, 则转移(PC←PC+2+rel);否则程序顺序执 JB bit,rel ; 若(bit)=1, 则转移(PC←PC+3+rel);否则程序顺序执行 JNB bit,rel ; 若(bit)=0, 则转移(PC←PC+3+rel);否则程序顺序执行