您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > MCS-51单片机指令系统-数据传送类指令
3.3.1数据传送类指令(29条)对PSW的影响传送类指令分成两大类1.MOV,一般传送2.非MOV,特殊传送,如:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。3.3MCS-51指令系统•1.访问片内数据存储器的一般数据传送指令•该类指令的功能是实现数在片内RAM单元之间、寄存器之间、寄存器与RAM单元之间的传送。所有指令具有统一的格式,其格式如下:•MOV目的操作数,源操作数;目的操作数单元←源操作数(或单元)•操作码助记符都是MOV,目的操作数和源操作数不同寻址方式的组合就派生出该类的全部指令。因此,记忆这类指令的关键在于掌握两个操作数的各种寻址方式的组合关系。(1)16位传送指令将源操作数data16(通常是常数)送入目的操作数DPTR中。例MOVDPTR,#5678H1.一般传送指令结果为:(DPH)=56H,(DPL)=78H。MOVDPTR,#data16(2)8位传送指令注:(1)#data(立即数)不能用作目的操作数;2)源操作数与目的操作数不能相同(除direct外);3)寄存器寻址与寄存器及其间址间不能相互传送。传送关系目的操作数源操作数AARnRndirect1direct2@Ri@Ri#data…1)以A为目的操作数的指令例:若(R1)=30H,(30H)=68H执行MOVA,@R1MOVA,Rndirect@Ri#data结果:(A)=68H。2)以Rn为目的操作数的指令例:若(60H)=30H执行MOVR6,60HMOVRn,Adirect#data结果:(R6)=30H。3)以direct为目的操作数的指令例:若(R0)=30H,(30H)=25H执行MOV40H,@R0指令结果:(40H)=25H。MOVdirect,Rndirect1@Ri#dataA4)以@Ri为目的操作数的指令例若(R1)=56H,(A)=35H执行MOV@R1,A指令结果:(56H)=35HMOV@Ri,Adirect#data访问片内RAM的一般传送指令操作关系图累加器ADirect直接地址Rn寄存器Data立即数@Ri间址例设内部RAM(30H)=40H,(40H)=10H,(10H)=00H(P1)=0CAH,分析以下程序执行后各单元及寄存器、P2口的内容。•MOVR0,#30H•MOVA,@R0•MOVR1,A•MOVB,@R1•MOV@R1,P1•MOVP2,P1•MOV10H,#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.特殊传送指令•访问程序存储器的数据传送指令又称作查表指令,采用基址寄存器加变址寄存器间接寻址方式,把程序存储器中存放的表格数据读出,传送到累加器A。共有如下两条单字节指令,指令操作码助记符为MOVC。(1)ROM查表指令2)MOVCA,@A+PC以PC的当前值与偏移量之和作为程序存储器地址,将该地址单元的内容传送到A。指令执行后PC的内容不变。2.特殊传送指令1)MOVCA,@A+DPTR以DPTR与偏移量之和作为程序存储器地址,将该地址单元的内容传送到A。指令执行后DPTR的内容不变。•前一条指令采用DPTR作基址寄存器,因此可以很方便地把一个16位地址送到DPTR,实现在整个64KB程序存储器单元到累加器A的数据传送。即数据表格可以存放在程序存储器64KB地址范围的任何地方。•后一条指令以PC作为基址寄存器,CPU取完该指令操作码时PC会自动加1,指向下一条指令的第一个字节地址,即此时是用(PC)+1作为基址的。另外,由于累加器A中的内容为8位无符号数,这就使得本指令查表范围只能在256个字节范围内(即(PC)+1H~(PC)+100H),使表格地址空间分配受到限制。同时编程时还需要进行偏移量的计算,即MOVCA,@A+PC指令所在地址与表格存放首地址间的距离字节数的计算,并需要一条加法指令进行地址调整。偏移量计算公式为:•偏移量=表首地址-(MOVC指令所在地址+1)•例从片外程序存储器2000H单元开始存放0~9的平方值,以DPTR作为基址寄存器进行查表得3的平方值。•如果用以DPTR为基址寄存器•的查表指令,其程序如下:•MOVDPTR,#2000H;置表首地址•MOVA,#03H•MOVCA,@A+DPTR01491625364964812000H2001H2009H1FFDH1FFFH1FFEH•设MOVC指令所在地址(PC)=1FFDH,则偏移量=2000H-(1FFDH+1)=02H。•相应的程序如下:MOVA,#03H;(A)←03HADDA,#02H;用加法指令进行地址调整MOVCA,@A+PC;(A)←(A+PC+1)执行结果为:(PC)=1FFEH,(A)=09。01491625364964812000H2001H2009H1FFDH1FFFH83H1FFEH(2)读、写片外RAM指令•MCS-51单片机CPU对片外扩展的数据存储器RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来完成。这类指令共有以下4条单字节指令,指令操作码助记符都为MOVX。(2)读、写片外RAM指令1)读片外RAMMOVXA,@DPTRMOVXA,@Ri2)写片外RAMMOVX@DPTR,AMOVX@Ri,A•例设外部RAM(0203H)=0FFH,分析以下指令执行后的结果。•MOVDPTR,#0203H•MOVXA,@DPTR•MOV30H,A•MOVA,#0FH•MOVX@DPTR,A•执行结果为:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。(3)堆栈操作指令堆栈操作有进栈和出栈,即压入和弹出数据,常用于保存或恢复现场。进栈指令用于保存片内RAM单元(低128字节)或特殊功能寄存器SFR的内容;出栈指令用于恢复片内RAM单元(低128字节)或特殊功能寄存器SFR的内容。(3)堆栈操作指令3)操作指令PUSHdirectPOPdirect1)原则:向地址高端生长,后进先出2)SP:指向栈顶(活动端),复位值07H例若(SP)=07H,(40H)=88H执行PUSH40H指令结果:(SP)=08H,(08H)=88H。(4)数据交换指令数据传送指令一般都是将操作数自源地址单元传送到目的地址单元,指令执行后,源地址单元的操作数不变,目的地址单元的操作数则修改为源地址单元的操作数。交换指令数据作双向传送,涉及传送的双方互为源地址、目的地址,指令执行后每方的操作数都修改为另一方的操作数。数据交换指令共有如下5条指令:(4)数据交换指令例若(R0)=67H,(A)=45H。执行XCHA,R0指令交换类指令,传送是双向的1)字节交换指令XCHA,Rndirect@Ri结果:(A)=67H,(R0)=45H。2)半字节交换指令例:若(R0)=30H,(30H)=67H,(A)=20H。执行XCHDA,@R0后,(A)=27H,(30H)=60H。XCHDA,@RiSWAPA例若(A)=30H,执行SWAPA后,(A)=03H。练习题题1答题2答题3答题4答题5答试按下列要求传送数据1.将R5中的数据传送到50H。2.将R7中的数据传送到R6。3.将立即数40H传送到以R0中内容为地址的存储单元中。4.将片外RAM50H中的数据传送到片内RAM40H单元中。5.将R1中的数据传送到以R0中内容为地址的存储单元中。MOV50H,R5题1答题2答MOVA,R7MOVR6,AMOVA,#40HMOV@R0,A题3答题4答MOVR0,#50HMOVXA,@R0MOV40H,AMOVA,R1MOV@R0,A题5答表3.2数据传送类指令一览表表3.2数据传送类指令一览表(续)作业•1变址寻址和相对寻址中的地址偏移量有何异同?•2.写出能完成下列数据传送的指令•R1的内容传送到R0•内部RAM20H单元中的内容送到30H单元•外部RAM2000H单元中的内容送到内部RAM20H单元•外部ROM2000H单元中的内容送到内部RAM20H单元•外部ROM2000H单元中的内容送到外部RAM3000H单元•3MOVDPTR,#2000H•MOVXA,@DPTR•MOV20H,A•4MOVDPTR,#2000H•MOVA,#00H•MOVCA,@DPTR+A•MOV20H,A•MOVDPTR,#3000H•MOVX@DPTR,A已知(20H)=X,(21H)=Y,(22H)=Z请用图示说明下列程序执行后堆栈中的内容是什么?MOVSP,#70HPUSH20HPUSH21HPUSH22HMOVSP,#60HPUSH22HPUSH21HPUSH20H
本文标题:MCS-51单片机指令系统-数据传送类指令
链接地址:https://www.777doc.com/doc-4278865 .html