单片机原理及应用陈高锋 项目3 51单片机指令系统课件_第1页
单片机原理及应用陈高锋 项目3 51单片机指令系统课件_第2页
单片机原理及应用陈高锋 项目3 51单片机指令系统课件_第3页
单片机原理及应用陈高锋 项目3 51单片机指令系统课件_第4页
单片机原理及应用陈高锋 项目3 51单片机指令系统课件_第5页
已阅读5页,还剩40页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目351单片机指令系统3.1指令系统概述

所谓指令,就是指挥计算机工作的基本操作命令。计算机所能执行的基本操作命令的集合就构成了计算机的指令系统。我们按照一定的目的编写的计算机程序,实际就是各种指令的组合。 机器语言、汇编语言、高级语言项目351单片机指令系统3.1.1指令的格式

格式:[标号:]<操作码>[操作数];[注释]1.标号:也称标识符,由用户自行定义,由1~8个字符组成,必须以字母开头,其余字符可以是字母或是数字等。2.操作码:也称指令助记符,它规定了指令的功能。3.操作数:指令的操作对象,规定了参与操作的数据的来源或操作结果存放的地点,大多为1~2个,个别指令有3个(如CJNE等)。4.注释:指令语句的说明性文字,必须以“;”开始,其目的便于编程人员的阅读和交流,它不是指令的功能部分,可以省略。例如:LOOP:MOVA,#05H;累加器A中送入数据05H项目351单片机指令系统3.1.2指令系统的符号说明Rn:表示当前选定寄存器组的工作寄存器R0~R7;Ri:表示作为间接寻址的地址指针R0~R1;#data:表示8位立即数,即00H~FFH;#data16:表示16位立即数,即0000H~FFFFH;addr16:表示16位地址,用于64K范围内寻址,通常也可以用字符串表示;addr11:表示11位地址,用于2K范围内寻址,通常也可以用字符串表示;direct:表示8位直接地址,可以是内部RAM区的某一单元或某一专用寄存器地址;Rel:表示带符号的8位偏移量(-128~+127),通常也可以用字符串表示;Bit:表示位寻址区的直接寻址位或者是可位寻址的特殊功能寄存器的位地址;项目351单片机指令系统3.1.3寻址方式

所谓寻址方式就是获得操作数的方式问题。由于指令给出操作数的方式不同,因此就形成不同的寻址方式。寻址方式越多,操作就越方便,控制就越灵活。寻址方式是看提供操作数中源操作数的性质来看的,与目的操作数无关。1.立即寻址 指令中给出的是操作数本身。在指令格式中有两种形式:即8位和16位立即数两种表示方法用“#”作为前缀。例如:MOVA,#100;将立即数100(64H)送入累加器AMOVR0,#32H;将立即数32H送入到R0中MOV30H,#40H;将立即数40H送入数据存储器30H单元中 上述三条指令执行完后,累加器A中数据为立即数据64H,R0寄存器中数据为32H,数据存储器30H单元数据为40H。项目351单片机指令系统2.直接寻址 指令中给出的是操作数所在的单元地址,通过单元地址找到这个操作数,这就是直接寻址。寻址范围只限内部RAM低128单元(即00H~7FH)和特殊功能寄存器。例如:MOVA,40H;将内部数据存储器40H单元中的数据传送到累加器A中MOVA,P1;将特殊功能寄存器P1的数据传送到累加器A中3.寄存器寻址 指令中给出的是操作数在一个寄存器中,以寄存器的内容作为操作数,找到了制定的寄存器,就等于找到了操作数,这就是寄存器寻址方式,通用寄存器指A、B、DPTR以及R0~R7,工作寄存器R0~R7常用于寄存器寻址。例如:MOVA,R0;将R0中的数据传送到累加器A中项目351单片机指令系统4.寄存器间接寻址 指令中给出的是操作数的单元地址,这个单元地址放在一个寄存器中,通过寄存器找到这个操作数,也就是说操作数是通过寄存器间接得到的,所以叫寄存器间接寻址方式。 例:假定寄存器R0中的内容是40H,而内部RAM中40H单元的内容是62H,则执行指 令‘MOVA,@R0’后,R0中内容不变,A中内容变为62H,其指令操作过程示意图如图3-1所示。62H62H40HR040HA图3-1寄存器间接寻址示意图项目351单片机指令系统5.变址寻址 指令中给出的是操作数的单元的复合地址。即基址寄存器加变址寄存器的间接寻址方式。通常是以数据指针寄存器DPTR或者程序计数器PC作为基本地址,累加器A作为变址,两者的内容相加形成16位程序存储器地址。简单的说,指令的立脚点DPTR中有一个数,A中有一个数,执行指令时,将A和DPTR中的数加起为,就成为要查找单元的地址。 变址寻址方式仅使用于程序存储器(ROM)。 例:假定累加器A中的内容是05H,而DPTR中的内容是2100H,程序存储器2105H处的内容是3FH,则执行指令‘MOVCA,@A+DPTR’后,DPTR中的内容不变,A中的内容变为3FH,其指令操作过程示意图如图3-2所示。05H00H21HDPTR+A图3-2变址寻址示意图3FH2105HROM3FH项目351单片机指令系统6.位寻址

MCS-51单片机具有位寻址功能,即指令给出的不再是单元地址,而是8位中的一位地址,这种寻址方式就是位寻址方式。通常位寻址方式中都出现布尔累加器C。寻址范围包括内部RAM20H~2FH位寻址区中的128位和特殊功能寄存器(SFR)中11个可以按位寻址特殊功能寄存器的83位。 位寻址有4种表示方式:

1)直接给出位地址。例如:

MOVC,2FH

其中C是累加位,2FH是位地址。

2)给出单元地址与位地址的组合。例如:

MOVC,22H.6

其中,22H.6表示22H单元地址中的第6位。

3)特殊功能寄存器符号与位的组合。例如:

MOVC,P1.3

其中,P1.3表示Pl口的第3位。

4)给出特殊功能寄存器中位的符号。例如:

MOVC,AC

其中AC即程序状态字PSW中的D6位的专用符号。项目351单片机指令系统7.相对寻址方式 相对寻址是在相对转移指令中使用的寻址方式。相对转移指令需要人为地改变程序计数器PC的值,以改变程序执行的顺序。相对寻址,就是给出相对于PC当前所指位置的偏移量,以使程序“跳转”到新的位置执行。 例如,在100OH处有这样一种“短转移”指令,rel=05H,则执行指令

1000H:SJMPrel

后,程序转移到1007H处继续执行。执行该指令前,PC本来指向该指令的起始地址1000H。该指令占两个字节,所以取出指令后,PC指向1002H。rel即相对于此地址的偏移量,其目标地址为PC+2+rel=1000+2+5=1007H。项目351单片机指令系统3.1.4单片机指令的分类

MCS-5l系列单片机指令系统由111条指令组成。其中,若按指令机器码的字节数来分,可以分为单字节指令(49条)、双字节指令(45条)、3字节指令(17条). 从指令的执行时间(机器周期)来看,单周期指令有64条,双周期指令有45条,还有2条指令(乘、除法运算)是4个周期。 根据操作功能的不同,整个指令系统分为以下五大类指令:1.数据传送类指令(28条),2.算术运算类指令(24条)。3.逻辑运算及移位类指令(25条)。4.控制转移类指令(17条)。5.布尔变量操作类指令(17条)。项目351单片机指令系统3.2数据传送类指令3.2.1内部RAM数据传送指令 内部RAM数据传送,是指单片机内部的各寄存器和存储器之间的数据传送。根据目的操作数的不同,又分为以下几种类型。

1.以累加器A为目的操作数的指令

MOVA,Rn;A←(Rn)

MOVA,direct;A←(direct)

MOVA,@Ri;A←((Ri)) MOVA,#data;A←data项目351单片机指令系统2.以寄存器Rn为目的操作的指令

MOVRn,A;Rn←(A)MOVRn,direct;Rn←(direct)MOVRn,#data;Rn←data这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。3.以直接地址为目的操作数的指令MOVdirect,A;direct←(A)MOVdirect1,direct2;direct1←(direct2)MOVdirect,@Ri;direct←((Ri))MOVdirect,#data;direct←data这组指令功能是把源地址单元中的内容送入直接地址所指定的内部RAM单元中,源操作数不变。项目351单片机指令系统4.以间接地址为目的操作数的指令MOV@Ri,A;((Ri))←(A)MOV@Ri,#data;((Ri))←dataMOV@Ri,direct;((Ri))←direct

这里不是将源操作数送给Ri,而是送到以Ri的内容为地址的内部RAM单元中。例如:

MOV@R1,#100;将立即数100送入,以R1内容作为地址的内存单元中。若R1=32H,执行完本指令后,R1值不变,32H单元的内容变为100。【特别提示】 若立即数以A、B、C、D、E或F开头,需要在前面加上0,例如FFH,在指令中应写成0FFH。项目351单片机指令系统5.以DPTR为目的操作数的指令 MOVDPTR,#data16;DPTR←data16 8051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例如:

MOVDPTR,#1234H

执行完了该指令之后,DPH中的值为12H,DPL中的值为34H。反之,如果我们分别向DPH,DPL送数,则结果也一样。如有下面两条指令:MOVDPH,#35HMOVDPL,#12H则就相当于执行了MOVDPTR,#3512H。项目351单片机指令系统3.2.2外部RAM的数据传递指令

这类指令是指对单片机外部扩展的RAM进行数据存取的指令,而访问外部RAM只能使用间接寻址的方式。【特别提示】 在51单片机中,与外部存储器RAM打交道的只可以是累加器A。所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。 另外,在MOV指令后面增加了“X”,表示对外部RAM的数据传送。1.使用DPTR间接寻址MOVXA,@DPTR;A←((DPTR))MOVX@DPTR,A;((DPTR))←(A) 前一条指令的功能是,将DPTR所指的外部RAM地址单元内容送给A;第二条指令的功能则是将A的值送到外部RAM地址单元中去,由于DPTR是16位数据指针,所以它的可址范围是2^16=64KB(0000H~FFFH)。项目351单片机指令系统2.使用Ri间接寻址MOVXA,@Ri;A←((Ri))MOVX@Ri,A;((Ri))←A

这两条指令与上述使用的DPTR间接寻址的指令功能基本相同,不过因为由于Ri(即R0或R1)只是一个8位的寄存器,所以只提供低8位地址,可寻址的范围仅仅外部RAM中的低256个单元(00H~FFH)。 编程实现将外部RAM中01H单元的数据与02H单元数据互换。项目351单片机指令系统3.2.3ROM数据传送指令 这里的ROM(程序存储器),既包括外部ROM,也包括内部ROM,单片机ROM统一编址,指令不用加以区分。另外,ROM只能读不能写,所以数据传送是单向的,即从ROM中读取数据,并只能送入累加器A中。MOVCA,@A+DPTR;A←((A)+(DPTR))MOVCA,@A+PC;A←((A)+(PC))

这类指令属于变址寻址方式,使用DPTR或PC为基址寄存器,寻址范围64KB,是将ROM中的数送入A中,所以也被称为查表指令,常用此指令来查一个已做好在ROM中的表格。但是,这两条指令在使用上有些区别,当使用DPTR作为基址寄存器时,由于事先可以给DPTR赋64KB范围内的任意值,与A相加后的寻址范围可以是整个ROM的64KB空间,使用很方便;而当使用PC作为基址寄存器时,由于PC有严格的当前值,A是8位无符号数,只能在当前指令的256个单元范围内进行查表。项目351单片机指令系统3.2.4数据交换指令 数据交换指令是指单片机内部RAM单元与累加器A的内容进行交换,分为整个字节交换、半个字节交换以及累加器A半字节交换等几种。1.字节交换指令XCH

A,Rn ;(A)←→(Rn)XCH

A,direct;(A)←→(direct)XCH

A,@Ri ;(A)←→((Ri))以上指令结果影响程序状态字寄存器PSW的P标志。2.半字节交换指令指的是内部RAM单元与A之间进行低4位数据交换。XCHDA,@Ri ;(A)3-0←→((Ri))3-0项目351单片机指令系统3.2.5堆栈指令 堆栈是用户自己设定的内部RAM中的一块专用存储区,向栈里存取数据的操作成为堆栈操作。存放数据称为“入栈”,取出数据称为“出栈”。堆栈操作必须是字节操作,且只能直接寻址。PUSHdirect;SP←(SP)+1,(SP)←(direct)POPdirect;(direct)←((SP)),SP←(SP)-1

第一条指令称之为推入,就是将direct中的内容送入堆栈中。指令执行分为两步:第一步先将SP+1,第二部将direct中的数据传递到SP中的值为地址的RAM单元中,所以说,当入栈的数据增多时,SP永远指向已入栈数据的最高地址处,或是叫做“栈顶”的地方。项目351单片机指令系统3.3算术运算指令

MCS-5l指令系统有丰富的算术运算类指令,算术运算类指令一共有24条,可以分为不带进位加法、带进位加法、带借位减法、加1、减1、乘、除和十进制调整指令等。主要完成加、减、乘、除四则运算以及增量、减量和十进制调整等操作。同时执行过程中会影响到程序状态字PSW中的某些位,例如进位位Cy、辅助进位标志AC、溢出标志OV以及奇偶校验标志位等。项目351单片机指令系统3.3.1加法指令加法指令可以归纳为不带进位加法指令、带进位加法指令以及加1指令等三类。1.不带进位加法指令(4条)ADDA,#data;(A)+data→AADDA,Rn;(A)+(Rn)→AADDA,@Ri;(A)+((Ri))→AADDA,direct;(A)+(direct)→A

这些指令的基本功能是,将源操作数与累加器A中操作数相加,并将相加后的结果送到累加器A中。运算的结果会影响PSW标志位,情况如下:进位标志位CY:和的D7位有进位时,(CY)=l,否则(CY)=0;辅助进位标志位AC:和的D3位有进位时,(AC)=l,否则(AC)=0;溢出标志位OV:和的D7、D6位只有一个有进位时,(OV)=1;和的D7、D6位同时有进位或同时无进位时,(OV)=0,表示溢出。溢出说明运算的结果超出了数值所允许的范围,如两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果,此时(OV)=1。奇偶标志位P:当累加器ACC中“l”的个数为奇数时,(P)=1,为偶数时,(P)=0。项目351单片机指令系统2.带进位加法指令(4条)ADDCA,#data;(A)+data+(Cy)→AADDCA,Rn;(A)+(Rn)+(Cy)→AADDCA,@Ri;(A)+((Ri))+(Cy)→AADDCA,direct;(A)+(direct)+(Cy)→A

这些指令的基本功能是,将源操作数、累加器A中操作数以及进位标志Cy的值相加相加,并将相加后的结果送到累加器A中。 带进位的加法法运算指令常用于多字节的加法运算中。例如两个字节数的相加运算,当高位字节相加时,就需要考虑低位字节相加后可能产生的进位。项目351单片机指令系统3.加1指令(5条)INCA;A←(A)+1INCRn;Rn←(Rn)+1INCdirect;direct←(direct)+1INC@Ri;(Ri)←((Ri))+1INCDPTR;DPTR←(DPTR)+1

这组指令的功能是使源操作数的值加1,并且将结果送回原来的单元。加1指令比较简单,执行比较快,只有INCA影响PSW的奇偶校验位,其余指令不影响标志位的状态。例如,(A)=0FFH,执行指令INCA后,变为00H,但是溢出标志位没有变化。项目351单片机指令系统3.3.2减法指令减法指令包括带借位减法指令和减1指令两类。1.带借位减法指令(4条)SUBBA,Rn;A←(A)–(Rn)–(CY)SUBBA,direct;A←(A)–(direct)–(CY)SUBBA,@Ri;A←(A)–((Ri))–(CY)SUBBA,#data;A←(A)–data–(CY) 这些指令的功能是将A中的值减去其后面的值,再减上Cy的值,最终结果送回到A中。 减法指令只有带借位的减法,没有不带借位的减法,如果进行不带借位的减法运算,可以先输入一条指令“CLRC”,将Cy清零。在使用SUBB指令时,如果系统没有特别指出Cy值时,第一次相减时一定要清零借位标志位Cy。即“CLRC”。项目351单片机指令系统2.减1指令(4条)DECA;A←(A)-1DECRn;Rn←(Rn)-1DECdirect;direct←(direct)-1DEC@Ri;(Ri)←((Ri))-1

这组指令的功能是使源操作数的值减1,并且将结果送回原来的单元。与加1指令一样,只有DECA影响PSW的奇偶校验位,其余指令不影响标志位的状态。项目351单片机指令系统3.3.3乘除法指令 乘除法指令执行时需要4个机器周期,是指令系统中执行时间最长的指令。1.乘法指令

MULAB;BA←(A)×(B)

指令的功能是把累加器A和寄存器B中两个8位无符号整数相乘,并把乘积的高8位存于寄存器B中,低8位存于累加器A中。 乘法运算指令执行时会对标志位产生影响:CY标志总是被清0,即CY=0;OV标志则反映乘积的位数,若OV=1,表示乘积为16位数(即乘积的结果大于FFH,B中的内容不为0);若OV=0,表示乘积为8位数。 例如,若(A)=50H,(B)=05H,则执行指令MULAB后,(A)=90H,(B)=01H,表明乘积的结果0190H。项目351单片机指令系统2.除法指令

DIVAB;A商,B余←(A)÷(B) 指令的功能是把累加器A和寄存器B中的两个8位无符号整数相除,所得商的整数部分存于累加器A中,余数存于B中。 除法指令执行过程对标志位的影响:CY位总是被清0,OV标志位的状态反映寄存器B中的除数情况,若除数为0,则OV=1,表示本次运算无意义,否则,OV=0。 例如,若(A)=51H,(B)=05H,则执行指令DIVAB后,(A)=10H(商),(B)=01H(余数)。项目351单片机指令系统3.3.4十进制调整指令 这是一条专用指令,用于对BCD码十进制加法运算的结果进行修正。DAAMOVA,#75HMOVR3,#69HADDA,R3;(A)=DEH,CY=0MOVB,A;(B)=DEHDAA;(A)=44H,CY=1项目351单片机指令系统3.4逻辑运算指令3.4.1累加器A的逻辑操作指令1.累加器A清0 CLRA;A←00H2.累加器A取反 CPLA;这两条指令的功能是,对累加器A清零或取反后,结果仍存入A中。3.累加器A循环左移

RLA利用左移指令,可实现对A中的无符号数乘2的目的。D7←D0项目351单片机指令系统4.累加器A带进位循环左移 RLCA5.累加器A循环右移 RRA

对累加器A进行的循环右移,可实现对A中无符号数的除2运算。6.累加器A带进位循环右移 RRCA7.累加器A半字节交换SWAPA功能是将累加器A中内容的高4位与低4位互换。项目351单片机指令系统3.4.2逻辑运算指令1.逻辑与指令(6条)ANLA,Rn;A←(A)∧(Rn)ANLA,direct;A←(A)∧(direct)ANLA,@Ri;A←(A)∧((Ri))ANLA,#data;A←(A)∧#dataANLdirect,A;direct←(direct)∧(A)ANLdirect,#data;direct←(direct)∧#data 这些指令的功能是将目的操作数和源操作数按位进行逻辑与操作,结果送目的操作数。在程序设计中,逻辑与指令主要用于对目的操作数中的某些位进行屏蔽(清0)。方法是:将需屏蔽的位与“0”相与,其余位与“1”相与即可。项目351单片机指令系统2.逻辑或指令(6条)ORLA,Rn;A←(A)∨(Rn)ORLA,direct;A←(A)∨(direct)ORLA,@Ri;A←(A)∨((Ri))ORLA,#data;A←(A)∨#dataORLdirect,A;direct←(direct)∨(A)ORLdirect,#data;direct←(direct)∨#data 功能是将目的操作数和源操作数按位进行逻辑或操作,结果送目的操作数。 逻辑或指令可对目的操作数的某些位进行置位。方法是:将需置位的位与“1”相或,其余位与“0”相或即可,常用于组合数据。项目351单片机指令系统3.逻辑异或指令(6条)XRLA,Rn;A←(A)⊕(Rn)XRLA,direct;A←(A)⊕(direct)XRLA,@Ri;A←(A)⊕((Ri))XRLA,#data;A←(A)⊕#dataXRLdirect,A;direct←(direct)⊕(A)XRLdirect,#data;direct←(direct)⊕#data 功能是将目的操作数和源操作数按位进行逻辑异或操作,结果送目的操作数。 逻辑异或指令可用于对目的操作数的某些位取反,而其余位不变。方法是:将要取反的这些位和“1”异或,其余位则和“0”异或即可。项目351单片机指令系统3.5控制转移指令

在很多情况下,程序需要循环、分支或调用子程序等,这都要人为的改变程序的执行顺序,利用控制转移指令就可以达到这样的目的。 控制转移类指令分为无条件转移、条件转移及子程序调用与返回指令等。3.5.1无条件转移指令 没有规定转移条件的指令称无条件转移指令,MCS-51单片机有4条指令。 1.长转移指令 LJMPaddr16;addr16→PC 该指令的功能是,将指令码中的16位地址送入程序计数器PC中,使程序跳转到addr16目的地址的地方执行。addr16表示16位目的地址,通常用标号代替。项目351单片机指令系统2.绝对转移指令 AJMPaddr11;(PC)+2→PC,addr11→PC10~PC0 这里的addr11是11位的绝对地址,其最小值是0000H,最大值是07FFH,所以寻址范围是2KB。该指令的功能是,程序跳转到addr11目的地址的地方执行,通常用标号代替。3.相对转移指令

SJMPrel;(PC)+2+rel→PC 该指令的功能是,程序跳转到rel目的地址的地方执行。rel表示8位目的地址,通常用标号代替。

SJMP$;$就是当前行,就是跳转到当前行继续执行。即一个死循环。

主要用处就是等待内外的中断。4.散转指令 JMP@A+DPTR;(A)+(DPTR)→PC 该指令的功能是,程序跳转到(A+DPTR)为目的地址的地方执行。由于累加器A和数据指针DPTR都可以赋值,因此使用很灵活,其中,DPTR的内容可以作为基地址,是一个相对固定的值,以A的内容作为变址,根据A的不同值,可使程序转移到不同的地方。项目351单片机指令系统3.5.2条件转移指令 条件转移指令是指,当程序在处理这类命令时,需要判断是否要满足某个条件,若条件满足就转移,条件不满足就不转移,仍按顺序执行程序。1.累加器判零转移 这类指令是判断A内容是否为0作为转移的条件。JZrel;若(A)=0,则PC←(PC)+2+relJNZrel;若(A)≠0,则PC←(PC)+2+rel 第一指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?我们可以这样理解:JZ标号,即转移到标号处。项目351单片机指令系统2.比较转移指令

数值比较转移指令是将两个操作数进行比较,以比较的结果作为是否转移的条件。CJNEA,#data,rel;若(A)≠data,则PC←(PC)+3+relCJNEA,direct,rel;若(A)≠direct,则PC←(PC)+3+relCJNERn,#data,rel;若(Rn)≠data,则PC←(PC)+3+relCJNE@Ri,#data,rel;若((Ri))≠data,则PC←(PC)+3+rel 第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就顺序执行(执行本指令的下一条指令),如果不相等,就转移。同样地,我们可以将rel理解成标号,即:CJNEA,#data,标号。编程时rel常常用标号代替。 这样利用这条指令,我们就可以判断两数是否相等,这在很多场合是非常有用的。另外,该指令还知道这两个操作数的大小,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用Cy(进位位)来实现的。若指令左边的操作数≥右边的操作数,则Cy=0,否则Cy=1。项目351单片机指令系统3.循环转移指令 循环转移指令又叫减1条件转移指令,常用于控制程序的转移次数。

DJNZRn,rel;(Rn)-1→Rn,;若(Rn)≠0,则(PC)+2+rel→PC,转移执行;若(Rn)=0,则(PC)+2→PC,顺序执行

DJNZdirect,rel;(direct)-1→Rn,;若(direct)≠0,则(PC)+2+rel→PC,转移执行;若(direct)=0,则(PC)+2→PC,顺序执行 该指令的功能是,是先将操作数(Rn或者direct)的内容减1,并保存减1的结果,如果减1后的结果不为0就转移,否则就顺序执行。项目351单片机指令系统3.5.3子程序调用返回指令 1.子程序的概念所以我们通常把能完成一定功能的且能被调用执行并能返回调用程序的程序叫子程序。调用子程序的程序叫主程序,被调用的叫子程序。在MCS-51系统中,子程序和主程序是相对的两个概念。主程序调用了子程序,子程序执行完之后必须再回到主程序继续执行,不能“一去不回头”,那么回到什么地方呢?是回到调用子程序的下面一条指令地址处(称为断点地址)继续执行,此外子程序本身也可以调用另外的子程序,称为子程序嵌套,

2.子程序调用指令 有两种调用指令,即绝对调用和长调用指令。LCALLaddr16;长调用指令ACALLaddr11;短调用指令 这两条指令的区别在于调用子程序的目标地址范围不同,长调用指令的寻址范围是64KB,短调用的寻址范围是2KB,addr16和addr11都可以用标号代替。项目351单片机指令系统3.返回指令 有两种返回指令,即子程序返回和中断返回指令。

RET;子程序返回指令 这是子程序的最后一条指令。该指令的功能是恢复调用子程序时的断点地址,以便从子程序返回主程序继续执行。

RETI;中断返回指令 这也是子程序的最后一条指令,不过只是用于中断服务程序的末尾,以便

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论