资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第七课,复习,3.4.4,控制转移类指令(,17,条),3.4.5,位操作指令(,17,条),3.4 MCS-51,指令系统的分类介绍,一个计算机,“,智商,”,的高低,取决于它的转移类指令的多少,特别是,条件转移,指令的多少。计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要,改变程序的运行方向,,即将程序跳转到某个指定的地址再顺序执行下去。某些指令具有,修改程序计数器,PC,内容,的功能,因为,PC,内容是将要执行的下一条指令的地址,所以计算机执行这类指令就能够控制程序转移到新的地址上去执行。,开头的话,ORG 0100H,LOOP,:,MOV P1,#55H,LCALL TIME,;调延时子程序,TIME,MOV P1,#0AAH,LCALL TIME,;,调延时子程序,TIME,SJMP LOOP,;转移到,LOOP,END,开始,55H,送,P,1,口,延时,2,秒,AAH,送,P,1,口,延时,2,秒,流水式彩灯程序流程图,源程序与机器码:,ORG 0100H,LOOP:,MOV P1,#55H,LCALL TIME,MOV P1,#0AAH,LCALL TIME,SJMP LOOP,END,ROM,中的机器码,0100H 75H 90H 55H,12H*H*H,75H 90H AAH,12H*H*H,010CH 80,H,rel,转移的实质就是,PC,得到一个新的值:目标地址,执行完本指令,希望,PC=0100H,学习方法及要求:,在这个场景中,将会有三个角色出现:编程者、汇编程序及,CPU,。,编程者写出如,SJMP LOOP,这样的指令,表达想要转移的意愿以及转向何处;,汇编程序将指令汇编成机器码;,CPU,则依据对机器码的译码最终将目标地址赋给,PC,。,要求:,会写不同的转移指令,掌握各转移指令的含义及使用条件。,了解转移指令的汇编过程。,了解,CPU,对转移指令的执行过程。,3.4.4,控制转移类指令(,17,条),无条件转移指令(,4,条,),空操作指令(,1,条),条件转移指令(,8,条),调用和返回指令,3.4.4,控制转移类指令(,17,条),3.4.4,控制转移类指令(,17,条),无条件转移指令是当程序执行到该指令时,程序无条件的转移到指令所提供的地址处执行。无条件转移指令有长转移、短转移、相对转移和间接转移,4,条指令。,AJMP addr11,LJMP addr16,SJMP,rel,JMP A+DPTR,1.,无条件转移,(,4,条),3.4.4,控制转移类指令(,17,条),(1),长转移指令,LJMP addr16,对于编程者:它是一条可以转向,64K,空间任一地址的转移。助记符后通常直接写目标行号。,对与汇编程序:汇编后它有三个字节,操作码是,02H,而其后的两个字节分别是目标地址的高、低字节。,对与,CPU,:当它取得操作码,02H,后,紧跟其后获取的两个字节被送往,PC,,所以,本指令执行完,,PC=,目标地址。,例如:,ORG0000H,LJMPMAIN,;,02H 00H 30H,ORG0030H,MAIN,:,MOVR0,#8,3.4.4,控制转移类指令(,17,条),(2),近转移指令,AJMP addr11,对于编程者:它是一条可以转向,2K,空间某地址的转移。助记符后通常直接写目标行号。,对与汇编程序:汇编后它有两个字节,操作码的是后五位是,00001,而其余的,11,位来自目标地址的后,11,位,格式为(,a10a9a8 00001,),(a7,a0),。,对与,CPU,:当它取得操作码,发现后五位是,00001,后,接着获取下一个字节的机器码,执行,(,PC,),+2,(,PC,),,addr11,(,PC10-0,)。程序计数器赋予新值,-,(,PC15-11,)不改变,低,11,位地址来自指令的标号地址。,3.4.4,控制转移类指令(,17,条),(3),短转移指令,SJMP,rel,对于编程者:目标地址可以在这条指令的前,128B,到后,127B,之间。助记符后通常仍然直接写目标行号。,对与汇编程序:汇编后它有两个字节,操作码是,80H,而其余一个字节表明转移的相对偏移量,用,rel,表示。,汇编时,rel,=,目标地址,-,(源地址,+2,),对与,CPU,:当它取得操作码为,80H,后,紧跟着获取的一个字节,rel,被用来计算新的,PC,值。,执行时新的,PC=,(,PC,)当前,+2+rel,=,源地址,+2+,目标地址,-,(源地址,+2,),=,目标地址,3.4.4,控制转移类指令(,17,条),补:指令系统的寻址方式,相对寻址是,以程序计数器,PC,的,当前值,(,指读出该,2,字节或,3,字节的跳转指令后,,PC,指向的下条指令的地址,),为基准,加上指令中给出的相对偏移量,rel,形成目标地址的寻址方式。,该类寻址方式主要用于跳转指令。,目的地址,=,转移指令所在的地址,+,转移指令的字节数,+,rel,偏移量,rel,是一带符号的,8,位二进制数补码数,范围是:,128 B,+127B,相对寻址,54H,程序存储区,54H,A,2001H,20H,PC,02H,2056H,XX,80H,2056H,2000H,设指令,SJMP 54H,的机器码,80H 54H,存放在,2000H,处,当执行到该指令时,先从,2000H,和,2001H,单元取出指令,,PC,自动变为,2002H,;,再把,PC,的内容与操作数,54H,相加,形成目标地址,2056H,,,再送回,PC,,,使得程序跳转到,2056H,单元继续执行。,相对寻址,补:指令系统的寻址方式,偏移量,rel,是一,带符号,的,8,位二进制数补码数的说明:,范围是:,128 B,+127B,目标地址与源地址的大小关系不定,当目标地址大于源地址,则向下转移,,rel,为正数,当目标地址小于源地址,则向上转移,,rel,为负数,例如:,在,ROM,区,0100H,地址单元,80H 55H,(,SJMP,rel,),当,PC=0100H,,取得机器码后,会根据公式进行计算:,PC=,(,PC,),当前,+,2+rel=0100H+2+55H=0157H,向下转移,又如,:若,ROM,区,0100H,地址单元,80H F6H,(,rel,是负数,为,-0AH,),当,PC=0100H,,取得机器码后,会根据公式进行计算:,PC=,(,PC,),当前,+,2+rel=0100H+2-0AH=00F8H,向上转移,再如:,若,ROM,区,0100H,地址单元,80H FEH,(,rel,是负数,为,-2H,),当,PC=0100H,,取得机器码后,会根据公式进行计算:,PC=,(,PC,),当前,+,2+rel=0100H+2-2H=0100H,原地踏步、等待,指令经常写成:,SJMP$,3.4.4,控制转移类指令(,17,条),在用汇编语言程序是,,rel,是由汇编程序在汇编过程中自动计算偏移地址,并且填入指令代码中;在手工汇编时,我们可用转移目的地址减转移指令所在源地址,再减转移指令字节数,2,得到偏移字节数,rel,。,ORG 0100H,LOOP:,MOV P1,#55H,LCALL TIME,MOV P1,#0AAH,LCALL TIME,SJMP LOOP,END,ROM,中的机器码,0100H 75H 90H 55H,12H*H*H,75H 90H AAH,12H*H*H,010CH 80,H,rel,3.4.4,控制转移类指令(,17,条),rel,=0100H-(010CH+2),=-0EH=F2H,(4),间接转移指令,JMP,A+DPTR,这是一个转移指令。它的目标地址由操作数字段来描述。可以在,ROM,空间的,64K,内范围任意转移。当对,DPTR,赋值后,转移的目标地址还可以由,A,的内容决定。,这条指令可代替众多的判别跳转指令,具有散转功能。,执行完,(,PC,),=,(,A,),+,(,DPTR,),执行,JMP,A+DPTR,后,会依,A,内容的不同转向不同的目标地址。,3.4.4,控制转移类指令(,17,条),例如:根据累加器,A,中命令键键值,设计命令键操作,程序入口跳转表,:,CLR C,;清进位,RLC A,;键值乘,2,MOV DPTR,,,#JPTAB,;指向命令键跳转表首址,JMP,A+DPTR,;散转入命令键入口,JPTAB,:,AJMP CCS0,;双字节指令,AJMP CCS1,AJMP CCS2,。,。,CCS0,:,CCS1,:,3.4.4,控制转移类指令(,17,条),有条件转移指令共三类,,8,种,它们有如下,共性,:,指令字面上会用助记符给出一个,判决规则,,如,(A)=0,等。,CPU,执行时会依据当前的条件作出真,/,假判断,是真,-,则转移;是假,-,则继续顺序执行。,指令中最后一个操作数表明转移的目标地址,通常是标号地址。,所有的有条件转移均为短转移。,本指令前要有意识地构建判决条件。,不同的指令其实就是以不同的助记符,给出不同的,判决规则,2.,有条件转移指令(,8,条),3.4.4,控制转移类指令(,17,条),判决规则,真,假,新的目标地址,顺序执行,助记符给出,操作数给出,例如:,JNZ ABC,助记符给出,(A)0,的判决条件,操作数给出目标地址为,ABC,执行到此句,若(,A,),0,,顺序执行;,若,(A),0,,则转向,ABC,JZ,rel,;判决规则(,A,),=0,JNZ,rel,;判决规则(,A,),0,条件转移指令(,2,条),3.4.4,控制转移类指令(,17,条),CJNE OPR1,OPR2,rel,;判决规则(,OPR1,),(,OPR2,),CJNE,A,data,rel,;,A,(,data,),(,PC,),+3+,rel,(,PC,),CJNE,A,#data,rel,;,A#data,(,PC,),+3+,rel,(,PC,),CJNE,Rn,#data,rel,;,(,Rn)#data,(,PC,),+3+,relPC,),CJNE,Ri,#data,rel,;,(,Rn)#data,(,PC,),+3+,rel,(,PC,),说明:(),字节与字节比较,(),比较不等转,否则顺序执行,(),影响,Cy,与减法相同,但不改变操作数,(),三字节指令,,rel,是偏移量,比较不相等转移(,4,条),3.4.4,控制转移类指令(,17,条),减,1,不为,0,转移(,2,条),DJNZ,Rn,rel,;(Rn)-1(Rn),(Rn)0,(PC)+2+,rel(PC,),DJNZ data,rel,;(data)-1(data),(data)0,(PC)+2+,rel(PC,),例:延时子程序,delay,:,MOV R7,#03H,DJNZ R7,$,RET,DJNZ OPR,rel,;,判决规则:(,OPR,),-1,0,3.4.4,控制转移类指令(,17,条),3.,调用和返回指令(,4,条),在程序设计中,有时因操作要求,需反复执行某段程序,于是引进了主程序和子程序的概念。,子程序,能被反复调用。这样可减少程序编写和调试的工作量。指令系统中一般都有主程序,调用,子程序的指令和从子程序,返回,主程序的指令。,通常把具有一定功能的公用程序段作为子程序。子程序的入口标号可以成为子程序名(或子程序的入口地址),最后一条指令为返回主程序指令(,RET,)。,3.4.4,控制转移类指令(,17,条),长调用指令,LCALL,addr16,(,子程序的入口地址,),短调用指令,ACALL,addrll,(,子程序的入口地址,),子程序返回指令,RET,中断返回指令,RETI,上述指令的执行,最终都会令,PC,得到一个新值。,3.4.4,控制转移类指令(,17,条),4.,空操作指令(,1,条),NOP,这条指令除了使,PC,加,1,,消耗一个机器周期外,没有执行任何操作。可用于短时间的延时。,3.4.4,控制转移类指令(,17,条),3.4.5,位操作指令(,17,条),位数据传送指令(,2,条),位修正指令(,6,条),逻辑运算指令(,4,条),位条件转移类指令(,5,条),位寻址空间,在进行位操作时,进位标志位,CY,布尔累加器(位累加器),简写成,C,。,位寻址区:片内,RAM,字节地址,20H,2FH,单元中连续的,128,位(位地址,00H,7FH,),部分特殊功能寄存器,SFR,(通常用位名来访问,如,RS0,、,OV,),3.4.5,位操作指令(,17,条),点操作符号:如,PSW.4(D0H).4,位名称方式:如,RS1,直接写位地址:如,D4H,用户定义名方式:如用伪指令,bit,flag bit 10H,SETB flag,;,(10H)=1,位地址的表达方式:,3.4.5,位操作指令(,17,条),位传送指令就是可寻址位与累加位,CY,之间的传送,指令有两条。,MOV,C,bit,;,bitCY,,某位数据送,CY,。,MOV,bit,C,;,CYbit,,,CY,数据送某位,例:将位地址,20H,的一位数传送到位地址,30H,中:,MOV C,,,20H,MOV 30H,,,C,1,、位传送指令(,2,条),若(,CY,),=1,,(,P1,),=10100011B,,(,P3,),=01101100B,。试指出执行下列程序段后,,CY,、,P1,口及,P3,口内容的变化情况。,MOV P1.3,,,C,MOV P1.4,,,C,MOV C,,,P1.6,MOV P3.6,,,C,MOV C,,,P1.0,MOV P3.4,,,C,CY=1,P1=10101111B,P3=00111100B,3.4.5,位操作指令(,17,条),这些指令对,CY,及可寻址位进行置位或复位操作,共有四条指令。,CLR,C,;0CY,清,CY,。,CLR,bit,;0bit,清某一位。,SETB,C,;1CY,置位,CY,。,SETB,bit,;1bit,置位某一位。,例如:,CLR P3.0,指令,就是将,P3.0,清零。,2,、位置位复位指令(,4,条),3.4.5,位操作指令(,17,条),3,、位运算指令(,6,条),ANL,C,bit,;(,CY)(bit)CY,。,ANL C,/bit,;(CY)(/,bit)CY,。,ORL,C,bit,;(,CY)(bit)CY,。,ORL C,/bit,;(CY)(/,bit)CY,。,CPL C,;(/CY)CY,。,CPL bit,;(/,bit)bir,。,位运算包括与、或、非三种逻辑运算,与字节逻辑运算比较,没有异或。与、或运算,位累加器,C,一定参与。,3.4.5,位操作指令(,17,条),JC,rel,;判决规则,C=1,JNC,rel,;判决规则,C=0,4,、位控制转移指令(,5,条),JB bit,rel,;,判决规则,位状态为,1,转移。,JNB bit,rel,;,判决规则,位状态为,0,转移。,JBC bit,rel,;,判决规则,位状态为,1,时先清“,0”,再转移,3.4.5,位操作指令(,17,条),2010-04-01,作业,P63,13,、,14,、,17,、,18,测试,1.,根据你所理解的逻辑关系,写出五大类指令。,(,1,)数据传送类,(28,条,),(,2,)算术操作类,(24,条,),(,3,)逻辑运算类,(25,条,),(,4,)控制转移类,(17,条,),(,5,)位操作类,(17,条,),若(,R1,),=30H,,(,A,),=40H,,(,30H,),=60H,,(,40H,),=08H,分析:,MOV A,,,R1,MOV R1,,,40H,MOV 40H,,,A,MOV R1,,,#7FH,2.,分析执行下列程序段后上述各单元内容的变化。,
展开阅读全文