下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 AT89C51指令系统

AT89C51指令系统.pdf

AT89C51指令系统

jing
2011-11-15 0人阅读 举报 0 0 暂无简介

简介:本文档为《AT89C51指令系统pdf》,可适用于工程科技领域

第章ATS单片机的指令系统前面章节介绍了单片机的基础知识和ATS单片机的主要结构本章将主要介绍ATS单片机的指令系统。指令系统概述单片机的指令系统是一套控制单片机执行操作的编码通常称为机器语言机器语言指令是单片机唯一能够识别和执行的指令。为了容易理解和编程通常使用汇编语言指令(符号指令)和高级语言(用自然语言描述)来描述计算机的指令系统。汇编指令需通过汇编程序或人工方法汇编成机器能够识别和执行的机器语言指令高级语言需要经过编译或解释成机器能识别和执行的机器语言指令。本章采用Intel公司的标准格式汇编指令来分析ATS指令系统的功能和使用方法。指令格式汇编语言指令是能汇编成机器语言代码的指令。ATS的汇编指令格式兼容MCS其汇编语言指令的格式如下:标号:操作码操作数操作数操作数注释整个语句必须在一行内写完分为个部分。()第部分标号可以省略它是用户定义的符号标号实际上是符号地址标号值代表这条指令在程序存储器中的存放地址。标号可以从字母开始后跟~个英文字母或数字并以冒号“:”结尾。()第部分第部分为指令操作由~个英文字符组成因不同的指令而不同它反映了指令的功能具体不同功能的指令读者可以查阅ATS的汇编手册。()第部分第部分为操作数根据不同的指令可以有个、个、个操作数或者根本没有操作数。它与操作助记符之间至少有一个空格可以有多个空格操作数之间用逗号“,”分开。它反映的是指令的对象。()第部分第部分为注释注释也可以省略它以分号“”开始是用户对该条指令或程序的说明注释必须在一行之内写完换行时需另外以分号“”开始注释内容可以为任何字符。第章ATS单片机的指令系统ATS的伪汇编指令汇编语言除了定义了汇编指令外还定义了一些汇编伪指令以支持汇编的运行。伪指令是汇编时不产生机器语言代码的指令是CPU不能执行的指令仅提供汇编用的某些控制信息。ATS汇编语言常用的伪指令有如下几条。()ORG定位伪指令格式:ORGmm一般是位二进制数m指出在该指令后的(伪)指令的汇编地址即生成的机器指令的起始存储器地址。它必须放在每段源程序或数据段的开始行在一个汇编语言的源程序中允许存在多条定位伪指令但其中每一个m值都应和前面生成的机器指令存放地址不重叠。例如下面的代码。ORGHSTART:MOVA,#H……ORGHSECOND:CLRA第条定位伪指令指定了标号START的地址为H“MOVA,#H”指令及其后面的指令汇编成的机器码放在从H开始的存储单元中。第条定位伪指令指定了标号SECOND的地址为H。从START开始的程序段所占用的存储地址最多为FFFH否则与从SECOND开始的程序段地址重叠程序在编译时不会发生错误但在运行时就会发生错误。()DB定义字节伪指令格式:标号:DBXX…Xn标号可有可无Xi是单字节数据它可为十进制数或十六进制数可以为一个表达式也可以是在括在引号‘’中的字符串表示ASCII码的字符两个数据之间用逗号“,”分开。它通知汇编程序从当前ROM地址开始保留存储单元并存入DB后面的数据。例如下面的代码。ORGHDBAAHSDATA:DB,H经汇编后从地址H处的存储器的内容如下:(H)=AAH(H)=H(H)=H()DW定义字伪指令格式:标号:DWYY…Yn标号可有可无Yi是双字节数据它可为十进制数或十六进制数可以为一个表达式两个数据之间用逗号“,”分开。它通知汇编程序从当前ROM地址开始保留存储单元并存入DW后面的数据。存放时高位在前低位在后如下所示。ORGH单片机C语言开发详解DWHDW经汇编后从地址H处的存储器的内容如下:(H)=H(H)=H(H)=H(H)=DH()EQU赋值伪指令格式:字符名称EQU项(数或汇编符号)EQU伪指令是把“项”赋给“字符名称”需要注意的是这里的字符名称不同于标号(其后面没有冒号)但它是必需的其中的项可以是数也可以是汇编符号。用EQU赋过值的符号名称必须先定义后使用这些被定义的字符名称可以用做数据地址、代码地址、位地址或一个立即数。因此它可以是位的也可以是位的。例如下面的代码。AAEQURMOVA,AA这里AA就代表了工作寄存器R。()DATA数据地址赋值命令格式:字符名称DATA数据或表达式此命令把数据地址或代码地址赋予标号段规定的字符名称。被定义的字符名称也可以先使用后定义。例如下面的代码。ORGHINDEXJDATAHLJMPINDEXJ等价于如下代码。ORGHLJMPHDATA和EQU的区别在于用DATA定义的字符名称作为标号登记在符号表中故可先使用后定义而用EQU定义的字符名称必须先定义后使用其原因是EQU不定义在符号表中。()DS定义存储空间伪指令在汇编时从指令地址开始保留DS之后表达式的值所规定的存储单元。例如下面的代码。ORGHDSHDBH,DWH经汇编后从地址H开始保留个单元然后从H处存储器的内容如下:(H)=H(H)=H(H)=H(AH)=H第章ATS单片机的指令系统DB、DW、DS伪指令都只对程序存储器起作用它们不能对数据存储器进行初始化。()BIT定义位符号伪指令格式:字符名称BIT位地址这里的字符名称与标号不同但它是必需的其功能是把BIT之后的位地址赋给字符名称。例如下面的代码。PBITP这样P口的位地址H就赋给了P。()END汇编结束伪指令END伪指令通知汇编程序结束汇编在END之后即使还有指令汇编程序也不做处理。在程序中可以有多条END指令一般在程序的最后需要一条END伪指令否则汇编程序会提示警告错误。当然这不会影响程序的正常执行。ATS单片机的寻址方式所谓寻址方式就是如何寻找存放操作数的空间地址并把操作数提取出来的方法它是单片机的重要性能指标之一也是汇编语言程序设计的最基本的内容之一。在汇编程序设计中数据的存放、传送、运算都要通过指令来完成编程过程中必须自始至终都十分清楚操作数的位置以便将它们传送到适当的空间去操作这些都要针对系统的硬件环境编程。因此如何寻找存放操作数的空间位置和提取操作数就十分重要。MCS单片机有种寻址方式分别为寄存器寻址、直接寻址、立即寻址、寄存器间接寻址、基寄存器加变址寄存器间接寻址、相对寻址、位寻址和页面寻址下面作详细讲解。立即寻址立即寻址方式中操作数包含在指令字节中操作码后面紧跟的是B或B操作数(称为立即数)即操作数以指令字节的形式存放于程序存储器中在编写程序时用井号“#”开头表示立即数以区别于直接地址。例如下面的代码。MOVA,#AHAHAMOVDPTR,#HHDPTR直接寻址直接寻址方式在指令中直接给出操作数所在存储单元的地址该地址指出了参与运算或传送的数据所在的字节单元或位的地址。直接寻址方式用来访问以下三种存储空间。()特殊功能寄存器(特殊功能寄存器只能用直接寻址方式访问即可以用它们的地址也可以用它们的名字)()内部数据存储器的低B(对于系列芯片其内部数据存储器高B地址为H~FFH不能用直接寻址方式访问)()位地址空间。例如下面的代码。单片机C语言开发详解MOVA,AH(AH)→A是把片内RAM中的AH这个地址单元的内容送入累加器A。又如下面的代码。MOVA,P(P)→A是把SFR中P口的内容送入累加器A它也可以写成如下形式。MOVA,H其中H就是P口的地址。直接寻址的地址需占个字节所以一条直接寻址方式的指令至少需要占两个内存单元。寄存器寻址寄存器寻址就是由指令指出某一个寄存器的内容为操作数对所选的工作寄存器组R~R进行操作累加器ACC、寄存器B、数据指针DPTR和进位C(布尔处理机的累加器C)也可用寄存器寻址的方式进行访问只是它们的寻址具体寄存器名会隐含在操作码中。例如下面的代码。MOVA,R(R)→AMOVP,A(A)→P口寄存器间接寻址操作数的地址事先存放在某个工作寄存器中寄存器间接寻址方式是把指定寄存器的内容作为地址由该地址所指定的单元内容作为操作数。ATS单片机规定R和R为间接寻址寄存器即地址指针(对堆栈操作指令用堆栈指针SP)它可寻址内部RAM低B地址单元的内容。寄存器间接寻址方式也可适用于访问外部扩展的数据存储器用R、R或DPTR作为数据指针当用R、R作为数据指针访问片外RAM时又称为页面寻址。寄存器间接寻址用符号开头表示操作数。例如下面的代码。MOVA,R((R))→A指令中所规定的工作寄存器R的内容为地址指针将该地址指针单元的内容发送给累加器A。相对寻址相对寻址方式是以当前的PC值为基准加上指令中给定的偏移量rel所得的结果作为转移地址。一般将相对转移指令操作码所在的地址称为源地址转移后的地址称为目的地址则目的地址的计算方法如下:目的地址=源地址相对转移指令字节数relATS单片机指令中相对转移指令字节数既有个字节的也有个字节的偏移量为有符号数其取值范围为B~B在程序中一般以补码表示。基址加变址寻址基址寄存器加变址寄存器间接寻址的寻址方式是以位的PC或DPTR作为寄存器的以第章ATS单片机的指令系统位的累加器A作为变址寄存器基址寄存器和变址寄存器的内容相加形成新的位的地址该地址为操作数的地址。在MCS单片机中用变址寻址方式只能访问程序存储器。访问时只能从ROM中读取数据而不能写入数据。故这种寻址方式多用于查表操作。例如下面的代码。MOVCA,ADPTR表示基址寄存器DPTR的内容与变址寄存器累加器A的内容相加形成新的位地址该地址单元的内容发送到累加器A。位寻址在计算机中操作数不仅可以按字节为单位进行存取和操作而且也可以按位二进制数中的某一位为单位进行存取和操作。位寻址方式是其操作数是位二进制中的某一位。在指令中给出的是位地址即给出片内RAM某一单元中的一位。位地址在指令中用bit表示。ATS单片机片内RAM有两个区域可以进行位寻址其一是H~FH的个单元的位其二是字节地址为的倍数的特殊功能寄存器。ATS单片机中位寻址常用以下两种方式表示。()直接使用位地址。对于H~FH的个单元共位的位地址一般采用直接使用位地址的方式如位地址H表示H单元的位。()对于特殊功能寄存器还可以直接用寄存器名字加位数表示如PSW(或位地址DH)。例如下面的代码。MOVC,HH为位地址页面寻址用寄存器间接寻址方式访问外部扩展的数据存储器当用R、R作为地址指针访问片外RAM时的寻址方式称为页面寻址。页面地址由P口的内容决定页面内的地址由R或R的内容决定。例如下面的代码:MOVP,#AHMOVR,#HMOVA,#HMOVRO,A表示将累加器A中的数据H传送到页面为AH页内地址为H的外部数据存储器地址单元即实际传送到AH地址单元。寻址方式与存储器的对应虽然ATS单片机的寻址方式有很多种但指令对哪一个存储器空间进行操作是由指令的操作码和寻址方式确定的。一般来说有以下几点。—程序存储器:只能采用立即寻址和基寄存器加变址寄存器间接寻址的寻址方式—特殊功能寄存器空间:只能采用直接寻址方式不能采用寄存器间接寻址方式—内部数据存储器高B:只能采用寄存器间接寻址方式不能采用直接寻址方式单片机C语言开发详解—内部数据存储器低B:既能采用寄存器间接寻址方式又能采用直接寻址方式—外部扩展的数据存储器:只能采用MOVX指令访问。第章ATS单片机的指令系统ATS单片机的数据传送指令ATS单片机指令系统共有种操作助记符来描述种操作功能由条指令组成。其中单字节指令条双字节指令条三字节指令条下面分别介绍。CPU在进行算术和逻辑操作时绝大多数指令都有操作数所以数的传送是一种最基本、最主要的操作。在通常的应用程序中传送指令在程序中占着极大的比例数据传送是否灵活、迅速对整个程序的编写和执行都起着很大的作用。MCS单片机为用户提供了极丰富的数据传送指令功能很强其数据传送指令可以在累加器A、工作寄存器R~R、内部数据存储器、外部数据存储器和程序存储器之间进行其中对累加器A和R~R的操作较多。其中数据传送指令又可分为三类即数据传送、数据交换和栈操作。这类指令有MOV、MOVX、MOVC、XCH、XCHD、SWAP、POP、PUSH种操作助记符。数据传送指令一般的操作是把源操作数的内容传到目的操作数指令执行后一般是源操作数的内容不变目的操作数的内容修改为源操作数的内容或者源操作数和目的操作数的内容互换。以累加器A为目的操作数的指令以累加器A为目的操作数的指令如下所示。①MOVA,Rn寄存器寻址(Rn)→A,n=~②MOVA,direct直接寻址(direct)→A③MOVARi间接寻址((Ri))→Ai=或④MOVA#data立即寻址data→A这组指令的功能是把源操作数的内容送到累加器A源操作数的内容不发生改变。以Rn为目的操作数的指令以Rn为目的操作数的指令如下所示。①MOVRn,A寄存器寻址(A)→Rn②MOVRn,direct直接寻址(direct)→Rn③MOVRn#data立即寻址data→Rn这组指令的功能是把源操作数的内容送到当前工作寄存器组R~R中的某一个源操作数的内容不发生改变。以直接地址为目的操作数的指令以直接地址为目的操作数的指令如下所示。①MOVdirect,A寄存器寻址(A)→(direct)②MOVdirect,Rn直接寻址(Rn)→(direct)③MOVdirect,direct直接寻址(direct)→(direct)④MOVdirectRi寄存器间接寻址((Ri))→(direct),i=~⑤MOVdirect#data立即寻址data→(direct)这组指令的功能是把源操作数的内容送到直接地址指出的存储单元。单片机C语言开发详解以间接地址为目的操作数的指令以间接地址为目的操作数的指令如下所示。①MOVRi,A寄存器寻址(A)→(Ri),i=~②MOVRi,direct直接寻址(direct)→(Ri),i=~③MOVRi#data立即寻址data→(Ri),i=~这组指令的功能是把源操作数的内容送到以R或R内容为地址的内部RAM存储单元。位数据传送的指令位数据传送的指令如下所示。MOVDPTR#data立即寻址data→DPTR或dataH→DPHdataL→DPL这条指令的功能是把位立即数传送到数据指针DPTR位数据的高位送入DPH低位送入DPL。查表指令查表指令如下所示。①MOVCA,APC基寄存器加变址寄存器间接寻址((A))((PC))→A②MOVCA,ADPTR基寄存器加变址寄存器间接寻址((A))((DPTR))→A这组指令的功能是以基寄存器(PC或DPTR)的内容与变址寄存器A的内容作为无符号数相加组成新的位地址该地址单元的内容送累加器A。这两条指令专门用于当数据放在程序存储器中时来查数据表。这里应特别注意PC总是指向下一条指令的地址。对于第①条查表指令因为当前的PC值是由查表指令本身的存储空间决定的而变址寄存器A的内容为~所以(A)和(PC)相加所得到的新地址只能在该表指令的下一个个单元内因此表格的大小受到了限制。第②条查表指令与该指令存放的地址无关只是与数据指针DPTR和累加器A的内容有关因此数据表格大小和位置可以在KB程序存储器中任意安排。累加器A与片外RAM数据传送指令累加器A与片外RAM数据传送指令如下所示。①MOVXA,Ri页面寻址(P)((Ri))→A,i=~②MOVXA,DPTR寄存器间接寻址((DPTR))→A③MOVXRi,A页面寻址(A)→P(Ri),i=~④MOVXDPTRA寄存器间接寻址A→((DPTR))这组指令的功能是将累加器A和外部扩展的RAMIO口之间的数据传送。由于外部RAMIO口是统一编址的共占一个KB的空间所以从指令本身看不出是对RAM还是对IO口操作而只能由硬件的地址分配情况来确定。堆栈操作指令堆栈操作指令如下所示。第章ATS单片机的指令系统①PUSHdirect直接寻址(SP)→SP(direct)→(SP)这条指令的功能是首先将SP的内容自动加然后把直接地址指出的内容传送到SP寻址的内部RAM单元中。②POPdirect直接寻址(SP)→direct(SP)→SP这条指令的功能是将SP寻址的内部RAM单元的内容送到直接地址所对应的内部RAM字节单元中然后SP的内容减。堆栈操作一般用于子程序调用中断等操作这时候需要保护数据或保护CPU现场应特别注意任何情况下PUSH和POP都必须成对出现。其中也存在一些隐含的PUSH和POP指令如子程序调用LCALL指令隐含压栈两次子程序返回指令RET隐含弹栈两次。交换指令交换指令如下所示。①XCHA,Rn寄存器寻址(A)(Rn)②XCHA,direct直接寻址(A)(direct)③XCHA,Ri寄存器间接寻址(A)((Ri)),i=~④XCHDA,Ri寄存器间接寻址(A)~((Ri)),i=~⑤SWAPA寄存器寻址(A)~(A)~数据传送类指令一般是把源操作数的内容传到目的操作数指令执行后一般源操作数的内容不变。前三个为字节交换指令其功能是将累加器A的内容和源操作数的内容互换。第条指令为半字节交换指令其功能是将累加器A的内容的低位和源操作数的低位相互交换操作数的高位字节内容不变。即字节交换指令的源操作数的内容也会发生改变。最后一条为累加器A自身半字节交换指令其功能是将累加器A的内容的低位和高位交换。ATS单片机的算术操作指令MCS算术运算类指令包括加、减、乘、除基本四则运算和增量(加)、减量(减)运算执行结果将使进位(Cy)、辅助进位(AC)、溢出(OV)标志置位或复位。但加和减指令不影响以上标志。算术逻辑运算(ALU)部件仅执行无符号二进制整数的算术运算。借助溢出标志可对带符号数进行补码运算借助进位标志可进行多精度加、减运算也可以对压缩的BCD码数进行运算。这类指令有ADD、ADDC、INC、SUBB、DEC、DA、MUL、DIV种操作助记符。BCD码为用二进制表示的十进制数由于一个~的十进制数只需位二进制编码故B(位)中的高、低位均可存放一个BCD数这种在B中存放两个BCD码表示的数称为压缩的BCD码。不带进位的加法指令不带进位的加法指令如下所示。①ADDA,Rn(A)(Rn)→A②ADDA,direct(A)(direct)→A③ADDA,Ri(A)((Ri))→A④ADDA,#data(A)data→A单片机C语言开发详解这组指令的功能是把累加器A的内容与工作寄存器的内容或内部RAM单元的内容或立即数的位无符号二进制数相加其和的结果存放在累加器A中。如果位有进位输出则置位进位标志Cy否则清零Cy如果位有进位输出则置位半进位标志AC否则清零AC如果位有进位输出而位没有或者位有进位输出而位没有则置位溢出标志OV否则清零OV。第章ATS单片机的指令系统带进位的加法指令带进位的加法指令如下所示。①ADDCA,Rn(A)(Rn)Cy→A②ADDCA,direct(A)(direct)Cy→A③ADDCA,Ri(A)((Ri))Cy→A④ADDCA,#data(A)dataCy→A这组指令的功能是把累加器A的内容与工作寄存器的内容或者内部RAM单元的内容或者立即数的位无符号二进制数和进位标志一起相加其结果存放在累加器A中。如果位有进位输出则置位进位标志Cy否则清零Cy如果位有进位输出则置位半进位标志AC否则清零AC如果位有进位输出而位没有或者位有进位输出而位没有则置位溢出标志OV否则清零OV。当进位标志为时其结果与不带进位标志位的加法指令的运算结果相同。带进位的减法指令带进位的减法指令如下所示。①SUBBA,Rn(A)(Rn)Cy→A②SUBBA,direct(A)(direct)Cy→A③SUBBA,Ri(A)((Ri))Cy→A④SUBBA,#data(A)dataCy→A这组指令的功能是把累加器A的内容减去工作寄存器的内容或者减去内部RAM单元的内容或者减去立即数的位无符号二进制数并减去进位标志其结果存放到累加器A中。如果位需借位则置位进位标志Cy否则清零Cy如果位需借位则置位半进位标志AC否则清零AC如果位需借位而位不需借位或者位需借位而位不需借位则置位溢出标志OV否则清零OV。增量(加)指令增量(加)指令如下所示。①INCA(A)→A②INCRn(Rn)→Rn③INCRi((Ri))→(Ri)④INCdirect(direct)→direct⑤INCDPTR(DPTR)→DPTR这组增量指令的功能是将操作数所指定单元的内容加除对累加器A操作影响P标志位外此操作不影响其他标志位。减量(减)指令减量(减)指令如下所示。①DECA(A)→A②DECRn(Rn)→Rn③DECRi((Ri))→(Ri)④DECdirect(direct)→direct单片机C语言开发详解这组减量指令的功能是将操作数所指定单元的内容减除对累加器A操作影响P标志位外此操作不影响其他标志位。十进制调整指令十进制调整指令如下所示。DAA这条指令跟在加法指令(ADD、ADDC)指令后对累加器A中位结果进行调整使它调整为压缩的BCD码表示的数以完成十进制加法运算功能。两个压缩的BCD码按二进制数相加之后必须经该指令调整后才能得到压缩的BCD码的和数具体如下所示。①若A~>或AC=则(A)HA②若A~>或Cy=则(A)HA乘法指令乘法指令如下所示。MULAB这条指令的功能是把累加器A和寄存器B中的两个位无符号数相乘其位积的低位字节放在累加器A中高位字节放在寄存器B中。如果积大于(FFH)则置位溢出标志OV进位标志Cy总是清零。除法指令除法指令如下所示。DIVAB这条指令的功能是把累加器A中的位无符号数除以寄存器B中的位无符号数所得商的整数部分存放在累加器A中余数保留寄存器B中。如果原来B中的内容为即除数为则结果A和B中内容不定此时置位溢出标志OV进位标志Cy总是清零。ATS单片机的逻辑与移位指令MCS逻辑运算类指令包括清除、求反、移位及与、或、异或等操作。这类指令有CLR、CPL、RL、RLC、RR、RRC、ANL、ORL、XRL种操作助记符。对累加器A的单操作数的逻辑操作指令对累加器A的单操作数的逻辑操作指令如下所示。①CLRA(A)=这条指令的功能是将累加器A的内容清零即(A)=不影响Cy标志位、AC标志位和OV标志位只影响P标志位。②CPLA(A)A第章ATS单片机的指令系统这条指令的功能是将累加器A的内容逐位逻辑取反不影响标志位。③RLA这条指令的功能是将累加器A的内容向左循环移位不影响标志位。④RRA这条指令的功能是将累加器A的内容向右循环移位不影响标志位。⑤RLCA这条指令的功能是将累加器A的内容和进位标志位Cy一起向左循环移位不影响AC标志位、OV标志位。⑥RRCA这条指令的功能是将累加器A的内容和进位标志位Cy一起向右循环移位不影响AC标志位、OV标志位。两个操作数的逻辑操作指令两个操作数的逻辑操作指令如下所示。()逻辑与操作指令①ANLA,Rn(A)∧(Rn)A②ANLA,direct(A)∧(direct)A③ANLA,#data(A)∧dataA④ANLA,Ri(A)∧((Ri))→A⑤ANLdirect,A(direct)∧(A)→direct⑥ANLdirect,#data(direct)∧datadirect这组指令的前条指令是将累加器A的内容与第二操作数所指出的内容按位进行逻辑与操作结果存放在A中。后两条指令是将直接地址单元中的内容与第二操作数所指出的内容按位进行逻辑与操作结果存放在直接地址单元中。()逻辑或操作指令①ORLA,Rn(A)∨(Rn)A②ORLA,direct(A)∨(direct)A③ORLA,#data(A)∨dataA④ORLA,Ri(A)∨((Ri))→A⑤ORLdirect,A(direct)∨(A)→direct⑥ORLdirect,#data(direct)∨datadirect这组指令的前条指令是将累加器A的内容与第二操作数所指出的内容按位进行逻辑或操作结果存放在A中。后两条指令是将直接地址单元中的内容与第二操作数所指出的内容按位进行逻辑或操作结果存放在直接地址单元中。()逻辑异或操作指令①XRLA,Rn(A)Å(Rn)A②XRLA,direct(A)Å(direct)A③XRLA,#data(A)ÅdataA④XRLA,Ri(A)Å((Ri))→A单片机C语言开发详解⑤XRLdirect,A(direct)Å(A)→direct⑥XRLdirect,#data(direct)Ådatadirect这组指令的前条指令是将累加器A的内容与第二操作数所指出的内容按位进行逻辑异或操作结果存放在A中。后两条指令是将直接地址单元中的内容与第二操作数所指出的内容按位进行逻辑异或操作结果存放在直接地址单元中。ATS单片机的程序控制流指令计算机在运行过程中有时因为操作的需要或因程序较复杂程序指令往往不能按顺序逐条运行需要改变程序运行方向即将程序跳转到某个指定的地址处再执行。某些指令具有修改PC的功能(如位操作指令JC、JNC、JB、JNB、JBC等)因为PC的内容总是指向将要执行的下一条指令地址所以计算机执行这一类指令就能控制程序转移到新的PC地址去执行。除部分位操作指令能控制转移外MCS还有丰富的控制转移类指令包括无条件转移、条件转移以及调用和返回指令。这类指令有AJMP、LJMP、SJMP、JMP、JZ、JNZ、CJNZ、DJNZ、ACALL、LCALL、RET、RETI、NOP种操作助记符。无条件转移指令无条件转移指令如下所示。()绝对跳转指令AJMPaddr(PC)→PC,addr~→PC~这是KB寻址范围内的无条件转移指令是绝对跳转。跳转的目的地址必须与AJMP的下一条指令的第一个字节在同一个KB寻址范围内这是因为跳转的目的地址与AJMP的下一条指令的第一个字节的高位addr~相同。这条指令是为与MCS兼容而保留的指令现在一般很少使用。()相对跳转指令SJMPrel(PC)→relPC这条指令执行的时候先将PC的内容加再加相对偏移量rel计算出跳转目的地址。rel是一个带符号的字节数在程序中用补码表示其值范围为B~B当rel为正数时表示正向跳转为负数时表示负向跳转。()长跳转指令LJMPaddraddrPC这条指令执行时把位操作数的高低位分别装入PC的PCH和PCL无条件地转向指定地址。跳转的目的地址可以在KB程序存储器地址空间的任何地方不影响任何标志位。()间接跳转指令JMPADPTR这条指令的功能是把累加器A中的位无符号数与数据指针DPTR中的位地址相加相加形成的位新地址送入PC。指令执行过程不改变累加器和数据指针的内容也不影响标志位。第章ATS单片机的指令系统条件转移指令条件转换指令如下所示。()判零跳转指令①JZrel若(A)=则PCrel→PC若(A)≠,则PCPC②JNZrel若(A)≠则PCrel→PC若(A)=,则PCPC这组指令的功能是若满足条件则转移到目的地址去执行不满足条件则顺序执行下一条指令。目的地址在以下一条指令的起始地址为中心的B范围内(B~B)。()比较不相等跳转指令CJNEA,direct,rel该指令执行的过程如下:①(A)=(direct)则(PC)→PC,Cy=②(A)>(direct)则(PC)rel→PC,Cy=③(A)<(direct)则(PC)rel→PC,Cy=CJNEA,#data,rel该指令执行的过程如下:①(A)=data则(PC)→PC,Cy=②(A)>data则(PC)rel→PC,Cy=③(A)<data则(PC)rel→PC,Cy=CJNERn,#data,rel该指令执行的过程如下:①(Rn)=data则(PC)→PC,Cy=②(Rn)>data则(PC)rel→PC,Cy=③(Rn)<data则(PC)rel→PC,Cy=CJNERi,#data,rel该指令执行的过程如下:①((Ri))=data则(PC)→PC,Cy=②((Ri))>data则(PC)rel→PC,Cy=③((Ri))<data则(PC)rel→PC,Cy=这组指令的功能是比较两个操作数的大小如果它们的值不相等则跳转。当第一操作数内容小于第二操作数的内容则置位进位标志Cy否则清零Cy。()减不为跳转指令DJNZRn,rel该指令执行过程如下:①(PC)PC②(Rn)→Rn③若(Rn)≠则(PC)rel→PC若(Rn)=则循环结束程序往下执行DJNZdirectrel单片机C语言开发详解该指令执行过程如下:①(PC)PC②(direct)→direct③若(direct)≠则(PC)rel→PC若(direct)=则循环结束程序往下执行这组指令的功能是程序每执行一次本指令将其第一操作数所指向的地址单元的内容减然后判断其值是否为若不为则转移到目的地址继续执行循环程序若为则结束循环程序段的执行程序往下执行。调用和返回指令调用和返回指令如下所示。()短调用指令ACALLaddr该指令执行过程如下:①(PC)PC②(SP)SP,(PC~)→(SP),PC低位压栈③(SP)SP,(PC~)→(SP),PC高位压栈④addr~→PC~这是KB寻址范围内的无条件短调用指令所调用的目标地址必须与ACALL的下一条指令的第一个字节在同一个KB范围内这是因为调用的目的地址ACALL的下一条指令的第一个字节的高位addr~相同。这条指令隐含两次压栈操作压栈时先压PC的低位后压PC高位。这条指令是为与MCS兼容而保留的指令现在一般很少使用。()长调用指令LCALLaddr该指令执行过程如下:①(PC)PC②(SP)SP,(PC~)→(SP),PC低位压栈③(SP)SP,(PC~)→(SP),PC高位压栈④addr~→PC这条指令是无条件调用由addr提供的位目标地址所指定的子程序即子程序的首地址可设置在KB程序存储器地址空间的任何位置。这条指令隐含两次压栈操作压栈时先压PC的低位后压PC高位。()从子程序返回指令RET该指令的执行过程如下:①((SP))→PC~②(SP)SP③((SP))→PC~④(SP)SP这条指令的功能是当程序执行到本指令时表示结束子程序的执行返回到调用子程序的指令(ACALL或LCALL)的下一条指令处(端点)继续往下执行。这条指令隐含两次弹栈操作弹栈时先弹PC的高位后弹PC低位。第章ATS单片机的指令系统()从中断返回指令RETI该指令执行的过程如下:①((SP))→PC~②(SP)SP③((SP))→PC~④(SP)SP这条指令除了完成RET指令的功能外还清除内部相应的中断状态寄存器触发器(该触发器是不可寻址的由CPU响应中断时置位指示CPU当前是否处理高级或低级中断)。因此中断服务程序一般以RETI指令结束。CPU执行RETI指令后至少需再执行一条指令才能响应新的中断请求。同样这条指令隐含两次弹栈操作弹栈时先弹PC的高位后弹PC的低位。空操作指令空操作指令如下所示。NOP(PC)PC该指令除了完成PC内容加外不影响其他寄存器和标志位。该指令常用来产生一个机器周期的延时。ATS单片机的位操作指令MCS系列单片机内有一个布尔处理机它具有一套处理位变量的指令集它以进位标志Cy作为累加器C以RAM地址H~FH单元中的位和地址为的倍数的特殊功能寄存器的位地址单元作为操作数进行位变量的传送、位状态控制、修改和位逻辑操作等操作。这类指令有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC种操作助记符。在汇编语言中位地址的描述方式有多种如下所示。—直接位地址方式。如DH。—操作符号方式(特殊功能寄存器名)。如PSW、(DH)。—位地址方式。如RS。—用户定义方式。如用伪指令bit定义代码如下:GZREGbitRS经定义后允许指令中用GZREG代替RS。位数据传送指令位数据传送指令如下所示。①MOVC,bit(bit)→Cy②MOVbit,CCy→(bit)这组指令的功能是把由源操作数指向的位变量送到目的操作数指定的位单元中。其中以进位标志Cy作为累加器C即其中一个操作数为位累加器C另一个操作数可以是任何直接寻址的单片机C语言开发详解位(如RAM地址H~FH单元中个位地址和地址为的倍数的特殊功能寄存器的位地址)。该指令不影响其他寄存器或标志位。第章ATS单片机的指令系统位变量修改指令位变量修改指令如下所示。①CLRC②CLRbit③CPLC④CPLbit⑤SETBC⑥SETBbit这组指令的功能分别是清零、取反、置位进位标志位或直接寻址位不影响其他寄存器或标志位。位变量逻辑与、或指令位变量逻辑与、或指令如下所示。①ANLC,bit(Cy)∧(bit)→Cy②ANLC,bit(Cy)∧(bit)→Cy③ORLC,bit(Cy)∨(bit)→Cy④ORLC,bit(Cy)∨(bit)→Cy这组指令的功能是把位累加器C的内容与直接地址的内容进行逻辑与、或操作结果送到位累加器C中。第二操作数前的斜杠“”表示对该位取反后再参与逻辑运算但该位原来的值不发生改变。位变量条件转移指令位变量条件转移指令如下所示。①JCrel若Cy=则PCrel→PC若Cy=则PCPC②JNCrel若Cy=则PCrel→PC若Cy=则PCPC③JBbit,rel若(bit)=则PCrel→PC若(bit)=则PCPC④JNBbit,rel若(bit)=则PCrel→PC若(bit)=则PCPC⑤JBCbit,rel若(bit)=则PCrel→PC且置(bit)=,若(bit)=则PCPC这组指令的功能是如满足条件则转移到目标地址去执行不满足条件则顺序执行下一条指令。应特别注意目的地址在下一条指令的起始地址为中心的B范围内(B~B)。在用汇编语言编写程序时为了容易看懂程序偏移量rel往往用一个标号来代替汇编时由汇编程序自动计算出偏移字节数并填入指令代码中。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/20

AT89C51指令系统

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利