
第3章MCS-51单片机指令系统 本章要点 ·80C51指令的基本格式 ·80C51指令功能分类 ·指令系统中的常用符号 ·80C51指令系统的七种寻址方式 ·数据传送类指令 ·算术运算类指令 ·逻辑运算及移位指令 ·位操作类指令 ·控制转移类指令 ·汇编语言组成与格式 83w1 指今系统概述 3.1.1指令基本格式 标号:操作码操作数:注释 标号:指令的符号地址 ·用于一段功能程序的识别标记或控制转移地址。 ·指令前的标号代表该指令的地址,是用符号表示的地址。 ·一般用英文字母和数字组成。 ·标号必须用冒号“:”与操作码分隔。 操作码:表示指令的操作功能。 ·操作码用助记符表示,它代表了指令的操作功能。 ·操作码是指令的必需部分,是指令的核心,不可缺少。 操作数:参加操作的数据或数据地址。 ·操作数可以是数据,数据的地址、数据地址的地址或操作数的其他信息, ·操作数可分为目的操作数和源操作数 ·操作数可用二进制数、十进制数或十六进制数表示。 ·操作数的个数可以是0一3个。 ·操作数与操作码用空格分隔。操作数之间用逗号“,”分隔。 注释:指令功能说明。注释必须以“;”开始。 3.1.2寻址方式 子址就是寻找操作数的地址
第 3 章 MCS-51 单片机指令系统 本章要点 ·80C51 指令的基本格式 ·80C51 指令功能分类 ·指令系统中的常用符号 ·80C51 指令系统的七种寻址方式 ·数据传送类指令 ·算术运算类指令 ·逻辑运算及移位指令 ·位操作类指令 ·控制转移类指令 ·汇编语言组成与格式 §3~1 指令系统概述 3.1.1 指令基本格式 标号:操作码 操作数;注释 标号:指令的符号地址 ·用于一段功能程序的识别标记或控制 转移地址。 ·指令前的标号代表该指令的地址,是用符号表示的地址。 ·一般用英文字母和数字组成。 ·标号必须用冒号“ :”与操作码分隔。 操作码:表示指令的操作功能。 ·操作码用助记符表示,它代表了指令的操作功能。 ·操作码是指令的必需部分,是指令的核心,不可缺少。 操作数:参加操作的数据或数据地址。 ·操作数可以是数据,数据的地址、数据地址的地址或操作数的其他信息。 ·操作数可分为目的操作数和源操作数 ·操作数可用二进制数、十进制数或十六进制 数表示。 ·操作数的个数可以是 0~3 个。 ·操作数与操作码用空格分隔,操作数之间用逗号“,”分隔。 注释:指令功能说明。注释必须以“;”开始。 3.1.2 寻址方式 寻址就是寻找操作数的地址

1.立即寻址 立即寻址是直接给出操作数,操作数前有立即数符“#”, 例如:M0WA,#30阳1A+#30I 功能是把操作码后面的立即数3州送入A中,执行过程如图。 例如:W0 V DPTR,#8000H:DFTR-#8000明 功能是把立即数8000阳的高8位送入DP阳,低8位送入DPL。 C 93用 操作码 PC 74H 提作写 PC+1 PC+l- 30H ℃+2 03H 2.直接寻址 操作码后面的一个字节是实际操作数地址,这种直接在指令中给出操作数真实地址的方式 称为直接寻址。 寻址空间: 一一内部RAW的低128字节: 一一特殊功能寄存器SR(直接寻址是访问SFR的唯一方式): 例如:M0WA,301;A-(30H) 30阳是内部RW地址,功能是把30阳单元内容读入A中。如图 内部 RAM PC ESH 授作码 30 PC+1 操作数地址 例如:ANL30,#30阳 ;30明-(30DA共30明 操作码后面第一个30附是操作数地址,第二个30州是参加“与”运算的立即数,“与”的 结果存入30I单元中,执行过程如图 内果 30E 5 操作同 C+1 30H 直接地址 PC+2 30 立即数 结是 3寄存器寻址 寻址空间: --R0R7 一一A、B、CY(位),DPTR 指令远定寄存器内客就是操作数,即操作数在指定的寄存器中
⒈ 立即寻址 立即寻址是直接给出操作数,操作数前有立即数符“ # ”。 例如:MOV A,#30H ;A←#30H 功能是把操作码后面的立即数 30H 送入 A 中,执行过程如图。 例如:MOV DPTR,#8000H ;DPTR←#8000H 功能是把立即数#8000H 的高 8 位送入 DPH,低 8 位送入 DPL。 74H 30H 操作码 PC+1 PC A 80H 00H 操作码 PC+2 PC+1 PC 90H DPH DPL ⒉ 直接寻址 操作码后面的一个字节是实际操作数地址。这种直接在指令中给出操作数真实地址的方式 称为直接寻址。 寻址空间: ——内部 RAM 的低 128 字节; ——特殊功能寄存器 SFR(直接寻址是访问 SFR 的唯一方式); 例如:MOV A,30H ;A←(30H) 30H 是内部 RAM 地址,功能是把 30H 单元内容读入 A 中。如图 30H 操作码 PC+1 PC E5H 操作数地址 30H 内部 RAM A 例如:ANL 30H,#30H ;30H←(30H)∧#30H 操作码后面第一个 30H 是操作数地址,第二个 30H 是参加“与”运算的立即数,“与”的 结果存入 30H 单元中,执行过程如图 30H 30H 操作码 PC+2 PC+1 PC 53H 直接地址 “与” 立即数 内部RAM ALU 30H 结果 3 寄存器寻址 寻址空间: ——R0~R7 ——A、B、CY(位),DPTR 指令选定寄存器内容就是操作数, 即操作数在指定的寄存器中

规定的寄存器有:工作寄存器O一7、累加器A、双字节AB 数据指针DPTR、位累加器Cy 例如:OVA,R,:A+(R3) 4寄存器间接子址 指令中的寄存器内容是实际操作数地址(而不是操作数)。 子址空间: 一一内部RAW低128B(R0,R1,SP) 一一外部数据存贮器(eRO,R1,DPTR) 例如:MOV eRO,.A 设:(0)=30H,把A的内容写入内RAM的30单元中. 内留 RAM AX X 操作马 PC+1- 030 30 例如:MOVX A,DPTR 设(DPTR)=2000州,当执行指令时,外部数据存贮器2000明单元的内容读入累加器A中, 如图所示。 外部 PC E阳 提作码 RAM #2000用 +1 AX X 5.变址寻址 它以DPTR或P℃作基址寄存器,A作变址寄存器(存放8位无符号数),两者相加形成操 作数地址。操作数地址■基址十变址。用于读出M中数据表格的常数。 寻址空间: 一一程序存贮器(RA+PTR,A十PC) 例如:MOVC A,A+DPTR 设:(A)=0F (DPTR)=2400阳 这是查表指令,先(A)+(DPT)=240FH,后将240F阳内容阳读入A
规定的寄存器有:工作寄存器 R0~R7、累加器 A、双字节 AB 数据指针 DPTR、位累加器 Cy。 例如:MOV A,R3 ;A←(R3) 4 寄存器间接寻址 指令中的寄存器内容是实际操作数地址(而不是操作数)。 寻址空间: ——内部 RAM 低 128B(@R0,@R1,SP) ——外部数据存贮器(@R0,@R1,@DPTR) 例如:MOV @R0, A 设:(R0)=30H,把 A 的内容写入内 RAM 的 30H 单元中。 操作码 PC+1 PC F6H 30H X X 内部 RAM 30H A X X R0 例如:MOVX A,@DPTR 设(DPTR)=2000H,当执行指令时,外部数据存贮器 2000H 单元的内容读入累加器 A 中, 如图所示。 操作码 PC+1 PC E0H X X 外部 RAM A X X DPTR 2000H 5 .变址寻址 它以 DPTR 或 PC 作基址寄存器,A 作变址寄存器(存放 8 位无符号数),两者相加形成操 作数地址。操作数地址=基址+变址。用于读出 ROM 中数据表格的常数。 寻址空间: ——程序存贮器(@A+DPTR,@A+PC) 例如:MOVC A,@A+DPTR 设:(A)=0FH (DPTR)=2400H 这是查表指令,先(A)+(DPTR)=240FH,后将 240FH 内容 XXH 读入 A

操作码 DPTR PC+1- 2400m 240 XX 3.2.6相对寻址 寻址空间: 一一程序存贮器 利用指令修正P℃指针的方式实现转移。即以心的内容为基地址,加上指令中给出的偏移 量r®l,所得结果为转移目标地址。转移日的地址=当前PC值+相对偏移量rel。 注意:偏移量re1是一个8位有符号补码数,范围一128+127. 例如:JN忆rel :累加器A不等于零则转移 设rel=23H,指令操作码存放在02000明单元,并且在执行该指令后A中内容不为零, 则执行过程如图所示。 2000用 701 操作同 2001目 云H mle23 C当前值 2002H 2002H 下一条指令 2025, X X 修正后转移 目标地址(■D2图 这条指令为2字节,当取指后P℃当前值为2002阳,转移日标地址=PC)+re1=2025引单 元去执行程序,从而完成程序转移。 若己知转移目标地址为1FFCH,(PC)当前值为2002H,则: rel=1FFCH-2002H=FFFAH 取8位re1=FA相=(一6) 7.位寻址 位寻址是对内RW和特殊功能寄存器中的可寻址位进行操作的寻址方式 子址空间 —一片内RAM的20附2F用 一一SFR中12个能被8整除的字节地址
X X 操作码 240FH PC+1 PC 93H 2400H ALU DPTR 0FH A ROM 3.2.6 相对寻址 寻址空间: ——程序存贮器 利用指令修正 PC 指针的方式实现转移。即以 PC 的内容为基地址,加上指令中给出的偏移 量 rel,所得结果为转移目标地址。转移目的地址=当前 PC 值+相对偏移量 rel。 注意:偏移量 rel 是一个 8 位有符号补码数,范围-128~+127。 例如:JNZ rel ;累加器 A 不等于零则转移 设 rel=23H,指令操作码存放在 ROM2000H 单元,并且在执行该指令后 A 中内容不为零, 则执行过程如图所示。 下一条指令 X X 操作码 2025H 2002H 2001H 23H ALU rel=23H 2000H 70H 修正后转移 目标地址(PC)=2025H PC当前值 2002H 这条指令为 2 字节,当取指后 PC 当前值为 2002H,转移目标地址=(PC)+rel=2025H 单 元去执行程序,从而完成程序转移。 若已知转移目标地址为 1FFCH,(PC)当前值为 2002H,则: rel=1FFCH-2002H=FFFAH 取 8 位 rel=FAH=(-6)补 7. 位寻址 位寻址是对内 RAM 和特殊功能寄存器中的可寻址位进行操作的寻址方式 寻址空间 ——片内 RAM 的 20H~2FH ——SFR 中 12 个能被 8 整除的字节地址

例:NC,07;将位地址07H中的数据传送至进位位Cy。 3.1.3指令系统中的符号说明 R一一当前选中的寄存器区的8个工作寄存器的0`R7(n=07). Ri一一当前选中的可作地址寄存器的2个寄存器0、R1(1=01). Direct-一一8位的内部RAW单元的地址. #data一一包含在指令中的8位常数。 年data16一一包含在指令中的16位常数。 ddr16一一16位的目的地址。 ddr11一一11位的目的地址。 re1一一8位的带符号的偏移字节。 DPTR一一数据指针,可用作16位的地址寄存器。 bit一一内部M或专用寄存器中的直接寻址位。 A一一累加器 B一一专用寄存器,用于L和DIY指令中。 C—一进位标志或进位位,或布尔处理机中的累加器 。一一间址寄存器或基址寄存器的前缀,如解i、DTR。 /一一位操作数的前缓,表示对该位操作数取反,如/6it。 (X)一一X中的内容。 ((X)》一一由X寻址的单元中的内容。 ·一一箭头左边的内容被箭头右边的内容所代替。 §3~2数据传送指令(共29条) 3.2.1内RAM数据传送指令 1.以累加器A为目的的指令(4条) MOW A Rn :Rn→A,n=0~7 MOW A eRi :(Ri)→A1=0、1 WON A,direct (direct)A MO A #data data-A
例:MOV C,07H ;将位地址 07H 中的数据传送至进位位 Cy。 3.1.3 指令系统中的符号说明 Rn——当前选中的寄存器区的 8 个工作寄存器的 R0~R7(n=0~7)。 Ri——当前选中的可作地址寄存器的 2 个寄存器 R0、R1(i=0,1)。 Direct——8 位的内部 RAM 单元的地址。 #data——包含在指令中的 8 位常数。 #data16——包含在指令中的 16 位常数。 addr16——16 位的目的地址。 addr11——11 位的目的地址。 rel——8 位的带符号的偏移字节。 DPTR——数据指针,可用作 16 位的地址寄存器。 bit——内部 RAM 或专用寄存器中的直接寻址位。 A——累加器。 B——专用寄存器,用于 MUL 和 DIV 指令中。 C——进位标志或进位位,或布尔处理机中的累加器。 @——间址寄存器或基址寄存器的前缀,如 @Ri、@DPTR。 /——位操作数的前缀,表示对该位操作数取反,如/bit。 (X)——X 中的内容。 ((X))——由 X 寻址的单元中的内容。 ←——箭头左边的内容被箭头右边的内容所代替。 §3~2 数据传送指令(共 29 条) 3.2.1 内 RAM 数据传送指令 1. 以累加器 A 为目的的指令(4 条) MOV A , Rn ;Rn→A ,n=0~7 MOV A , @Ri ;(Ri)→A,i=0、1 MOV A , direct ;(direct)→A MOV A ,#data ;data→A

2.以工作寄存器R为目的字节的传送指令(3条) MOW Rn A :A→Rn,n=0-7 WO Rn direct:(direct)-Rn,n=0-7 MOW Rn #data ;data-Rn,n=0~7 3.以直接地址为目的字节的传送指令(⑤条) MOW direct,A :A-(direct) MO direct,Rn ;Rn-(direct),n=0~7 MON direct,眼i :(Ri)→(direct),i=0、l Mw directl,direct2:(direct2)-(direct1) MOW direct,#data :data-(direct) 4.以酱存器间址为日的字节的传送指令(3条) ON眼i,A :A(Ri),i=0、1 w0W眼i,direct:(direct)→(Ri),i=0、1 w0W眼i,=datn:data→(Ri),i0、1 5.以DPTR目的的数据传送指令 WOW DPTR,#datal6 datal6-DPTR 例:0NDTR,#1234 :(DPTR)=I234组 该指令也可以用两条8位数据传送指令实现: WOY DPH,#12H :(DPH)=12B WOV DPL,#34H :(DPL)=34组,(DPTR)=1234组 例设(70D=60明,(60=20阳,P1口为输入口,当前的输入状态为AAH.执行下面程序, 分析执行结果。 MOV 0,70I 170阳-0 MOY A,RO ;(70D=60相-A MOV RI.A :(R1)=60阳 MOV B.eRI ;(B)=20M MOV 8R0,P1 :A4H→70H 3.2.2外RAM数据传送指令(4条) 0WxA,Ri:(Ri)→A,i=0、1 MONX A DPTR (DPTR)-A 0 VX eRi,A:A→(Ri),i=0、1 OWX DATR,A;A→DATR) 3.2.3程序存储器数据传送指◆(2集) MONC A.A+DPTR (A+DPTR)-A
2.以工作寄存器 Rn 为目的字节的传送指令(3 条) MOV Rn ,A ;A→Rn,n=0~7 MOV Rn ,direct;(direct)→Rn,n=0~7 MOV Rn ,#data ;data→Rn,n=0~7 3.以直接地址为目的字节的传送指令(5 条) MOV direct ,A ;A→(direct) MOV direct, Rn ;Rn→(direct),n=0~7 MOV direct, @Ri ;(Ri)→(direct),i=0、1 MOV direct1, direct2;(direct2)→(direct1) MOV direct, #data ;data→(direct) 4.以寄存器间址为目的字节的传送指令(3 条) MOV @Ri, A ;A→(Ri),i=0、1 MOV @Ri, direct ;(direct)→(Ri),i=0、1 MOV @Ri, #data ;data→(Ri),i=0、1 5.以 DPTR 目的的数据传送指令 MOV DPTR, #data16 ;data16→DPTR 例:MOV DPTR, #1234H ;(DPTR)=1234H 该指令也可以用两条 8 位数据传送指令实现: MOV DPH,#12H ;(DPH)=12H MOV DPL,#34H ;(DPL)=34H,(DPTR)=1234H 例 设(70H)=60H,(60H)=20H,P1 口为输入口,当前的输入状态为 AAH。执行下面程序, 分析执行结果。 MOV R0 ,#70H ;70H→R0 MOV A , @R0 ;(70H)=60H→A MOV R1 ,A ;(R1)=60H MOV B ,@R1 ;(B)=20H MOV @R0 ,P1 ;AAH→70H 3.2.2 外 RAM 数据传送指令(4 条) MOVX A ,@Ri ;(Ri)→A,i=0、1 MOVX A ,@DPTR ;(DPTR)→A MOVX @Ri ,A ;A→(Ri),i=0、1 MOVX @DATR ,A ;A→(DATR) 3.2.3 程序存储器数据传送指令(2 条) MOVC A , @A+DPTR ;(A+DPTR)→A

ONCA,eA+PC:PC+1→PC,(A+PC)→A 三个不同的存储空间用三种不同的指令传送: 内RAM(包括特殊功能寄存器):用ON指令传送: 外RAM:用MOVX指令传送: OW:用MOWC指令传送 例:设某一系统配有4KB外部RAW,地址为2000州广2F。设计一段程序将2FF用单元内 客传送到2000阳单元。 MOY DPTR #2FFFH :设指针 MOVX A.OPTR :读2F下F用内容 MOV DFTR,#2000 MOVX eDPTR A :写入到2000组单元中 3.2.4数据交换指令(5条) 1.整字节交换指令 XCH A,Rn ;A-+Rm,n=0-7 XCHA,R图 :A-→(R1),1=0、1 XCH A.direct A+-(direct) 2.低半字节交换州令 XCHD A,服i:A3一0+→(Ri)3~0,高4位不变.1=0、1 3.累加器高低四位互换 SWAP A :A7一4-+A30 3.2.5堆找操作指令(2条) PUSH direct (SP)+1-SP,(direct)-(SP) POP direct ((SP))-direct,(SP)-1-SP 1.PLSH为入栈指令 例:P风S邻30所:(30)=2B阳,具体操作是: 1)先将SP的内容(OFH)加1,指向钱顶的一个空单元,此时SP=10H: 2)后将指令指定直接寻址单元30州中数据(2删)送到该空单元中
MOVC A , @A+PC ;PC+1→PC,(A+PC)→A 三个不同的存储空间用三种不同的指令传送: 内 RAM(包括特殊功能寄存器): 用 MOV 指令传送; 外 RAM: 用 MOVX 指令传送; ROM: 用 MOVC 指令传送。 例 :设某一系统配有 4KB 外部 RAM,地址为 2000H~2FFFH。设计一段程序将 2FFFH 单元内 容传送到 2000H 单元。 MOV DPTR ,#2FFFH ;设指针 MOVX A ,@DPTR ;读 2FFFH 内容 MOV DPTR ,#2000H ; MOVX @DPTR ,A ;写入到 2000H 单元中 3.2.4 数据交换指令(5 条) 1.整字节交换指令 XCH A ,Rn ; A←→Rn,n=0~7 XCH A ,@Ri ; A←→(Ri),i=0、1 XCH A ,direct ; A←→(direct) 2.低半字节交换指令 XCHD A ,@Ri ; A3~0←→(Ri)3~0,高 4 位不变。i=0、1 3.累加器高低四位互换 SWAP A ; A7~4←→A3~0 3.2.5 堆栈操作指令(2 条) PUSH direct ;(SP)+1→SP,(direct)→(SP) POP direct ;((SP))→direct,(SP)-1→SP 1. PUSH 为入栈指令 例:PUSH 30H ; (30H)=2BH,具体操作是: 1)先将 SP 的内容(0FH)加 1,指向栈顶的一个空单元,此时 SP=10H; 2)后将指令指定直接寻址单元 30H 中数据(2BH)送到该空单元中

檬址 址 进 1 1 2 11 桂爽 4 桂液 中 4 雪 a 国 24 DCN 2 x A w 00w 测 0 测 N E 3 0Tm桃 TM桂制 原的代梦 6】+1→塑,句酰型单元间女mct中数据班入增铁 图女2入快楼年 2POF为出栈指令 例:P0P40:(40H)=4CH,具体操作是: 1)先将SP所指单元0FH(栈项地址)中的数据(4C)弹出,送到指定的内AM单元40阳,(40州) =4CH: 2)然后SP-1SP,SP=0EH,SP仍指向栈顶地址。 18 11 11 10w 10w 10g 2+ 桂质 壁中 OF 委唐 43T 0 9 92 ODH 下 GE鞋 C 1事 OCK G G钢 0 0 0防 0说 0元 快康 0m能坚 《山零原幽休方 b)能项单元内毫+(由:et》)掌1→指向t项地址 图子3出桃操作
2. POP 为出栈指令 例:POP 40H ;(40H)=4CH,具体操作是: 1)先将 SP 所指单元 0FH(栈顶地址)中的数据(4CH)弹出,送到指定的内 RAM 单元 40H,(40H) =4CH; 2)然后 SP-1→SP,SP=0EH,SP 仍指向栈顶地址

833 算术运算类指令 3.3.1加法指令 1.不带C如法指令 ADA,m:A+Rn→A(n=0一7),有进位,Cy=1:无进位,Cy=0 AD0A,解i:A+(Ri)→A(=0、1),有进位,Cy=1:无进位,Cy=0 D0A,direct:A+(direct)一A,有进位,CyI:无进位,Cy=0 ADA,#data:A+data一A,有进位,Cy=1:无进位,Cy=0 2.带Cy加法指令 ADDC A,Rn:A+RmCy一→A(n=0-7),有进位,C=1:无进位,C=0 ADDC A,Ri:A+(Ri)+C→A(i=0、1),有进位,Cy=1:无进位,Cy=0 ADCA,direct:A+(direct).+Cy→A有进位,Cy=l:无进位,Cy=0 ADDC A #data :A+data+Cy-A 例:给出以下程序,请分析执行结果对程序状态字S清的影响。 w0NA,#53期 :(A)=53期 0NR0,=76;(R0)=7阳 ADDA,RO:A+(A)+(R0】 结果:(A)=C9H (0)=76H 对PS的影响:其中:CY=0,C=0,0W=C'7甲C6=1 进位1110110 加数01010011 披加数01110110 和数11000000 结果:CT=0,AC=0,0W=1(第6位有进位,第7位无进位) 如果为无符号数,则和为11000000,如果为补码,则结果溢出。 3.加1指令 INC A :(A)+1+A INC Rn :m*1-n,n=07 INC eRi :Ri)+1→(Ri),i=0、1 INC direet (direct)+1-(direct) INC DPTR :DPTR+I→DPTR 3.3.2减法指令 1.带借位适法指令 SBBA,Rn:A-n-Cy·A,(n=0一7),有借位,Cy=1:无借位,Cy=0
§3~3 算术运算类指令 3.3.1 加法指令 1.不带 Cy 加法指令 ADD A ,Rn ;A+Rn→A(n=0~7), 有进位,Cy=1;无进位,Cy=0 ADD A ,@Ri ;A+(Ri)→A(i=0、1), 有进位,Cy=1;无进位,Cy=0 ADD A ,direct ;A+(direct)→A, 有进位,Cy=1;无进位,Cy=0 ADD A ,#data ;A+data→A, 有进位,Cy=1;无进位,Cy=0 2.带 Cy 加法指令 ADDC A ,Rn ;A+Rn+Cy→A(n=0~7),有进位,Cy=1;无进位,Cy=0 ADDC A ,@Ri ;A+(Ri)+Cy→A(i=0、1),有进位,Cy=1;无进位,Cy=0 ADDC A ,direct ;A+(direct)+Cy→A 有进位,Cy=1;无进位,Cy=0 ADDC A ,#data ;A+data+Cy→A 例:给出以下程序,请分析执行结果对程序状态字 PSW 的影响。 MOV A ,#53H ;(A)=53H MOV R0 ,#76H ;(R0)=76H ADD A ,R0 ;A←(A)+(R0) 结果:(A)=C9H (R0)=76H 对 PSW 的影响: 其中:CY=0,AC=0,OV=C′7⊕C′6=1 进 位 1 1 1 0 1 1 0 加 数 0 1 0 1 0 0 1 1 被加数 0 1 1 1 0 1 1 0 和 数 1 1 0 0 0 0 0 0 结果:CY=0,AC=0,OV=1(第 6 位有进位,第 7 位无进位) 如果为无符号数,则和为 11000000,如果为补码,则结果溢出。 3. 加 1 指令 INC A ;(A)+1→A INC Rn ;Rn+1→Rn,n=0~7 INC @Ri ;(Ri)+1→(Ri), i=0、1 INC direct ;(direct)+1→(direct) INC DPTR ;DPTR+1→DPTR 3.3.2 减法指令 1.带借位减法指令 SUBB A ,Rn ; A-Rn-Cy→A,(n=0~7),有借位,Cy=1;无借位,Cy=0

SUBB A,Ri:A-(Ri)-Cy→A,(=01),有借位,Cy=1:无借Cy=0 SBBA,direct:A-direct-Cy→A,有借位,Cy=l:无借位,Cy=0 SBBA,#data:A-data-Cy一A,有借位,Cyl:无借位,Cy=0 2.减1指令 DEC A :A-1-A DEC Rn :Rn-l→Rn,n=0-7 DEC eRi :(Ri)-1→(Ri),i=0、1 DEC direct (direct)-1-(direct) 注意:加1减1指令涉及A时,会影响P,但不影响其他标志位。 3.3,3乘除法指令 1.乘法指令 MUL.AB :AXB→BA 2除法指令 DIY AB :M÷B)商→A,余数→B,Cy=0,0W=0 3.3.4BCD码调整指令 DMA:功能:对加法运算结果进行以D码调整, 说明:此指令能对累加器A作CD码加法后的“加6”调整,调整原则:“过9补6”,具 体操作为: (1)若累加器低4位大于9或BCD码加时有半进位C=1,则A-(A)+06。 (2)若累加器高4位大于9或CD码加时有半进位C=1,则A一()+06。 注意:DA指令不能对BC印码减法操作结果进行调整。 例:有两个D码存入累加器A中和寄存器3中,求其和, 设:(A)=37:(R3)=36,执行下列程序, 1)ADDA,R3;(A)■6DH 2)DA A 1(A)=73 第一条指令是两个被用户定义了的D码37和36相加
SUBB A ,@Ri ; A-(Ri)-Cy→A,(n=0~1), 有借位,Cy=1;无借 Cy=0 SUBB A ,direct; A-direct-Cy→A, 有借位,Cy=1;无借位,Cy=0 SUBB A ,#data ; A-data-Cy→A, 有借位,Cy=1;无借位,Cy=0 2. 减 1 指令 DEC A ;A-1→A DEC Rn ;Rn-1→Rn, n=0~7 DEC @Ri ;(Ri)-1→(Ri), i=0、1 DEC direct ;(direct)-1→(direct) 注意:加 1 减 1 指令涉及 A 时,会影响 P,但不影响其他标志位。 3.3.3 乘除法指令 1.乘法指令 MUL AB ; A×B→BA 2.除法指令 DIV AB ;(A÷B)商→A,余数→B, Cy=0,OV=0 3.3.4 BCD 码调整指令 DA A : 功能:对加法运算结果进行 BCD 码调整。 说明:此指令能对累加器 A 作 BCD 码加法后的“加 6”调整,调整原则:“过 9 补 6”。具 体操作为: (1)若累加器低 4 位大于 9 或 BCD 码加时有半进位 AC=1,则 A←(A)+06H。 (2)若累加器高 4 位大于 9 或 BCD 码加时有半进位 AC=1,则 A←(A)+06H。 注意:DA 指令不能对 BCD 码减法操作结果进行调整。 例:有两个 BCD 码存入累加器 A 中和寄存器 R3 中,求其和。 设:(A)=37H;(R3)=36H,执行下列程序: 1)ADD A,R3 ;(A)=6DH 2)DA A ;(A)=73H 第一条指令是两个被用户定义了的 BCD 码 37 和 36 相加