资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,第,3,章,51,系列指令系统,第,3,章,51,系列指令系统和,程序设计方法,3.1,寻址方式,3.2,指令系统,.,指令是计算机执行某种操作的命令。,可分为两种形式:,机器语言级:,用二进制代码(机器码、指令码)表示,可被计算机直接识别并加以分析和执行。,汇编语言级:,用助记符表示,便于用户编程及识别,但需经过汇编成为机器语言后才能被计算机直接识别。,指令和助记符:,.,4,个区段之间要用分隔符分开,:,标号与操作码之间用,“,:,”,隔开,操作码与操作数之间用空格隔开,操作数与注释之间用,“,;,”,隔开,如果操作数有两个以上,则在操作数之间要用逗号“,”,隔开,(,乘法指令和除法指令除外,),。,汇编语言指令的格式如下所示,:,标号:操作码 操作数;注释,.,1.,单字节指令,单字节指令格式由,8,位二进制编码表示,例如,:,CLR AE4H,2.,双字节指令,双字节指令格式由两个字节组成,操作码和操作数,例如,:,MOV A,10H74H 10H,3.,三字节指令,三字节指令格式中,第一个字节为操作码,后两个字节为操作数,例如,:,MOV 40H,30H75H 40H 30H,.,3.1,寻址方式,所谓寻址方式,就是寻找操作数地址的方式,在用汇编语言编程时,数据的存放、传送、运算都要通过指令来完成。编程者必须自始至终都要十分清楚操作数的位置,以及如何将它们传送到适当的寄存器去参与运算。每一种计算机都具有多种寻址方式。寻址方式的多少是反映指令系统优劣的主要指标之一。,.,在,MCS-51,单片机指令系统中,有以下,7,种寻址方式,:,(,1,)立即寻址,;,(,2,)直接寻址,;,(,3,)寄存器寻址,;,(,4,)寄存器间接寻址,;,(,5,)基址寄存器加变址寄存器间接寻址,;,(,6,)相对寻址,;,(,7,)位寻址。,.,1.,立即寻址,立即寻址方式是指操作数包含在指令字节中。跟在指令操作码后面的数就是参加运算的数,该操作数称为立即数。立即数有一字节和二字节两种可能,例如指令,:,MOV A,3AH,MOV DPTR,0DFFFH,上述两条指令均为立即寻址方式,第一条指令的功能是将立即数,3AH,送累加器,A,中,第二条指令的功能是将立即数,0DFFFH,送数据指针,DPTR,中(,0DFHDPH,0FFHDPL,)。,.,2.,直接寻址,在指令中直接给出操作数的地址,这种寻址方式就属于直接寻址方式。在这种方式中,指令的操作数部分直接是操作数的地址。,在,MCS-51,单片机指令系统中,直接寻址方式中可以访问,3,种存储器空间:,(1),内部数据存储器的低,128,个字节单元(,00H,7FH,)。,(2),特殊功能寄存器,SFR,。,SFR,只能用,直接寻址,方式进行访问。,(3),位地址空间。,.,3.,寄存器寻址,在该寻址方式中,参加操作的数存放在寄存器里。寄存器包括,8,个工作寄存器,R0,R7,累加器,A,寄存器,B,、数据指针,DPTR,和布尔处理器的位累加器,C,。,例如,:,INC DPTR,INC R0,MOV A,,,R0,.,在这种寻址方式中,寄存器的内容为操作数的地址。寄存器间接寻址只能使用寄存器,R0,、,R1,作为地址指针,寻址内部,RAM,区的数据,;,当访问外部,RAM,时,可使用,R0,、,R1,及,DPTR,作为地址指针。寄存器间接寻址符号为“,”,4.,寄存器间接寻址,例如,:,.,5.,基址寄存器加变址寄存器间接寻址,这种寻址方式用于访问程序存储器中的数据表格,它以基址寄存器,DPTR,或,PC,的内容为基本地址,加上变址寄存器,A,的内容作为操作数的地址。,(,51,系列独有),操作数的地址,=,(基址寄存器),+,(变址寄存器),DPTR,或,PC,A,*,可访问外部程序存储器,64K,空间,但只能读出,不能写入;,*该寻址方式特别适合查表;(查表指令),*该寻址方式的指令均为,一字节,指令。,.,例:,MOVC A,,,A+DPTR,例如:,MOVC A,A+DPTR,;,(A)(A)+(DPTR),JMP A+DPTR,MOVC A,A+PC,.,6.,相对寻址,在,MCS-51,指令系统中设有转移指令,分为直接转移和相对转移指令,在相对转移指令中采用相对寻址方式。这种寻址方式是以,PC,当前值为基本地址,加上指令中给定的偏移量作为转移地址。指令中给出的偏移量是一个,8,位带符号的常数,可正可负,其范围为,128,+127,。,PC,当前值就是相对转移指令所在地址,即:,PC,当前值,=,源地址,+,转移指令字节数。,目的地址,=,(源地址,+,转移指令字节数),+rel,=PC,当前值,+rel,.,图,33,相对寻址示意图,指令,JZ 08H,指令,JZ F4H,.,7.,位寻址,该种寻址方式中,操作数是内部,RAM,单元中某一位的信息。,位地址的表示方法:,(,1,)直接用位地址码表示,00H,FFH,;,(,2,)采用,单元号,.,位号,表示,如,2CH,.,2,,,24H,.,5,;,(,3,)对,SFR,表示为,寄存器名,.,位号,,如,PSW,.,2,,,ACC,.,5,;,(,4,)用,伪指令,定义。(,BIT,指令),.,表,31 7,种寻址方式及使用空间,.,3.2,指令系统,指令分类,1.,按指令的功能,MCS-51,指令系统可分为下列,5,类,:,(1),数据传送,;,(,29,条),(2),算术运算,;,(,24,条),(3),逻辑运算,;,(,24,条),(4),位操作,;,(,17,条),(5),控制转移。(,17,条),.,2.,按指令执行的时间,MCS-51,指令系统可分为下列,3,类:,(1),单周期指令;(,63,条),(2),双周期指令;(,46,条),(3),四周期指令。(,2,条),3.,按指令字节数,MCS-51,指令系统可分为下列,3,类:,(1),单字节指令;(,45,条),(2),双字节指令;(,49,条),(3),三字节指令。(,17,条),指令系统由,42,种助记符表征,31,种指令功能,.,熟悉各种符号的含义:,Rn,当前选定的寄存器区中的,8,个工作寄存器,R0,R7,即,n=0,7,。,Ri,当前选定的寄存器区中的,2,个寄存器,R0,、,R1,i=0,、,1,。,direct,8,位内部,RAM,单元的地址,它可以是一个内部数据区,RAM,单元,(00H,7FH),或特殊功能寄存器地址,(I/O,端口、控制寄存器、状态寄存器,80H,0FFH),。,data,指令中的,8,位常数。,data,16,指令中的,16,位常数。,addr,16,16,位的目的地址,用于,LJMP#,LCALL,指令,可指向,64 KB,程序存储器地址空间。,addr,11,11,位的目的地址,用于,AJMP,ACALL,指令。目的地址必须与下一条指令的第一个字节在同一个,2 KB,程序存储器地址空间之内。,.,rel,8,位带符号的偏移量,字节,用于,SJMP,和所有条件转移指令中。偏移量相对于下一条指令的第一个字节计算,在,128,+127,范围内取值。,bit,内部数据,RAM,或特殊功能寄存器中的可直接寻址位。,DPTR,数据指针,可用作,16,位的地址寄存器。,A,累加器。,B,寄存器,用于,MUL,和,DIV,指令中。,C,进位标志或进位位。,间接寻址寄存器或基址寄存器的前缀,如,Ri,DPTR,。,/,位操作数的前缀,表示对该位取反。,(,X,),X,中的内容。,(,X,),由,X,寻址的单元中的内容。,箭头左边的内容被箭头右边的内容所代替。,.,3.2.3,数据传送类指令,注意事项:,(1),指令助记符;,(2),寻址方式及其组合;,(3),特殊指令及其用法。,功能:,(1),(源字节)(目的字节),源字节内容保持不变;,(2),(源字节),(目的字节),(3),堆栈操作,(,2,条),用不同指令访问不同的存储空间。,.,表,32,数据传送类指令助记符与操作,.,1.,数据传送到累加器,A,的指令,MOV A,Rn,MOV A,direct,MOV A,Ri,MOV A,data,这组指令的功能是:把源操作数的内容送入累加器,A,。例如,:MOV A,10H,该指令执行时将立即数,10H,送入累加器,A,中。,(源字节),;(,A,),.,2.,数据传送到工作寄存器,Rn,的指令,MOV Rn,A,MOV Rn,direct,MOV Rn,data,这组指令的功能是,:,把源操作数的内容送入当前工作寄存器区的,R0,R7,中的某一个寄存器。指令中,Rn,在内部数据存储器中的地址由当前的工作寄存器区选择位,RS1,、,RS0,确定,可以是,00H,07H,、,08H,0FH,、,10H,17H,、,18H,1FH,。例如,:MOV R0,A,若当前,RS1,、,RS0,设置为,00(,即工作寄存器,0,区,),执行该指令时,将累加器,A,中的数据传送至工作寄存器,R0(,内部,RAM 00H),单元中。,(源字节),:(,Rn,),.,3.,数据传送到内部,RAM,单元或特殊功能寄存器,SFR,的指令,MOV direct,A,MOV direct,Rn,MOV direct,direct,MOV direct,Ri,MOV direct,data,这组指令的功能是,:,把源操作数的内容送入,R0,或,R1,指出的内部,RAM,单元中。,(源字节),;(,direct,),.,4.,以寄存器间址单元为目的操作数的数据传送指令,MOV Ri,A,MOV Ri,direct,MOV Ri,data,5.16,位数据传送指令,MOV DPTR,data16,;,51,系统唯一的,16,位传送指令,(源字节),;,(,Ri),(,DPH),数据高,8,位,(,DPL),数据低,8,位,.,小结:,MOV,型指令的寻址方式的组合,图,3 1 MOV,型传送指令示意图,.,例如:设内部,RAM(30H)=40H,(40H)=10H,(10H)=00H,端口,(P1)=CAH,分析以下程序执行后各单元及寄存器、,P2,口的内容。,MOV R0,30H ;(R0)30H ,78 30,MOV A,R0 ;(A)(R0),E6,MOV R1,A ;(R1)(A),F9,MOV B,R1 ;(B)(R1),87 F0,MOV R1,P1 ;(R1)(P1),A7 90,MOV P2,P1 ;(P2)(P1),85 90 A0,MOV 10H,20H ;(10H)20H ,75 10 20,.,6.,累加器,A,与外部数据存储器之间的传送指令,MOVX A,DPTR,MOVX A,Ri,MOVX DPTR,A,MOVX Ri,A,;读外部,RAM,(外部,I/O,口输入指令),;写外部,RAM,(外部,I/O,口输出指令),.,这组指令是:在累加器,A,与外部数据存储器,RAM,单元或,I/O,口之间进行数据传送,前两条指令执行时,P3.7,引脚上输出,RD,有效信号,用作外部数据存储器的读选通信号,;,后两条指令执行时,P3.6,引脚上输出,WR,有效信号,用作外部数据存储器的写选通信号。,DPTR,所包含的,16,位地址信息由,P0(,低,8,位,),和,P2(,高,8,位,),输出,而数据信息由,P0,口传送,P0,口作分时复用的总线。由,Ri,作为间接寻址寄存器时,P0,口上分时输出,Ri,指定的,8,位地址信息及传输,8,位数据。,.,7.,堆栈操作指令,PUSH direct,POP direct,在,MCS-51,单片机的内部,RAM,中,可以设定一个先进后出的区域,称其为堆栈。在特殊功能寄存器中有一个堆栈指针,SP,它指出栈顶的位置。进栈指令的功能是,:,首先将堆栈指针,SP,的内容加,1,然后将直接地址所指出的内容送入,SP,指出的内部,RAM,单元,;,出栈指令的功能是,:,将,SP,所指出的内部,RAM,单元的内容送入由直接地址所指出的字节单元,接着将堆栈指针,SP,的内容减,1,。,按字节操作,先修改后压栈先弹栈后修改,.,例如,:,进入中断服务子程序时,把程序状态寄存器,PSW,、累加器,A,、数据指针,DPTR,进栈保护。设当前,SP,为,60H,。则程序段,PUSH PSW,PUSH ACC,PUSH DPL,PUSH DPH,执行后,SP,内容修改为,64H,而,61H,、,62H,、,63H,、,64H,单元中依次栈入,PSW,、,A,、,DPL,、,DPH,的内容。当中断服务程序结束之前,如下程序段,(SP,保持,64H,不变,),.,POP DPH,POP DPL,POP ACC,POP PSW,执行之后,SP,内容修改为,60H,而,64H,、,63H,、,62H,、,61H,单元中的内容依次弹出到,DPH,、,DPL,、,A,、,PSW,中。,MCS-51,提供一个向上升的堆栈,因此,SP,设置初值时要充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的使用。,.,8.,程序存储器内容送累加器,MOVC A,A+PC,MOVC A,A+DPTR,这是两条很有用的,查表指令,可用来查找存放在外部程序存储器中的常数表格。第一条指令是以,PC,作为基址寄存器,A,的内容作为无符号数和,PC,的内容,(,下一条指令的起始地址)相加后得到一个,16,位的地址,并将该地址指出的程序存储器单元的内容送到累加器,A,。这条指令的优点是不改变特殊功能寄存器和,PC,的状态,只要根据,A,的内容就可以取出表格中的常数。缺点是表格只能放在该条查表指令后面的,256,个单元之中,表格的大小受到限制,而且表格只能被一段程序所利用。,.,第二条指令是以,DPTR,作为基址寄存器,累加器,A,的内容作为无符号数与,DPTR,内容相加,得到一个,16,位的地址,并把该地址指出的程序存储器单元的内容送到累加器,A,。这条指令的执行结果只与指针,DPTR,及累加器,A,的内容有关,与该指令存放的地址无关,因此,表格的大小和位置可以在,64 KB,程序存储器中任意安排,并且一个表格可以为各个程序块所共用。,.,9.,字节交换指令,XCH A,Rn,XCH A,Ri,XCH A,direct,XCHD A,Ri,SWAP A,前三条指令是将累加器,A,的内容和源操作数内容相互交换,;,后两条指令是半字节交换指令,最后一条指令是将累加器,A,的高,4,位与低,4,位之间进行交换,而另外一条指令是将累加器,A,的低,4,位内容和(,Ri,)所指出的内部,RAM,单元的低,4,位内容相互交换。,.,3.2.3,算术运算类指令,表,3.1,影响标志位的指令,.,表,3.3,影响标志位的指令,.,一、加法指令,1.,普通加法指令(不带进位),ADD A,Rn,ADD A,direct,ADD A,Ri,ADD A,data,(,A,),+,(源),;(,A,),.,例如,:120,和,100,之和为,220,显然大于,127,相加时,0 1 1 1 1 0 0 0 120,0 1 1 0 0 1 0 0 100,1 1 0 1 1 1 0 0 220,+,符号位,(,最高位,),由,0,变,1,两个正数相加结果变负,实际上它是和数的最高位,符号位移入了进位标志,此时位,6,有进位而位,7,无进位,置位溢出标志,OV,结果溢出。,.,同样,120,和,100,相加,结果应为,220,显然小于,128,相加时,1 0 0 0 1 0 0 0 -120,1 0 0 1 1 1 0 0 -100,+,1 0 0 1 0 0 1 0 0 -220,符号位由,1,变为,0,两个负数相加结果变为正数,这是因为符号位移入进位标志,位,6,无进位而位,7,有进位,置位溢出标志,OV,由此可判断结果溢出。,.,2.,带进位加法指令,ADDC A,Rn,ADDC A,direct,ADDC A,Ri,ADDC A,data,这组指令的功能与普通加法指令类似,唯一的不同之处是,在执行加法时,还要将上一次进位标志,Cy,的内容也一起加进去,对于标志位的影响也与普通加法指令相同。,(,A,),+,(源),+Cy,;(,A,),.,3.,增量指令,INC A,INC Rn,INC direct,INC Ri,INC DPTR,这组指令的功能是:将指令中所指出操作数的内容加,1,。若原来的内容为,0FFH,则加,1,后将产生溢出,使操作数的内容变成,00H,但不影响任何标志。最后一条指令是对,16,位的数据指针寄存器,DPTR,执行加,1,操作,指令执行时,先对低,8,位指针,DPL,的内容加,1,当产生溢出时就对高,8,位指针,DPH,加,1,但不影响任何标志。,.,4.,十进制调整指令,DA A,这条指令对累加器,A,参与的,BCD,码加法运算所获得的,8,位结果进行十进制调整,使累加器,A,中的内容调整为二位压缩型,BCD,码的数。使用时必须注意,它只能跟在加法指令之后,不能对减法指令的结果进行调整,且其结果不影响溢出标志位。,执行该指令时,判断,A,中的低,4,位是否大于,9,和辅助进位标志,AC,是否为,“,1,”,若两者有一个条件满足,则低,4,位加,6,操作,;,同样,A,中的高,4,位大于,9,或进位标志,Cy,为,“,1,”,两者有一个条件满足时,高,4,位加,6,操作。例如,:,有两个,BCD,数,36,与,45,相加,结果应为,BCD,码,81,程序如下,:,.,MOV A,36H,ADD A,45H,DA A,这段程序中,第一条指令将立即数,36H(BCD,码,36),送入累加器,A,;第二条指令进行如下加法,:,0 0 1 1 0 1 1 0 36,0 1 0 0 0 1 0 1 45,0 1 1 1 1 0 1 1 7B,0 0 0 0 0 1 1 0 06,+,+,1 0 0 0 0 0 0 1 81,得结果,7BH;,第三条指令对累加器,A,进行十进制调整,低,4,位,(,为,0BH),大于,9,因此要加,6,得调整的,BCD,码,81,。,.,二、减法指令,1.,带进位减法指令,SUBB A,Rn,SUBB A,direct,SUBB A,Ri,SUBB A,data,这组指令的功能是,:,将累加器,A,的内容与第二操作数及进位标志相减,结果送回到累加器,A,中。在执行减法过程中,如果位,7,(,D7,)有借位,则进位标志,Cy,置,“,1,”,否则清,“,0,”,;,如果位,3,(,D3,)有借位,则辅助进位标志,AC,置,“,1,”,否则清,“,0,”,;,如位,6,有借位而位,7,没有借位,或位,7,有借位而位,6,没有借位,则溢出标志,OV,置,“,1,”,否则清“,0”,。若要进行不带借位的减法操作,则必须先将,Cy,清“,0”,。,(,A,)(源),Cy,;(,A,),.,2.,减,1,指令,DEC A,DEC Rn,DEC direct,DEC Ri,这组指令的功能是,:,将指出的操作数内容减,1,。如果原来的操作数为,00H,则减,1,后将产生下溢出,使操作数变成,0FFH,但不影响任何标志。,.,三、乘法指令,乘法指令完成单字节的乘法,只有一条指令,:,MUL AB,;(,A,),(,B,),=,(,BA,),这条指令的功能是,:,将累加器,A,的内容与寄存器,B,的内容相乘,乘积的低,8,位存放在累加器,A,中,高,8,位存放于寄存器,B,中。如果乘积超过,0FFH,则溢出标志,OV,置,“,1,”,否则清“,0”,。进位标志,Cy,总是被清“,0”,。,.,四、除法指令,除法指令完成单字节的除法,只有一条指令,:,DIV AB,;(,A,),(,B,)(,A,),(,B,),这条指令的功能是,:,将累加器,A,中的内容除以寄存器,B,中的,8,位无符号整数,所得商的整数部分存放在累加器,A,中,余数部分存放在寄存器,B,中,清,“,0,”,进位标志,Cy,和溢出标志,OV,。若原来,B,中的内容为,0,则执行该指令后,A,与,B,中的内容不定,并将溢出标志,OV,置“,1”,在任何情况下,进位标志,Cy,总是被清“,0”,。,.,一、简单逻辑操作指令,CLR A;,对累加器,A,清,“,0,”,CPL A;,对累加器,A,按位取反,RL A;,累加器,A,的内容向左环移,1,位,RLC A;,累加器,A,的内容带进位标志位向左环移,1,位,RR A;,累加器,A,的内容向右环移,1,位,RRC A;,累加器,A,的内容带进位标志位向右环移,1,位,这组指令的功能是,:,对累加器,A,的内容进行简单的逻辑操作。除了带进位标志位的移位指令外,其它都不影响,Cy,AC,OV,等标志。,3.2.4,逻辑运算类指令,.,图,3 5,移位指令操作示意图,.,二、逻辑与指令,ANL A,Rn,ANL A,direct,ANL A,Ri,ANL A,data,ANL direct,A,ANL direct,data,这组指令的功能是,:,将两个操作数的内容按位进行逻辑与操作,并将结果送回目的操作数的单元中。,.,三、逻辑或指令,ORL A,Rn,ORL A,direct,ORL A,Ri,ORL A,data,ORL direct,A,ORL direct,data,这组指令的功能是,:,将两个操作数的内容按位进行逻辑或操作,并将结果送回目的操作数的单元中。,.,四、逻辑异或指令,XRL A,Rn,XRL A,direct,XRL A,Ri,XRL A,data,XRL direct,A,XRL direct,data,这组指令的功能是,:,将两个操作数的内容按位进行逻辑异或操作,并将结果送回到目的操作数的单元中。,.,3.2.5,控制转移指令,控制转移指令共有,17,条,不包括按布尔变量控制程序转移指令(见表,3.5,)。其中有,64 KB,范围内的长调用、长转移指令,;,有,2 KB,范围内的绝对调用和绝对转移指令,;,有全空间的长相对转移及一页范围内的短相对转移指令,;,还有多种条件转移指令。由于,MCS-51,提供了较丰富的控制转移指令,因此在编程上相当灵活方便。这类指令用到的助记符共有,10,种,:AJMP,、,LJMP,、,SJMP,、,JMP,、,ACALL,、,LCALL,、,JZ,、,JNZ,、,CJNE,、,DJNZ,。,.,一、无条件转移指令,1.,短跳转指令,AJMP addr,11,这是,2KB,范围内的无条件跳转指令,执行该指令时,先将,PC+2,然后将,addr,11,送入,PC,10,PC,0,而,PC,15,PC,11,保持不变。这样得到跳转的目的地址。需要注意的是,目标地址与,AJMP,后面一条指令的第一个字节必须在同一个,2 KB,区域的存储器区内。,.,2.,相对转移指令,SJMP rel,执行该指令时,先将,PC+2,再把指令中带符号的偏移量加到,PC,上,得到跳转的目标地址送入,PC,。,3.,长跳转指令,LJMP addr16,执行该指令时,将,16,位目标地址,addr,16,装入,PC,程序无条件转向指定的目标地址。转移的目标地址可以在,64 KB,程序存储器地址空间的任何地方,不影响任何标志。,.,4.,散转指令,JMP A+DPTR,执行该指令时,把累加器,A,中的,8,位无符号数与数据指针中的,16,位数相加,结果作为下条指令的地址送入,PC,不改变累加器,A,和数据指针,DPTR,的内容,也不影响标志。利用这条指令能实现程序的散转。,.,二、条件转移指令,JZ rel;,(,A,),=0,转移,JNZ rel;,(,A,),0,转移,这类指令是依据累加器,A,的内容是否为,0,的条件转移指令。条件满足时转移(相当于一条相对转移指令),条件不满足时则顺序执行下面一条指令。转移的目标地址在以下一条指令的起始地址为中心的,256,个字节范围之内(,128,+127,)。当条件满足时,PC(PC)+N+rel,其中,(PC),为该条件转移指令的第一个字节的地址,N,为该转移指令的字节数(长度),本转移指令,N=2,。,.,三、比较转移指令,在,MCS-51,中没有专门的比较指令,但提供了下面,4,条比较不相等转移指令,:,CJNE A,direct,rel,CJNE A,data,rel,CJNE Rn,data,rel,CJNE Ri,data,rel,这组指令的功能是,:,比较前面两个操作数的大小,如果它们的值不相等则转移。转移地址的计算方法与上述两条指令相同。如果第一个操作数(无符号整数)小于第二个操作数,则进位标志,Cy,置“,1”,否则清“,0”,但不影响任何操作数的内容。,.,四、减,1,不为,0,转移指令,(循环指令),DJNZ Rn,rel,DJNZ direct,rel,这两条指令把源操作数减,1,结果回送到源操作数中去,如果结果不为,0,则转移(转移地址的计算方法同前)。,.,五、调用及返回指令,在程序设计中,通常把具有一定功能的公用程序段编制成子程序,当主程序需要使用子程序时用调用指令,而在子程序的最后安排一条子程序返回指令,以便执行完子程序后能返回主程序继续执行。,.,1.,绝对调用指令,ACALL addr,11,这是一条,2 KB,范围内的子程序调用指令。执行该指令时,先将,PC+2,以获得下一条指令的地址,然后将,16,位地址压入堆栈(,PCL,内容先进栈,PCH,内容后进栈),SP,内容加,2,最后把,PC,的高,5,位,PC,15,PC,11,与指令中提供的,11,位地址,addr,11,相连接(,PC,15,PC,11,10,0,),形成子程序的入口地址送入,PC,使程序转向子程序执行。所用的子程序的入口地址必须与,ACALL,下面一条指令的第一个字节在同一个,2 KB,区域的存储器区内。,.,2.,长调用指令,LCALL addr,16,这条指令无条件调用位于,16,位地址,addr,16,的子程序。执行该指令时,先将,PC+3,以获得下一条指令的首地址,并把它压入堆栈(先低字节后高字节),SP,内容加,2,然后将,16,位地址放入,PC,中,转去执行以该地址为入口的程序。,LCALL,指令可以调用,64 KB,范围内任何地方的子程序。指令执行后不影响任何标志。,.,3.,子程序返回指令,RET,这条指令的功能是,:,恢复断点,将调用子程序时压入堆栈的下一条指令的首地址取出送入,PC,使程序返回主程序继续执行。,4.,中断返回指令,RETI,这条指令的功能与,RET,指令相似,不同的是它还要清除,MCS-51,单片机内部的中断状态标志。,.,指令中位地址的表达形式有以下几种,:,(1),直接地址方式,:,如,0A8H;,(2),点操作符方式,:,如,IE.0;,(3),位名称方式,:,如,EX0;,(4),用户定义名方式,:,如用伪指令,BIT,定义:,WBZD0 BIT EX0,经定义后,允许指令中使用,WBZD0,代替,EX0,。,3.2.6,位操作类指令,.,1.,位数据传送指令,MOV C,bit,MOV bit,C,这组指令的功能是,:,把源操作数指出的布尔变量送到目的操作数指定的位地址单元中。其中一个操作数必须为进位标志,Cy,另一个操作数可以是任何可直接寻址位。,.,2.,位变量修改指令,CLR C,CLR bit,CPL C,CPL bit,SETB C,SETB bit,这组指令对操作数所指出的位进行清,“,0,”,取反,置,“,1,”,的操作,不影响其它标志。,.,3.,位变量逻辑与指令,ANL C,bit,ANL C,/bit,这组指令的功能是,:,如果源位的布尔值是逻辑,0,则将进位标志清,“,0,”,;,否则,进位标志保持不变,不影响其它标志。,bit,前的斜杠表示对,(bit),取反,直接寻址位取反后用作源操作数,但不改变直接寻址位原来的值。例如指令,:ANL C,/ACC.0,执行前,ACC.0,为,0,C,为,1,则指令执行后,C,为,1,而,ACC.0,仍为,0,。,.,4.,位变量逻辑或指令,ORL C,bit,ORL C,/bit,这组指令的功能是,:,如果源位的布尔值是逻辑,1,则将进位标志置,“,1,”,;,否则,进位标志保持不变,不影响其它标志。,.,5.,位变量条件转移指令,JC rel;,若,(Cy)=1,则转移,PC(PC)+2+rel,JNC rel;,若,(Cy)=0,则转移,PC(PC)+2+rel ,JB bit,rel;,若,(bit)=1,则转移,PC(PC)+3+rel,JNB bit,rel;,若,(bit)=0,则转移,PC(PC)+3+rel,JBC bit,rel;,若,(bit)=1,则转移,PC(PC)+3+rel,并,bit 0,.,
展开阅读全文