您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 完全手册51单片机C语言开发详解之第3章AT89S51单片机的指令系统
技术凝聚实力专业创新出版第3章AT89S51单片机的指令系统在前面章节中介绍了单片机的基础知识和AT89S51单片机的主要结构,本章主要介绍AT89S51单片机的指令系统。技术凝聚实力专业创新出版3.1指令系统概述单片机的指令系统是一套控制单片机执行操作的编码,通常称为机器语言,机器语言指令是单片机唯一能够识别和执行的指令。为了容易理解和编程,通常使用汇编语言指令(符号指令)和高级语言(用自然语言描述)来描述计算机的指令系统。汇编指令需通过汇编程序或人工方法汇编成机器能够识别和执行的机器语言指令,高级语言需要经过编译或解释成机器能识别和执行的机器语言指令。本章采用Intel公司的标准格式汇编指令来分析AT89S51指令系统的功能和使用方法。技术凝聚实力专业创新出版3.1.1指令格式汇编语言指令是能汇编成机器语言代码的指令。AT89S51的汇编指令格式兼容MCS-51,其汇编语言指令的格式如下。标号:操作码【操作数1】,【操作数2】,【操作数3】;注释整个语句必须在一行内写完,分为四个部分。(1)第1部分标号,可以省略,它是用户定义的符号,标号实际上是符号地址,标号值代表这条指令在程序存储器中的存放地址。标号可以从字母开始,后跟1~8个英文字母或数字,并以冒号“:”结尾。技术凝聚实力专业创新出版3.1.1指令格式(2)第2部分第二部分为指令操作,由2~5个英文字符组成,根据不用的指令而不同,它反映了指令的功能,不同功能的指令,可以查阅AT89S51的汇编手册。(3)第3部分第三部分为操作数,根据不同的指令,可以有1个、2个、3个操作数,或根本没有操作数。它与操作助记符之间至少有一个空格,可以由多个空格,操作数之间用逗号“,”分开。它反映的是指令的对象。(4)第4部分第四部分为注释,注释也可以省略,它以分号“;”开始,是用户对该条指令或程序的说明,注释必须在一行之内写完,换行时需另外以分号“;”开始,注释内容可以为任何字符。技术凝聚实力专业创新出版3.1.2AT89S51的伪汇编指令汇编语言除了定义了汇编指令外,还定义了一些汇编伪指令,以支持汇编的运行。伪指令是汇编时不产生机器语言代码的指令,是CPU不能执行的指令,仅提供汇编用的某些控制信息。AT89S51汇编语言常用的伪指令有如下几条。(1)ORG定位伪指令格式:ORGmm一般是16位二进制数,m指出在该指令后的(伪)指令的汇编地址,即生成的机器指令的起始存储器地址。它必须放在每段源程序或数据段的开始行,在一个汇编语言的源程序中允许存在多条定位伪指令,但其中每一个m值都应和前面生成的机器指令存放地址不重叠。技术凝聚实力专业创新出版3.2AT89S51单片机的寻址方式所谓寻址方式就是如何寻找存放操作数的空间地址,并把操作数提取出来的方法,它是单片机的重要性能指标之一,也是汇编语言程序设计的最基本的内容之一。在汇编程序设计中,数据的存放、传送、运算都要通过指令来完成,编程必须自始至终都十分清楚操作数的位置,以便将它们传送到适当的空间去操作,这些都要针对系统的硬件环境编程。因此,如何寻找存放操作数的空间位置和提取操作数就十分重要。MCS-51单片机有8中寻址方式:寄存器寻址、直接寻址、立即寻址、寄存器间接寻址、基寄存器加变址寄存器间接寻址、相对寻址、位寻址和页面寻址,下面作详细讲解。技术凝聚实力专业创新出版3.2.1立即寻址立即寻址方式中操作数包含在指令字节中,操作码后面紧跟的是1B或2B操作数(称为立即数),即操作数以指令字节的形式存放于程序存储器中,在编写成程序时用“#”号表示,以区别于直接地址。例如下面的代码。MOVA,#5AH;5AHAMOVDPTR,#2000H;2000HDPTR技术凝聚实力专业创新出版3.2.2直接寻址直接寻址方式在指令中直接给出操作数所在存储单元的地址,该地址指出了参与运算或传送的数据所在的字节单元或位的地址。直接寻址方式访问以下3种存储空间:(1)特殊功能寄存器(特殊功能寄存器只能用直接寻址方式访问,即可以用它们的地址,也可以用它们的名字);(2)内部数据存储器的低128B(对于8032系列芯片,其内部数据存储器高128B(80H~0FFH)不能用直接寻址方式访问);技术凝聚实力专业创新出版3.2.2直接寻址(3)位地址空间。例如下面的代码。MOVA,5AH;(5AH)→A是把片内RAM中的5AH这个地址单元的内容送入累加器A。MOVA,P1;(P1)→A是把SFR中P1口的内容送入累加器A,它也可以写成:MOVA,90H其中90H就是P1口的地址。直接寻址的地址需占1个字节,所以一条直接寻址方式的指令至少需要占内存两个单元。技术凝聚实力专业创新出版3.2.3寄存器寻址寄存器寻址就是由指令指出某一个寄存器的内容为操作数,对所选的工作寄存器组R0~R7进行操作,累加器ACC、B寄存器、数据指针DPTR和进位C(布尔处理机的累加器C)也可用寄存器寻址的方式进行访问,只是它们的寻址具体寄存器名会隐含在操作码中。例如下面的代码。MOVA,R0;(R0)→AMOVP1,A;(A)→P1口技术凝聚实力专业创新出版3.2.4寄存器间接寻址操作数的地址事先存放在某个工作寄存器中,寄存器间接寻址方式是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。AT89S51单片机规定R0和R1为间接寻址寄存器即地址指针(对堆栈操作指令用堆栈指针SP),它可寻址内部RAM低128B地址单元的内容。寄存器间接寻址方式也可适用于访问外部扩展的数据存储器,用R0、R1或DPTR作为数据指针,当用R0、R1作为数据指针访问片外RAM时又称为页面寻址。寄存器间接寻址用符号@表示。例如下面的代码。MOVA,@R0;((R0))→A指令中所规定的工作寄存器R0的内容为地址指针,将该地址指针单元的内容送给累加器A。技术凝聚实力专业创新出版3.2.5相对寻址相对寻址方式是以当前的PC值为基准,加上指令中给定的偏移量rel,所得的结果作为转移地址。一般将相对转移指令操作码所在的地址称为源地址,转移后的地址称为目的地址,则有:目的地址=源地址+相对转移指令字节数+relAT89S51单片机指令中相对转移指令字节数既有2个字节的,也有3个字节的,偏移量为有符号数,其取值范围为-128B~+127B,在程序中一般以补码表示。技术凝聚实力专业创新出版3.2.6基址加变址寻址基址寄存器加变址寄存器间接寻址的寻址方式是以16位的PC或DPTR作为寄存器,以8位的累加器A作为变址寄存器,基寄存器和变址寄存器的内容相加形成新的16位的地址,该地址为操作数的地址。在MCS-51单片机中,用变址寻址方式只能访问程序存储器。访问时只能从ROM中读取数据而不能写入数据。故这种寻址方式多用于查表操作。例如下面的代码。MOVCA,@A+DPTR表示基寄存器DPTR的内容与变址寄存器累加器A的内容相加形成新的16位地址,该地址单元的内容送累加器A。技术凝聚实力专业创新出版3.2.7位寻址在计算机中,操作数不仅可以按字节为单位进行存取和操作,而且也可以按8位二进制数种的某一位为单位进行存取和操作。位寻址方式是其操作数是8位二进制中的某一位。在指令中给出的是位地址,即给出片内RAM某一单元中的一位。位地址在指令中用bit表示。AT89S51单片机片内RAM有两个区域可以位寻址,其一是20H~2FH的16个单元的128位;其二是字节地址为8的倍数的特殊功能寄存器。技术凝聚实力专业创新出版3.2.7位寻址AT89S51单片机中位寻址常用以下两种方式表示。(1)直接使用位地址。对于20H~2FH的16个单元共128位的位地址一般采用直接使用位地址的方式,如位地址08H表示21H单元的0位。(2)对于特殊功能寄存器,还可以直接用寄存器名字加位数表示,如PSW.3(或位地址0D3H)。例如下面的代码。MOVC,01H;01H为位地址技术凝聚实力专业创新出版3.2.8页面寻址用寄存器间接寻址方式访问外部扩展的数据存储器,当用R0、R1作为地址指针访问片外RAM时的寻址方式称为页面寻址。页面地址由P2口的内容决定,页面内的地址由R0或R1的内容决定。例如下面的代码。MOVP2,#0A0HMOVR0,#01HMOVA,#10HMOV@RO,A表示将累加器A中的数据10H传送到页面为A0H,页内地址为01H的外部数据存储器地址单元,即实际为传送到0A001H地址单元。技术凝聚实力专业创新出版3.2.9寻址方式与存储器的对应虽然AT89S51单片机的寻址方式有很多种,但指令对哪一个存储器空间进行操作是由指令的操作码和寻址方式确定的。一般来说,有以下几点。程序存储器:只能采用立即寻址和基寄存器加变址寄存器间接寻址的寻址方式;特殊功能寄存器空间:只能采用直接寻址方式,不能采用寄存器间接寻址方式;内部数据存储器高128B:只能采用寄存器间接寻址方式,不能采用直接寻址方式;内部数据存储器低128B:既能采用寄存器间接寻址方式,又能采用直接寻址方式;外部扩展的数据存储器:只能采用MOVX指令访问。技术凝聚实力专业创新出版3.3AT89S51单片机的数据传送指令AT89S51单片机指令系统共有42种操作助记符来描述33种操作功能,由111条指令组成。其中单字节指令49条,双字节指令45条,三字节指令17条,下面分别介绍。CPU在进行算术和逻辑操作时,绝大多数指令都有操作数,所以数的传送是一种最基本、最主要的操作。在通常的应用程序中,传送指令在程序中占着极大的比例,数据传送是否灵活、迅速,对整个程序的编写和执行都起着很大的作用。技术凝聚实力专业创新出版3.3.1以累加器A为目的操作数的指令①MOVA,Rn;寄存器寻址,(Rn)→A,n=0~7②MOVA,direct;直接寻址,(direct)→A③MOVA,@Ri;间接寻址,((Ri))→A,i=0或1④MOVA,#data;立即寻址,data→A这组指令的功能是把源操作数的内容送到累加器A,源操作数的内容不发生改变。技术凝聚实力专业创新出版3.3.2以Rn为目的操作数的指令①MOVRn,A;寄存器寻址,(A)→Rn②MOVRn,direct;直接寻址,(direct)→Rn③MOVRn,#data;立即寻址,data→Rn这组指令的功能是把源操作数的内容送到当前工作寄存器组R0~R1中的某一个,源操作数的内容不发生改变。技术凝聚实力专业创新出版3.3.3以直接地址为目的操作数的指令①MOVdirect,A;寄存器寻址,(A)→(direct)②MOVdirect,Rn;直接寻址,(Rn)→(direct)③MOVdirect1,direct2;直接寻址,(direct2)→(direct1)④MOVdirect,@Ri;寄存器间接寻址,((Ri))→(direct),i=0~1⑤MOVdirect,#data;立即寻址,data→(direct)这组指令的功能是把源操作数的内容送到直接地址指出的存储单元。技术凝聚实力专业创新出版3.3.4以间接地址为目的操作数的指令①MOV@Ri,A;寄存器寻址,(A)→(Ri),i=0~1②MOV@Ri,direct;直接寻址,(direct)→(Ri),i=0~1③MOV@Ri,#data;立即寻址,data→(Ri),i=0~1这组指令的功能是把源操作数的内容送到以R0或R1内容为地址的内部RAM存储单元。技术凝聚实力专业创新出版3.3.516位数据传送的指令MOVDPTR,#data16;立即寻址,data16→DPTR或dataH→DPH,dataL→DPL这条指令的功能是把16位立即数传送到数据指针DPTR,16位数据的高8位送入DPH,低8位送入DPL。技术凝聚实力专业创新出版3.3.6查表指令①MOVCA,@A+PC;基寄存器加变址
本文标题:完全手册51单片机C语言开发详解之第3章AT89S51单片机的指令系统
链接地址:https://www.777doc.com/doc-2528308 .html