您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第3章 单片机原理及接口技术讲稿(第三版)-李朝青
1第3章指令系统及程序设计举§3.1汇编语言§3.1.1指令和程序设计语言指令:是CPU根据人的意图来执行某种操作的命令。程序设计语言:是实现人机交换信息的基本工具,分为机器语言、汇编语言和高级语言。机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言。汇编语言:是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。§3.1.2指令格式89C51汇编语言指令格式操作码[目的操作数][,源操作数][;注释]汇编语言指令对应的二进制代码格式单字节指令1、指令码中隐含着对某一种寄存器的操作如:指令“INCDPTR”的指令代码格式为:A3H=101000112、由指令中的rrr三位的不同编码指定某一寄存器如:指令“MOVA,Rn”的指令代码格式为:11101rrr双字节指令用一个字节表示操作码,另一个字节表示操作数或操作数所在的地址。格式为:操作码立即数或地址三字节指令一个字节操作码,两个字节操作数。格式为:操作码立即数或地址立即数或地址2§3.2寻址方式一、什么是寻址方式:如何找到存放操作数的地址,把操作数提取出来的方法。二、寻址方式的种类:1、寄存器寻址寄存器寻址:由指令指出寄存器组R0~R7中的某一个或其他寄存器(A,B,DPTR等)的内容作为操作数。例如:MOVA,R0;(R0)→AMOVP1,A;(A)→P1口ADDA,R0;(A)+(R0)→A2、直接寻址直接寻址方式:在指令中直接给出操作数所在存储单元的地址。指令中操作数部分是操作数所在地址。直接寻址方式可访问片内RAM的128个单元以及所有的SFR。对于SFR,既可以使用它们的地址,也可以使用它们的名字。例如:MOVA,3AH;(3A)→AMOVA,P1;(P1口)→A或:MOVA,90H;90H是P1口的地址3、立即数寻址立即数寻址:指令操作码后面紧跟的是一字节或两字节操作数,用“#”号表示,以区别直接地址。例如:MOVA,3AH;(3AH)→AMOVA,#3AH;3AH→AMOVDPTR,#2000H;2000H→DPTR;(DPH)=20H;(DPL)=00H4、寄存器间接寻址寄存器间接寻址:操作数的地址事先存放在某个寄存器中,寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数。89C51规定R0或R1为间接寻址寄存器,它可寻址内部地址RAM低位的128B单元内容。还可采用DPTR作为间接寻址寄存器,寻址外部数据存储器的64KB空间。例如:将片内RAM65H单元内容47H送A,可执行指令“MOVA,@R0”。其中R0内容为65H。如图所示:5、变址寻址(基址寄存器+变址寄存器间接寻址)变址寻址:以某个寄存器的内容为基地址,在这个基地址的基础上加上地址偏移量形成真正的操作数地址。89C51中采用DPTR或PC为变址寄存器,A的内容为地址偏移量。3变址寻址只能访问程序存储器,访问范围为64KB。例如:MOVCA,@A+DPTR;((A)+(DPTR))→A如图所示6、相对寻址相对寻址:是以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。相对寻址只出现在相对转移指令中。当前的PC值是指执行完相对指令后的PC值;相对转移指令操作码所在地址称为源地址;转移后的地址称为目的地址。目的地址=源地址+相对转移指令字节数+relrel为补码表示的有符号数。例如:7、位寻址位寻址:采用位寻址方式的指令的操作数是8位二进制数中的某一位,指令中给出的是位地址。位地址在指令中用bit表示。例如:CLRbit;位地址的两种表示方法:直接使用位地址,如D3H;直接用寄存器名字加位数,如PSW.3。位寻址区域:片内RAM的20H-2FH的16个单元中的128位;字节地址能被8整除的SFR。三、寻址空间及符号注释1、寻址空间:见表3-2。表3-2操作数寻址方式和有关空间寻址方式寻址空间立即数寻址程序存储器ROM直接寻址片内RAM低128B、特殊功能寄存器寄存器寻址工作寄存器R0-R7、A、B、C、DPTR寄存器间接寻址片内RAM低128B、片外RAM变址寻址程序存储器(@A+PC,@A+DPTR)相对寻址程序存储器256B范围(PC+偏移量)位寻址片内RAM的20H-2FH字节地址、部分SFR2、符号注释:Rn(n=0-7):当前选中的工作寄存器组R0-R7。Ri(I=0,1):作为地址指针的两个工作寄存器R0,R1。#data:8位立即数。4#data16:16位立即数。direct:8位片内RAM单元(包括SFR)的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:补码表示的8位地址偏移量。范围:-128-+127D。bit:片内RAM或SFR的直接寻址位地址。@:间接寄存器的符号。/:位操作指令中对该位先取反再参与操作,不影响原值。(×):×中的内容。((×)):×指出的地址单元中的内容。→:指令操作流程方向。5§3.3MCS-51指令系统概述:MCS-51指令系统由111条指令组成。单字节指令49条双字节指令45条三字节指令17条。从指令执行时间看,单周期指令64条双周期45条只有乘、除指令为4个周期。MCS-51指令系统可分为五大类[1]数据传送指令:28条[2]算术运算指令:24条[3]逻辑运算及移位指令:25条[4]控制转移指令:17条[5]位操作指令(布尔操作):17条§3.3.1数据传送指令1.以累加器A为目的操作数的指令(4条,即4种寻址方式)汇编指令格式机器码格式操作注释MOVA,Rn;11101rrr(Rn)→A将工作寄存器Rn(即R0~R7)内容传送到累加器A中MOVA,direct;11100101direct(direct)→A将直接寻址所得的片内RAM单元内容或特殊功能寄存器中的内容传送到累加器A中MOVA,@Ri;1110011i((Ri))→A将间接寻址(Ri为R0或R1)所得的片内RAM单元内容或特殊功能积存器中的内容传送到累加器A中MOVA,#data;01110100data#data→A将立即数传送到累加器A中例:MOVA,#30H;(A)=30HMOVA,30H;(A)=11HMOVA,@R1;(A)=11HMOVA,R1;(A)=30HMOVA,#30H;(A)=30HMOVA,30H;(A)=11HMOVA,@R1;(A)=11HMOVA,R1;(A)=30H2、以寄存器Rn为目的操作数的指令(3条)汇编指令格式机器码格式操作注释MOVRn,A;11111rrrA→Rn将累加器A中内容传送到工作寄存器Rn(即R0-R7)中MOVRn,direct;10101rrrdirect(direct)→Rn将直接寻址所得片内RAM单元内容或特殊功能寄存器中内容传送到工作寄存器Rn(即R0-R7)中MOVRn,#data;01111rrrdata#data→Rn将立即数传送到工作寄存器Rn(即R0-R7)中6直接寻址和立这组指令的功能是把源操作数所指定的内容送到当前工作寄存器组R0~R7中的某个寄存器。源操作数有寄存器寻址,即数寻址三种方式。如:(A)=78H,(R5)=47H,(70H)=F2H,执行指令:MOVR5,A;(A)→R5,(R5)=78HMOVR5,70H;(70H)→R5,(R5)=F2HMOVR5,#A3H;A3H→R5,(R5)=A3H注意,在89C51指令系统中没有“MOVRn,Rn”传送指令。3、以直接地址为目的操作数的指令(5条)汇编指令格式机器码格式操作注释MOVdirect,A;11110101direct(A)→direct将累加器A中内容传送到直接地址direct所指出的片内存储单元中。MOVdirect,Rn;1rrrdirect(Rn)→direct将工作寄存器Rn(即R0-R7)中内容传送到直接地址direct所指出的片内存储单元中MOVdirect,direct;10000101源direct目的direct(源direct)→目的direct将直接地址源direct所指出的片内存储单元中内容传送到直接地址目的direct所指出的片内存储单元中MOVdirect,@Ri;1000011idirect((Ri))→direct将间接寻址(Ri为R0或R1)所得的片内RAM单元内容传送到直接地址direct所指出的片内存储单元中MOVdirect,#data;01110101directdata#data→direct将立即数传送到直接地址direct所指出的片内存储单元中这组指令的功能是把源操作数所指定的内容送入由直接地址direct所指出的片内存储单元中。源操作数有寄存器寻址,直接寻址,寄存器间接寻址和立即寻址等方式。4、以间接地址为目的操作数的指令(3条)汇编指令格式机器码格式操作注释MOV@Ri,A;1111011i(A)→(Ri)将累加器A中内容传送到间接寻址(Ri为R0或R1)所得的片内RAM单元中。MOV@Ri,direct;0101011idirect(direct)→(Ri)将直接寻址所得的片内RAM单元内容或特殊功能寄存器中的内容传送到间接寻址(Ri为R0或R1)所得的片内RAM单元中MOV@Ri,#data;0111011Idata#data→(Ri)将立即数传送到间接寻址(Ri为R0或R1)所得的片内RAM单元中(Ri)表示Ri中的内容为指定的RAM单元。MOV指令在片内存储器的操作功能如图3-6示。7图3-6传送指令在片内存储器的操作功能5、十六位数据传送指令(1条)汇编指令格式机器码格式操作注释MOVDPTR,#data16;0000高位字节低位字节dataH→DPHdataL→DPL将高8位立即数dataH送入DPH,低8位立即数dataL送入DPL。这条指令的功能是把16位常数送入DPTR。DPTR由DPH和DPL组成。例:MOVDPTR#1000H;(DPTR)=1000H,(DPH)=10H,(DPL)=00H6、查表指令(2条)汇编指令格式机器码格式操作注释MOVCA,@A+DPTR;10010011先(PC)+1→PC,后((A)+(DPTR))→A(远程查表)MOVCA,@A+PC;10000011先(PC)+1→PC,后((A)+(PC)→A(近程查表)上述两条指令的操作过程如图3-7所示。图3-7程序存贮器传送(查表)基地址寄存器+变址寄存器间接寻址@PC+A(程序存储器0-64K)基地址寄存器+变址寄存器间接寻址@DPTR+A(程序存储器0-64K)A寄存器8例:若:初始ROM内容2000H00H2001H01H2002H09H2003H04H2004H06H2005H08H2006HFFH2007H66H2008H45H2009HABH200AH11HH执行下面程序段后结果如何?MOVDPTR,#2000H;(DPTR)=2000HMOVA,#0AH;(A)=0AHMOVCA,@A+DPTR;(A)=((A)+(DPTR))=(200AH)则:(A)=(200AH)=11H例:若:初始ROM内容为:100FH01H1010H02H1011H03H1012H04H1000H740DMOVA,#0DH;(A)=0DH1002H83MOVCA,@A+PC;(PC)=1002+1=1003H,(A)=((A)+(PC))=(0D+1003)=(1010H)(A)=02H1003HF8MOVR0,A;(R0)=(A)=02H所以,最后结果为:(A)=02(R0)=02(PC)=10047、累加器A与片外RAM传送指令(4条)在8051指令系统中,CPU对片外RAM的访问只能用寄存器间接寻址的方式,且仅有四条指令:汇编指令格式机器码格式操作注释MOVXA,@Ri;1110001i((Ri))→AMOVXA,@DPTR;11100000((DPTR))→AMOVX@Ri,A;1111001i(A)
本文标题:第3章 单片机原理及接口技术讲稿(第三版)-李朝青
链接地址:https://www.777doc.com/doc-3201620 .html