您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机电子教案第3章
3.1指令格式及常用符号本章分为七节,主要介绍:3.280C51的寻址方式3.3数据传送类指令(29条)3.4算术运算类指令(24条)3.5逻辑运算与循环类指令(24条)3.6控制转移类指令(17条)3.7位操作类指令(17条)3.1指令格式及常用符号3.1.1机器指令的编码格式一、单字节指令1、8位编码仅为操作码:如:INCA。该指令的编码为:00000100B,其十六进制表示为04H,累加器A隐含在操作码中。指令的功能是累加器A的内容加1。注意:在指令中用“A”表示累加器,而用“ACC”表示累加器对应的地址(E0H)。高5位为操作码,低3位为存放操作数的寄存器编码。如:MOVA,R0编码为11101000B,其十六进制表示为E8H(低3位000为寄存器R0的编码)。功能是将当前工作寄存器R0中的数据传送到累加器A中。2.8位编码含有操作码和寄存器编码二、双字节指令第一字节表示操作码,第二个字节表示参与操作的数据或数据存放的地址。如:MOVA,#50H编码为01110100B,01010000B。其十六进制表示为74H,50H。功能是将立即数“50H”传送到累加器A中。三、三字节指令指令的第一字节表示该指令的操作码,后两个字节表示参与操作的数据或数据存放的地址。如:MOV20H,#50H编码为01110101B,00100000B,01010000B。其十六进制表示为75H,20H,50H。功能是将立即数“50H”传送到内部RAM的20H单元中。3.1.2符号指令的格式一般格式为:操作助记符[目的操作数][,源操作数][;注释]多数指令为两操作数指令;当指令操作数隐含在操作助记符中时,在形式上这种指令无操作数;另有一些指令为单操作数指令或三操作数指令。指令的一般格式中使用了可选择符号“[]”,包含的内容因指令的不同可以有或无。在两个操作数的指令中,通常目的操作数写在左边,源操作数写在右边。如:ANLA,#40H功能是将立即数“40H”同累加器A中的数进行“与”操作,结果送回累加器。ANL为“与”操作的助记符,立即数“40H”为源操作数,累加器A为目的操作数。注:在指令中,多数情况下累加器用“A”表示,仅在直接寻址方式中,用“ACC”表示累加器在SFR区的具体地址E0H。试比较,指令MOVA,#30H的机器码为74H、30H;而指令MOVACC,#30H的机器码为75H、E0H、30H。3.1.3符号指令及其注释中常用的符号Rn(n=0~7)--当前选中的工作寄存器组中的寄存器R0~R7之一;Ri(i=0,1)--当前选中的工作寄存器组中的寄存器R0或R1;@---------------间址寄存器前缀;#data------------8位立即数;#data16---------16位立即数;direct--------片内低128个RAM单元地址及SFR地址(可用符号名称表示);addr11-----------11位目的地址;addr16-----------16位目的地址;rel-----------------补码形式表示的8位地址偏移量,值在-128~+127范围内;bit----------------片内RAM位地址、SFR的位地址(可用符号名称表示);/-------------------位操作数的取反操作前缀;(×)-----------表示×地址单元或寄存器中的内容;←----------------将箭头右边的内容送入箭头左边的单元中。3.280C51的寻址方式•是寻找操作数或指令的地址的方式。•80C51的寻址方式有七种。即:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、基址寄存器加变址寄存器变址寻址、相对寻址和位寻址。若不特别声明,我们后面提到的寻址方式均指源操作数的寻址方式。操作数存放在寄存器中,指令中直接给出该寄存器名称的寻址方式。可以获得较高的传送和运算速度。3.2.1寄存器寻址30H00HASFRR030HMOVA,R0E8HROMRAM如:MOVA,R0寄存器可以是:R0~R7;A;B(以AB寄存器对形式出现);DPTR。指令操作码之后的字节存放的是操作数的地址,操作数本身存放在该地址指示的存储单元中的寻址方式称为直接寻址。3.2.2直接寻址如:MOVA,50H3AH50HASFR3AHMOVA,50HE5HROMRAM50H直接寻址中的SFR经常采用符号形式表示。寻址空间为:片内RAM低128字节;SFR。寄存器中的内容为地址,从该地址去取操作数的寻址方式称为寄存器间接寻址。3.2.3寄存器间接寻址寻址的存储空间为片内RAM或片外RAM。•片内RAM的数据传送采用“MOV”类指令,间接寻址寄存器采用寄存器R0或R1(堆栈操作时采用SP);•片外RAM的数据传送采用“MOVX”类指令,这时间接寻址寄存器有两种选择,一是采用R0和R1作间址寄存器,这时R0或R1提供低8位地址(外部RAM多于256字节采用页面方式访问时,可由P2口未使用的I/O引脚提供高位地址);二是采用DPTR作为间址寄存器。寄存器间接寻址对应的空间为:•片内RAM(采用@R0,@R1或SP);•片外RAM(采用@R0,@R1或@DPTR)。如:MOVA,@R05AH30HASFR5AHMOVA,@R0E6HROMRAM30HR0指令编码中直接给出操作数的寻址方式称为立即寻址。在这种寻址方式中,紧跟在操作码之后的操作数称为立即数。立即数可以为一个字节,也可以是两个字节,并要用符号“#”来标识。由于立即数是一个常数,所以只能作为源操作数。立即寻址所对应的寻址空间为:ROM3.2.4立即寻址00HASFR50HMOVA,#50H74HROMRAM50H如:MOVA,#50H以一个基地址加上一个偏移量地址形成操作数地址的寻址方式称为变址寻址。在这种寻址方式中,以数据指针DPTR或程序计数器PC作为基址寄存器,累加器A作为偏移量寄存器,基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址。变址寻址所对应的寻址空间为:ROM3.2.5变址寻址如:MOVCA,@A+DPTR00HASFR0FHMOVCA,@A+DPTR93HROMRAMDPL00HDPH24H88H2400H+0FH=240FH240FH相对寻址是以程序计数器PC的当前值(指读出该2字节或3字节的跳转指令后,PC指向的下条指令的地址)为基准,加上指令中给出的相对偏移量rel形成目标地址的寻址方式。rel是一个带符号的8位二进制数,取值范围是-128~+127,以补码形式置于操作码之后存放。3.2.6相对寻址如:JCrel;rel=75H00HPSWSFR10000000ROMRAM1000H+02H=1002H1077HJCrel40H75H1000H1001H1002H1002H+75H=1077HPC值字节数当前PC值偏移量新PC值注意此例中CYPSW.7)为1对位地址中的内容进行操作的寻址方式称为位寻址。采用位寻址指令的操作数是8位二进制数中的某一位。指令中给出的是位地址。位寻址方式实质属于位的直接寻址。寻址空间为:片内RAM的20H~2FH单元中的128可寻址位;SFR的可寻址位。3.2.7位寻址习惯上,特殊功能寄存器的寻址位常用符号位地址表示。如:CLRACC.0MOV30H,C3.3数据传送类指令(29条)•传送类指令占有较大的比重。数据传送是进行数据处理的最基本的操作,这类指令一般不影响标志寄存器PSW的状态。•传送类指令可以分成两大类。一是采用MOV操作符,称为一般传送指令;二是采用非MOV操作符,称为特殊传送指令,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。3.3.1一般传送指令一、16位传送这条指令的功能是将源操作数data16(通常是地址常数)送入目的操作数DPTR中。源操作数的寻址方式为立即寻址。例如:执行指令MOVDPTR,#1234H后(DPH)=12H,(DPL)=34H。二、8位传送AARnRnMOVdirectdirect@Ri@Ri---#data目的字节源字节在5种源字节中,只有#data不能用作目的字节。所以可以用4种目的字节为基础构造4类指令。相应的源字节选择依据是:•源字节与目的字节不相同(除direct外);•寄存器寻址与寄存器间接寻址间不相互传送。1.以A为目的RnARndirectAdirectMOVA@RiARi#dataAdata;();(),;(());•这组指令的功能是把源字节送入累加器中。源字节的寻址方式分别为直接寻址、寄存器间接寻址、寄存器寻址和立即寻址四种基本寻址方式。例:若(R1)=20H,(20H)=55H,执行指令MOVA,@R1后,(A)=55H。2.以Rn为目的•这组指令的功能是把源字节送入寄存器Rn中。源字节的寻址方式分别为立即寻址、直接寻址和寄存器寻址(由于目的字节为工作寄存器,所以源字节不能是工作寄存器及其间址方式寻址)。例:若(50H)=40H,执行指令MOVR6,50H后,(R6)=40H。ARnAMOVRndirectRndirect#dataRndata;(),;();3.以direct为目的•这组指令的功能是把源字节送入direct中。源字节的寻址方式分别为立即寻址、直接寻址、寄存器间接寻址和寄存器寻址。例:若(R1)=50H,(50H)=18H,执行指令MOV40H,@R1后,(40H)=18H。AdirectARndirectRnMOVdirectdirect1directdirect1@RidirectRi#datadirectdata;();(),;();(());4.以@Ri为目的•这组指令的功能是把源字节送入Ri内容为地址的单元,源字节寻址方式为立即寻址、直接寻址和寄存器寻址(因目的字节采用寄存器间接寻址,故源字节不能是寄存器及其间址寻址)。例:若(R1)=30H,(A)=20H,执行指令MOV@R1,A后,(30H)=20H。ARiAMOV@RidirectRidirect#dataRidata;()(),;()();()3.3.2特殊传送指令特殊传送指令的操作符为:MOVC、MOVX、PUSH、POP、XCH、XCHD和SWAP。功能分别为:ROM查表、外部RAM读写、堆栈操作和交换指令一、ROM查表1.DPTR内容为基址MOVCA,@A+DPTR;A←((A)+(DPTR))该指令首先执行16位无符号数加法,将获得的基址与变址之和作为16位的程序存储器地址,然后将该地址单元的内容传送到累加器A。指令执行后DPTR的内容不变。2.PC内容为基址MOVCA,@A+PC;A←((A)+(PC))取出该单字节指令后PC的内容增1,以增1后的当前值去执行16位无符号数加法,将获得的基址与变址之和作为16位的程序存储器地址。然后将该地址单元的内容传送到累加器A。指令执行后PC的内容不变。二、读写片外RAM1.读片外RAMMOVXA,@DPTR;A←((DPTR))MOVXA,@Ri;A←((Ri))第一条指令以16位DPTR为间址寄存器读片外RAM,可以寻址整个64K字节的片外RAM空间。指令执行时,在DPH中的高8位地址由P2口输出,在DPL中的低8位地址由P0口分时输出,并由ALE信号锁存在地址锁存器中。第二条指令以R0或R1为间址寄存器,也可以读整个64K字节的片外RAM空间。指令执行时,低8位地址在R0或R1中由P0口分时输出,ALE信号将地址信息锁存在地址锁存器中(多于256字节的访问,高位地址由P2口提供)。读片外RAM的MOVX操作,使P3.7引脚输出的信号选通片外RAM单元,相应单元的数据从P0口读入累加器中。2.写片外RAMMOVX@DPTR,A;((DPTR))←(A)MOVX@Ri,A;((Ri))←(A)第一条指令以16位DPTR为间址寄存器写外部RAM,可以寻址整个64K字节的片外RAM空间。指令执行
本文标题:单片机电子教案第3章
链接地址:https://www.777doc.com/doc-68317 .html