第3章MCS-51单片机指令系统第3章MCS-51单片机指令系统3.1寻址方式3.2指令系统第3章MCS-51单片机指令系统1.单字节指令格式由8位二进制编码表示,例如:CLRA→E4H2.双字节指令双字节指令格式由两个字节组成,操作码和操作数,例如:MOVA,#10H→74H10H3.三字节指令三字节指令格式中,第一个字节为操作码,后两个字节为操作数,例如:MOV40H,#30H→75H40H30H第3章MCS-51单片机指令系统一条汇编语言指令中最多包含4个区段,如下所示:[标号:]操作码[操作数][;注释]4个区段之间要用分隔符分开:标号与操作码之间用“:”隔开,操作码与操作数之间用空格隔开,操作数与注释之间用“;”隔开,如果操作数有两个以上,则在操作数之间要用逗号“,”隔开(乘法指令和除法指令除外)。第3章MCS-51单片机指令系统3.1寻址方式所谓寻址方式,就是寻找操作数地址的方式,在用汇编语言编程时,数据的存放、传送、运算都要通过指令来完成。编程者必须自始至终都要十分清楚操作数的位置,以及如何将它们传送到适当的寄存器去参与运算。每一种计算机都具有多种寻址方式。寻址方式的多少是反映指令系统优劣的主要指标之一。第3章MCS-51单片机指令系统在MCS-51单片机指令系统中,有以下7种寻址方式:(1)立即寻址;(2)直接寻址;(3)寄存器寻址;(4)寄存器间接寻址;(5)基址寄存器加变址寄存器间接寻址;(6)相对寻址;(7)位寻址。第3章MCS-51单片机指令系统1.立即寻址方式是指操作数包含在指令字节中。跟在指令操作码后面的数就是参加运算的数,该操作数称为立即数。立即数有一字节和二字节两种可能,例如指令:MOVA,#3AHMOVDPTR,#0DFFFH上述两条指令均为立即寻址方式,第一条指令的功能是将立即数3AH送累加器A中,第二条指令的功能是将立即数0DFFFH送数据指针DPTR中(0DFH→DPH,0FFH→DPL)。第3章MCS-51单片机指令系统2.在指令中直接给出操作数的地址,这种寻址方式就属于直接寻址方式。在这种方式中,指令的操作数部分直接是操作数的地址。在MCS-51单片机指令系统中,直接寻址方式中可以访问3种存储器空间:(1)内部数据存储器的低128个字节单元(00H~7FH)。(2)特殊功能寄存器。特殊功能寄存器只能用直接寻址方式进行访问。(3)位地址空间。第3章MCS-51单片机指令系统3.寄存器寻址在该寻址方式中,参加操作的数存放在寄存器里。寄存器包括8个工作寄存器R0~R7,累加器A,寄存器B、数据指针DPTR和布尔处理器的位累加器C。第3章MCS-51单片机指令系统4.寄存器间接寻址在这种寻址方式中,寄存器的内容为操作数的地址。寄存器间接寻址只能使用寄存器R0、R1作为地址指针,寻址内部RAM区的数据;当访问外部RAM时,可使用R0、R1及DPTR作为地址指针。寄存器间接寻址符号为“@”,例如:第3章MCS-51单片机指令系统5.这种寻址方式用于访问程序存储器中的数据表格,它以基址寄存器DPTR或PC的内容为基本地址,加上变址寄存器A的内容作为操作数的地址,例如:MOVCA,@DPTR+AJMP@A+DPTRMOVCA,@PC+A第3章MCS-51单片机指令系统6.相对寻址在MCS-51指令系统中设有转移指令,分为直接转移和相对转移指令,在相对转移指令中采用相对寻址方式。这种寻址方式是以PC的内容为基本地址,加上指令中给定的偏移量作为转移地址。指令中给出的偏移量是一个8位带符号的常数,可正可负,其范围为-128~+127。7.位寻址该种寻址方式中,操作数是内部RAM单元中某一位的信息。第3章MCS-51单片机指令系统3.2指令系统3.2.1指令分类按指令的功能,MCS-51指令系统可分为下列5类:(1)数据传送;(2)算术运算;(3)逻辑运算;(4)位操作;(5)控制转移。第3章MCS-51单片机指令系统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位常数。#data16——指令中的16位常数。addr16——16位的目的地址,用于LJMP#,LCALL指令,可指向64KB程序存储器地址空间。第3章MCS-51单片机指令系统addr11——11位的目的地址,用于AJMP,ACALL指令。目的地址必须与下一条指令的第一个字节在同一个2KB程序存储器地址空间之内。rel——8位带符号的偏移量字节,用于SJMP和所有条件转移指令中。偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值。bit——内部数据RAM或特殊功能寄存器中的可直接寻址位。DPTR——数据指针,可用作16位的地址寄存器。第3章MCS-51单片机指令系统A——累加器。B——寄存器,用于MUL和DIV指令中。C——进位标志或进位位。@——间接寻址寄存器或基址寄存器的前缀,如@Ri,@DPTR。/——位操作数的前缀,表示对该位取反。(X)——X中的内容。((X))——由X寻址的单元中的内容。←——箭头左边的内容被箭头右边的内容所代替。第3章MCS-51单片机指令系统3.2.2数据传送类指令图3–1MCS-51传送指令示意图第3章MCS-51单片机指令系统表3.1数据传送类指令一览表第3章MCS-51单片机指令系统表3.1数据传送类指令一览表第3章MCS-51单片机指令系统1.数据传送到累加器AMOVA,R0MOVA,directMOVA,@RiMOVA,#data这组指令的功能是:把源操作数的内容送入累加器A。例如:MOVA,#10H,该指令执行时将立即数10H送入累加器A中。第3章MCS-51单片机指令系统2.数据传送到工作寄存器RnMOVRn,AMOVRn,directMOVRn,#data这组指令的功能是:把源操作数的内容送入当前工作寄存器区的R0~R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0确定,可以是00H~07H、08H~0FH、10H~17H、18H~1FH。例如:MOVR0,A,若当前RS1、RS0设置为00(即工作寄存器0区),执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM00H)单元中。第3章MCS-51单片机指令系统3.数据传送到内部RAM单元或特殊功能寄存器SFR的指令MOVdirect,AMOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#dataMOV@Ri,AMOV@Ri,directMOV@Ri,#dataMOVDPTR,#data16第3章MCS-51单片机指令系统这组指令的功能是:把源操作数的内容送入内部RAM单元或特殊功能寄存器。其中第三条指令和最后一条指令都是三字节指令。第三条指令的功能很强,能实现内部RAM之间、特殊功能寄存器之间或特殊功能寄存器与内部RAM之间的直接数据传送。最后一条指令是将16位的立即数送入数据指针寄存器DPTR。第3章MCS-51单片机指令系统4.累加器AMOVXA,@DPTRMOVXA,@RiMOVX@DPTR,AMOVX@Ri,A第3章MCS-51单片机指令系统这组指令是:在累加器A与外部数据存储器RAM单元或I/O口之间进行数据传送,前两条指令执行时,P3.7引脚上输出RD有效信号,用作外部数据存储器的读选通信号;后两条指令执行时,P3.6引脚上输出WR有效信号,用作外部数据存储器的写选通信号。DPTR所包含的16位地址信息由P0(低8位)和P2(高8位)输出,而数据信息由P0口传送,P0口作分时复用的总线。由Ri作为间接寻址寄存器时,P0口上分时输出Ri指定的8位地址信息及传输8位数据。第3章MCS-51单片机指令系统5.PUSHdirectPOPdirect在MCS-51单片机的内部RAM中,可以设定一个先进后出的区域,称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置。进栈指令的功能是:首先将堆栈指针SP的内容加1,然后将直接地址所指出的内容送入SP指出的内部RAM单元;出栈指令的功能是:将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元,接着将堆栈指针SP的内容减1。第3章MCS-51单片机指令系统例如:进入中断服务子程序时,把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。设当前SP为60H。则PUSHPSWPUSHACCPUSHDPLPUSHDPH执行后,SP内容修改为64H,而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容。当中断服务程序结束之前,如下程序段(SP保持64H不变)第3章MCS-51单片机指令系统POPDPHPOPDPLPOPACCPOPPSW执行之后,SP内容修改为60H,而64H、63H、62H、61H单元中的内容依次弹出到DPH、DPL、A、PSW中。MCS-51提供一个向上升的堆栈,因此SP设置初值时要充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的使用。第3章MCS-51单片机指令系统6.MOVCA,@A+PCMOVCA,@A+DPTR这是两条很有用的查表指令,可用来查找存放在外部程序存储器中的常数表格。第一条指令是以PC作为基址寄存器,A的内容作为无符号数和PC的内容(下一条指令的起始地址)相加后得到一个16位的地址,并将该地址指出的程序存储器单元的内容送到累加器A。这条指令的优点是不改变特殊功能寄存器和PC的状态,只要根据A的内容就可以取出表格中的常数。缺点是表格只能放在该条查表指令后面的256个单元之中,表格的大小受到限制,而且表格只能被一段程序所利用。第3章MCS-51单片机指令系统第二条指令是以DPTR作为基址寄存器,累加器A的内容作为无符号数与DPTR内容相加,得到一个16位的地址,并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关,因此,表格的大小和位置可以在64KB程序存储器中任意安排,并且一个表格可以为各个程序块所共用。第3章MCS-51单片机指令系统7.字节交换指令XCHA,RnXCHA,@RiXCHA,directXCHDA,@RiSWAPA前三条指令是将累加器A的内容和源操作数内容相互交换;后两条指令是半字节交换指令,最后一条指令是将累加器A的高4位与低4位之间进行交换,而另外一条指令是将累加器A的低4位内容和(Ri)所指出的内部RAM单元的低4位内容相互交换。第3章MCS-51单片机指令系统3.2.3算术运算类指令表3.2算术运算指令第3章MCS-51单片机指令系统表3.2算术运算指令第3章MCS-51单片机指令系统表3.3影响标志位的指令第3章MCS-51单片机指令系统表3.3影响标志位的指令第3章MCS-51单片机指令系统一、加法指令1.普通加法指令ADDA,RnADDA,directADDA,@RiADDA,#data第3章MCS-51单片机指令系统例如:120和100之和为220,显然大于127,相加时011110001200110010010011011100220+符号位(最高位)由0变1,两个正数相加结果变负,实际上它是和数的最高位,符号位移入了进位标志,此时位6有进位而位7无进位,置位溢出标志OV,结果溢出。第3章MCS-51单片机指令系统同样,-120和-100相加,结果应为-220,显然小于-128,相加时10001000-12010011100-100+100100100-220符号位由1变为0,两个负数相加结果变为正数,这是因为符号位移入进位标志,位6无进位而位7有进位,置位溢出标志OV,由此可判断结果