1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.3.1,数据传送类指令(,29,条),对,PSW,的影响,传送类指令分成两大类,1.MOV,,一般传送,2.,非,MOV,,,特殊传送,,如:,MOVC,、,MOVX,、,PUSH,、,POP,、,XCH,、,XCHD,及,SWAP,。,3.3 MCS-51,指令系统,1.,访问片内数据存储器的一般数据传送指令,该类指令的功能是实现数在片内,RAM,单元之间、寄存器之间、寄存器与,RAM,单元之间的传送。所有指令具有统一的格式,其格式如下:,MOV,,,;目的操作数单元源操作数,(,或单元,),操作码助
2、记符都是,MOV,,目的操作数和源操作数不同寻址方式的组合就派生出该类的全部指令。因此,记忆这类指令的关键在于掌握两个操作数的各种寻址方式的组合关系。,(1)16,位传送指令,将源操作数,data16,(通常是常数),送入目的操作数,DPTR,中。,例,MOV DPTR,,,#5678H,1.,一般传送指令,结果为:,(,DPH,),=56H,,(,DPL,),=78H,。,MOV DPTR,,,#,data16,(2)8,位传送指令,注,:,(,1),data,(立即数)不能用作目的操作数;,2),源操作数与目的操作数不能相同(除,direct,外);,3),寄存器寻址与寄存器及其间址间不能
3、相互传送。,传送关系,目的,操作数,源操作数,A,A,Rn,Rn,direct1,direct2,Ri,Ri,#data,1),以,A,为目的操作数的指令,例:若(,R1,),=30H,,(,30H,),=68H,执行,MOV A,,,R1,MOV A,,,Rn,direct,Ri,#data,结果:,(,A,),=68H,。,2),以,Rn,为目的操作数的指令,例:若(,60H,),=30H,执行,MOV R6,,,60H,MOV Rn,,,A,direct,#data,结果,:,(,R6,),=30H,。,3),以,direct,为目的操作数的指令,例:若(,R0,),=30H,(,30H
4、25H,执行,MOV 40H,,,R0,指令,结果:(,40H,),=25H,。,MOV direct,,,Rn,direct1,Ri,#data,A,4),以,Ri,为目的操作数的指令,例,若(,R1,),=56H,,(,A,),=35H,执行,MOV R1,,,A,指令,结果,:(,56,H,),=35H,MOV ,Ri,,,A,direct,#data,访问片内,RAM,的一般传送指令操作关系图,累加器,A,Direct,直接地址,Rn,寄存器,Data,立即数,Ri,间址,例,设内部,RAM(30H)=40H,,,(40H)=10H,,,(10H)=00H(P1)=0CAH,,
5、分析以下程序执行后各单元及寄存器、,P2,口的内容。,MOV R0,,,#30H,MOV A,,,R0,MOV R1,,,A,MOV B,,,R1,MOV R1,,,P1,MOV P2,,,P1,MOV 10H,,,#20H,;,R0=30H,;,A=40H,;,R1=40H,;,B=10H,;,(40H)=0CAH,;,(P2)=0CAH,;,(10H)20H,执行上述指令后的结果为:,(R0)=30H,,,(R1)=(A)=40H,,,(B)=10H,,,(40H)=(P1)=(P2)=CAH,,,(10H)=20H,。,2.,特殊传送指令,访问程序存储器的数据传送指令又称作查表指令,采用
6、基址寄存器加变址寄存器间接寻址方式,把程序存储器中存放的表格数据读出,传送到累加器,A,。共有如下两条单字节指令,指令操作码助记符为,MOVC,。,(1)ROM,查表指令,2)MOVC A,,,A+PC,以,PC,的当前值,与,偏移量之和,作为程序存储,器地址,将该地址单元的内容传送到,A,。,指令执行后,PC,的内容不变。,2.,特殊传送指令,1)MOVC A,,,A+DPTR,以,DPTR,与,偏移量之和,作为程序存储器地,址,将该地址单元的内容传送到,A,。指令,执行后,DPTR,的内容不变。,前一条指令采用,DPTR,作基址寄存器,因此可以很方便地把一个,16,位地址送到,DPTR,,
7、实现在整个,64 KB,程序存储器单元到累加器,A,的数据传送。即数据表格可以存放在程序存储器,64 KB,地址范围的任何地方。,后一条指令以,PC,作为基址寄存器,,CPU,取完该指令操作码时,PC,会自动加,1,,指向下一条指令的第一个字节地址,即此时是用,(PC)+1,作为基址的。另外,由于累加器,A,中的内容为,8,位无符号数,这就使得本指令查表范围只能在,256,个字节范围内,(,即,(PC)+1H(PC)+100H),,使表格地址空间分配受到限制。,同时编程时还需要进行偏移量的计算,即,MOVC A,,,A+PC,指令所在地址与表格存放首地址间的距离字节数的计算,,并需要一条加法指
8、令进行地址调整。偏移量计算公式为:,偏移量,=,表首地址,-(MOVC,指令所在地址,+1),例,从片外程序存储器,2000H,单元开始存放,09,的平方值,以,DPTR,作为基址寄存器进行查表得,3,的平方值。,如果用以,DPTR,为基址寄存器,的查表指令,其程序如下:,MOV DPTR,,,#2000H,;,置表首地址,MOV A,#03H,MOVC A,A+DPTR,0,1,4,9,16,25,36,49,64,81,2000H,2001H,2009H,1FFDH,1FFFH,1FFEH,设,MOVC,指令所在地址,(PC)=1FFDH,,则偏移量,=2000H-(1FFDH+1)=02
9、H,。,相应的程序如下:,MOV A,,,#03H,;,(A)03H,ADD A,,,#02H,;用加法指令 进行地址调整,MOVC A,,,A+PC,;,(A)(A+PC+1),执行结果为:,(PC)=1FFEH,,,(A)=09,。,0,1,4,9,16,25,36,49,64,81,2000H,2001H,2009H,1FFDH,1FFFH,83H,1FFEH,(2),读、写片外,RAM,指令,MCS-51,单片机,CPU,对片外扩展的数据存储器,RAM,或,I/O,口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器,A,来完成。这类指令共有以下条单字节指令,指令操作码助记符都为,
10、MOVX,。,(2),读、写片外,RAM,指令,1),读片外,RAM,MOVX A,,,DPTR,MOVX A,,,Ri,2),写片外,RAM,MOVX DPTR,,,A,MOVX ,Ri,,,A,例,设外部,RAM(0203H)=0FFH,,分析以下指令执行后的结果。,MOV DPTR,,,#0203H,MOVX A,,,DPTR,MOV 30H,,,A,MOV A,,,#0FH,MOVX DPTR,,,A,执行结果为:,(DPTR)=0203H,,,(30H)=FFH,,,(0203H)=(A)=0FH,。,(3),堆栈操作指令,堆栈操作有进栈和出栈,即压入和弹出数据,常用于保存或恢复现场
11、进栈指令用于保存片内,RAM,单元,(,低,128,字节,),或特殊功能寄存器,SFR,的内容;出栈指令用于恢复片内,RAM,单元,(,低,128,字节,),或特殊功能寄存器,SFR,的内容。,(3),堆栈操作指令,3),操作指令,PUSH direct,POP direct,1),原则:,向地址高端生长,后进先出,2)SP,:,指向栈顶,(,活动端,),,复位值,07H,例,若(,SP,),=07H,,(,40H,),=88H,执行,PUSH 40H,指令,结果,:(,SP,),=08H,,(,08H,),=88H,。,(4),数据交换指令,数据传送指令一般都是将操作数自源地址单元传送到目
12、的地址单元,指令执行后,源地址单元的操作数不变,目的地址单元的操作数则修改为源地址单元的操作数。,交换指令数据作双向传送,涉及传送的双方互为源地址、目的地址,指令执行后每方的操作数都修改为另一方的操作数。,数据交换指令共有如下,5,条指令:,(4),数据交换指令,例,若(,R0,),=67H,,(,A,),=45H,。,执行,XCH A,,,R0,指令,交换类指令,传送是,双向,的,1),字节交换指令,XCH A,,,Rn,direct,Ri,结果,:(,A,),=67H,,(,R0,),=45H,。,2,)半字节交换指令,例:若(,R0,),30H,,(,30H,),67H,,,(,A,),
13、20H,。,执行,XCHD A,,,R0,后,,(,A,),27H,,(,30H,),60H,。,XCHD A,,,Ri,SWAP A,例,若(,A,),30H,,执行,SWAP A,后,,(,A,),03H,。,练习题,题,1,答,题,2,答,题,3,答,题,4,答,题,5,答,试按下列要求传送数据,1.,将,R5,中的数据传送到,50H,。,2.,将,R7,中的数据传送到,R6,。,3.,将立即数,40H,传送到以,R0,中内,容为地址的存储单元中。,4.,将片外,RAM50H,中的数据传,送到片内,RAM40H,单元中。,5.,将,R1,中的数据传送到以,R0,中,内容为地址的存储单元中
14、MOV 50H,R5,题,1,答,题,2,答,MOV A,,,R7,MOV R6,,,A,MOV A,#40H,MOV R0,A,题,3,答,题,4,答,MOV R0,#50H,MOVX,A,R0,MOV 40H,A,MOV A,,,R1,MOV R0,,,A,题,5,答,表,3.2,数据传送类指令一览表,表,3.2,数据传送类指令一览表,(,续,),作业,1,变址寻址和相对寻址中的地址偏移量有何异同?,2.,写出能完成下列数据传送的指令,R1,的内容传送到,R0,内部,RAM 20H,单元中的内容送到,30H,单元,外部,RAM 2000H,单元中的内容送到内部,RAM20H,单元,外部
15、ROM 2000H,单元中的内容送到内部,RAM20H,单元,外部,ROM 2000H,单元中的内容送到外部,RAM3000H,单元,3 MOV DPTR,#2000H,MOVX A,DPTR,MOV 20H,A,4 MOV DPTR,#2000H,MOV A,#00H,MOVC A,DPTR+A,MOV 20H,A,MOV DPTR,#3000H,MOVX DPTR,A,已知(,20H,),=X,(21H)=Y,(22H)=Z,请用图示说明下列程序执行后堆栈中的内容是什么?,MOV SP,#70H,PUSH 20H,PUSH 21H,PUSH 22H,MOV SP,#60H,PUSH 22H,PUSH 21H,PUSH 20H,






