安徽理工大学电气与信息工程学院2020/3/25•3.1指令系统概述•3.2指令格式•3.3MCS-51指令系统的寻址方式•3.4MCS-51单片机指令系统•3.5汇编语言程序设计第3章MCS-51单片机指令系统及汇编语言程序设计主要内容:安徽理工大学电气与信息工程学院2020/3/253.1指令系统概述MCS-51单片机指令系统有如下特点:•(1)指令执行时间快。•(2)指令短,约有一半的指令为单字节指令。•(3)用一条指令即可实现2个一字节的相乘或相除。•(4)具有丰富的位操作指令。•(5)可直接用传送指令实现端口的输入输出操作。安徽理工大学电气与信息工程学院2020/3/25指令分类•按指令功能,MCS-51指令系统分为数据传递与交换、算术运算、逻辑运算、程序转移、布尔处理操作、CPU控制等6类。•布尔处理操作类指令又称位操作指令。返回本章首页安徽理工大学电气与信息工程学院2020/3/253.2指令格式•在MCS-51指令中,一般指令主要由操作码、操作数组成。•指令应具有以下功能:(1)操作码指明执行什么性质和类型的操作。例如,数的传送、加法、减法等。(2)操作数指明操作的数本身或者是操作数所在的地址。(3)指定操作结果存放的地址。一、MCS-51单片机指令格式返回本章首页安徽理工大学电气与信息工程学院2020/3/25二、符号说明Rn——当前选中的寄存器区中的8个工作寄存器R0~R7(n=0~7)。Ri——当前选中的寄存器区中的2个工作寄存器R0、R1(i=0,1)。direct—8位的内部数据存储器单元中的地址。#data——包含在指令中的8位常数。#data16——包含在指令中的16位常数。addr16——16位目的地址。addr11——11位目的地址。安徽理工大学电气与信息工程学院2020/3/25rel——8位带符号的偏移字节,简称偏移量。DPTR——数据指针,可用作16位地址寄存器。bit——内部RAM或专用寄存器中的直接寻址位。A——累加器。B——专用寄存器,用于乘法和除法指令中。C——进位标志或进位位,或布尔处理机中的累加器。安徽理工大学电气与信息工程学院2020/3/25@——间址寄存器或基址寄存器的前缀,如@Ri,@DPTR。/——位操作数的前缀,表示对该位操作数取反,如/bit。×——片内RAM的直接地址或寄存器。(×)——由×寻址的单元中的内容。——箭头左边的内容被箭头右边的内容所代替。返回本节安徽理工大学电气与信息工程学院2020/3/253.3MCS-51指令系统的寻址方式•3.3.1立即寻址•3.3.2直接寻址•3.3.3寄存器寻址•3.3.4寄存器间接寻址•3.3.5基址寄存器+变址寄存器的间接寻址•3.3.6位寻址•3.3.7相对寻址•3.3.8寻址空间返回本章首页主要内容:安徽理工大学电气与信息工程学院2020/3/253.3.1立即寻址•指令中直接给出操作数的寻址方式。立即操作数用前面加有#号的8位或16位数来表示。例如:MOVA,#60H;A←#60HMOVDPTR,#3400H;DPTR←#3400HMOV30H,#40H;30H单元←#40H•上述三条指令执行完后,累加器A中数据为立即数据60H,DPTR寄存器中数据为3400H,30H单元中数据为立即数40H。返回本节安徽理工大学电气与信息工程学院2020/3/253.3.2直接寻址•指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。例如:MOVPSW,#20H;PSW←#20HPSW为直接寻址寄存器的符号地址。MOVA,30H;A←30H内部RAM单元中的内容•30H为直接给出的内部RAM的地址。返回本节安徽理工大学电气与信息工程学院2020/3/253.3.3寄存器寻址•以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B、DPTR以及R0~R7、Cy。例如:CLRA;A←0INCDPTR;DPTR←DPTR+1ADDR5,#20H;R5←#20H+R5返回本节安徽理工大学电气与信息工程学院2020/3/253.3.4寄存器间接寻址•以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。间接寻址的存储器空间包括内部数据RAM和外部数据RAM。•能用于寄存器间接寻址的寄存器有R0、R1(当前工作寄存器区),DPTR,SP。寄存器间接寻址符号为@。•其中R0、R1可寻址片内RAM和片外低端RAM区。DPTR做地质指针寄存器时刻寻址片外RAM全部64k区域。SP仅用于堆栈操作。安徽理工大学电气与信息工程学院2020/3/25例如:MOV@R0,A;指令操作过程示意图如图3-1所示。又如:MOVXA,@R1;指令操作过程示意图如图3-2所示。再如:MOVX@DPTR,A;指令操作过程示意图如图3-3所示。片内RAM30HR034HA30H34H图3-1MOV@R0,A间接寻址示意图返回片外RAM45HA10H45H10HR1片外RAM2000HDPTR30HA2000H30H图3-2MOVXA,@R1间接寻址示意图图3-3MOVX@DPTR,A间接寻址示意图返回本节返回安徽理工大学电气与信息工程学院2020/3/253.3.5基址寄存器+变址寄存器的间接寻址•基址寄存器+变址寄存器的间接寻址只能对程序存储器中数据进行操作。由于程序存储器是只读的,因此只有读操作而无写操作,在指令符号上采用MOVC的形式。例如:MOVCA,@A+DPTR;A←(A+DPTR)(如图3-4)又如:MOVCA,@A+PC;A←(A+PC)这条指令与上条指令不同的是,基址寄存器是PC。再如:JMP@A+DPTR图3-4MOVCA,@A+DPTR基址寄存器+变址寄存器的间接寻示意图程序存储器2000HDPTR64H(10H)A2010H64H10H2000H返回本节安徽理工大学电气与信息工程学院2020/3/253.3.6位寻址•位寻址只能对有位地址的单元作位寻址操作。•位寻址其实是一种直接寻址方式,不过其地址是位地址。例如:MOVCPSW.5;Cy←(PSW.5)又如:MOV32H,C;32H←进位位CORLC,32H;C←C∨32H返回本节安徽理工大学电气与信息工程学院2020/3/253.3.7相对寻址•以当前程序计数器PC的内容为基础,加上指令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。•相对寻址用于修改PC值,主要用于实现程序的分支转移。例如,SJMP08H;PC←PC+2+08H指令操作示意图如图3-5所示。程序存储器(2000H)200AHSJMP200AH08H2000H+208HPC2000H图3-52000H8008SJMP08H相对寻址示意图返回本节安徽理工大学电气与信息工程学院2020/3/253.3.8寻址空间寻址方式存储空间(寻址空间)立即寻址程序存储器直接寻址片内RAM低128B和SFR区寄存器寻址R0~R7(工作寄存器区),A,B,Cy(位)DPTR寄存器间接寻址片内RAM(00H~FFH)、片外RAM基址寄存器+变址寄存器的间接寻址程序存储器位寻址片内RAM区(20H~20F),SFR区(字节地址可被8整除的寄存器)相对寻址程序存储器256B范围(PC+rel)返回本章首页安徽理工大学电气与信息工程学院2020/3/253.4MCS-51单片机指令系统•3.4.1数据传送类指令•3.4.2算术运算类指令•3.4.3逻辑运算及移位类指令•3.4.4控制转移类指令•3.4.5位操作指令返回本章首页安徽理工大学电气与信息工程学院2020/3/253.4.1数据传送类指令(28条)•功能:将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8种。•源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址;•目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。MCS-51单片机片内数据传送途径如图3-6所示。直接地址direct累加器A直接地址direct间接地址@Ri寄存器Rn立即数#data寄存器DPTR图3-6MCS-51单片机片内数据传送图安徽理工大学电气与信息工程学院2020/3/251.以A为目的操作数MOVA,Rn;A←RnMOVA,direct;A←(direct)MOVA,@Ri;A←(Ri)MOVA,#data;A←data安徽理工大学电气与信息工程学院2020/3/252.以Rn为目的操作数MOVRn,A;Rn←AMOVRn,direct;Rn←(direct)MOVRn,#data;Rn←data安徽理工大学电气与信息工程学院2020/3/253.以直接地址为目的操作数MOVdirect,A;(direct)←AMOVdirect1,direct2;(direct1)←(direct2)MOVdirect,#data;(direct)←dataMOVdirect,@Ri;(direct)←(Ri))MOVdirect,Rn;(direct)←Rn安徽理工大学电气与信息工程学院2020/3/254.以间接地址为目的操作数MOV@Ri,A;(Ri)←AMOV@Ri,direct;(Ri)←(direct)MOV@Ri,#data;(Ri)←data例如:设(30H)=6FH,R1=40H,执行MOV@R1,30H后,结果?30H单元中数据取出送入R1间接寻址的40H单元,(40H)=6FH。安徽理工大学电气与信息工程学院2020/3/255.16位数据传送MOVDPTR,#data16;DPTR←data16,DPH←dataH,DPL←dataL,例如执行MOVDPTR,#2000H后,DPTR=2000H。安徽理工大学电气与信息工程学院2020/3/25【例3.1】•MOVA,#10H•MOVR0,#20H•MOVR1,A•MOV20H,#00H•MOVDPTR,#2000H•MOV40H,@R0•MOV@R1,40H•程序执行后的结果:•A=10H,R0=20H,R1=10H,(40H)=00H•(10H)=00H,(20H)=00H,DPTR=2000H安徽理工大学电气与信息工程学院2020/3/256.访问外部数据RAMMOVXA,@DPTR;A←(DPTR)MOVX@DPTR,A;(DPTR)←AMOVXA,@Ri;A←(Ri)MOVX@Ri,A;(Ri)←A片外RAM区64KB(0000H~0FFFFH)只能与累加器A互传数据安徽理工大学电气与信息工程学院2020/3/257.读程序存储器MOVCA,@A+DPTR;A←(A+DPTR)MOVCA,@A+PC;A←(A+PC)例如已知A=30H,DPTR=3000H,程序存储器单元(3030H)=50H,执行MOVCA,@A+DPTR后,结果?A=50H。安徽理工大学电气与信息工程学院2020/3/25【例3.2】查表求0~9的平方值。•ORG1000H•START:MOVDPTR,#2000H•MOVA,#NUMB;NUMB=0~9•MOVCA,@A+DPTR•SJMP$•2000H:DB0,1,4,9,16,25,36,49,64,81安徽理工大学电气与信息工程学院2020/3/25例3.3查表将累加器A中的0~9的二进制数转换成ASCII码。ORG2000HSTART:MOVA,#NUMB;NUMB=0~9ADDA,#02H;修正地址MOVCA,@A+PCSJMP$TAB:DB‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’安徽理工大学电气与信息工程学院2020/3/258.堆栈操作•所谓堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条专用指令:PUSHdirect;SP←(SP+1),(SP)←(direct)POPdirec