《单片机技术及应用》课件第3章 MCS-51的指令系统_第1页
《单片机技术及应用》课件第3章 MCS-51的指令系统_第2页
《单片机技术及应用》课件第3章 MCS-51的指令系统_第3页
《单片机技术及应用》课件第3章 MCS-51的指令系统_第4页
《单片机技术及应用》课件第3章 MCS-51的指令系统_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章MCS-51的指令系统寻址方式指令分类指令格式及约定标识符指令格式【标号:】操作符【目的操作数】【,源操作数】【;注释】约定标识符Ri和Rn:i=0、1,n=0~7。#data/#data16:表示8/16位立即数。rel:8位偏移量。-128~127,补码。addr16/addr11:16/11位直接地址。direct:8位直接地址。内部RAM或SFR。bit:直接位地址(X)、((X))、“→”§3.3MCS-51的寻址方式寄存器寻址直接寻址寄存器间接寻址立即数寻址基址+变址寻址位寻址相对寻址指令的寄存器中是操作数:

MOVA,R0指令直接给出操作数的地址:

MOVA,30H指令的寄存器中是操作数的地址:

MOVA,@R0操作数是常数:

MOVA,#30H只能访问程序存储器:

MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR指令直接给出操作数的位地址:

SETBP1.0CLRCANLP2.5专门为转移指令而设置的寻址:

SJMPrel;(PC)+rel→PCJZrel;(A)=0,则(PC)+rel→PC必须搞清楚操作数在什么地方?用什么方式寻址才能得到它?这不仅与寻址相关,而且与指令也有关系!立即数寻址MOVA,#40H;40H→A直接寻址MOVA,40H;(40H)→A寄存器寻址MOVA,Rn;(Rn)→A,n=0~7寄存器间接寻址MOVA,@Ri;((Ri))→A,片内RAM,i=0、1MOVXA,@Ri;((Ri))→A,片外RAMMOVXA,@DPTR;((DPTR))→A,片外RAMPUSHA ;(SP)+1→SP,(A)→(SP)POPA ;((SP))→A,(SP)-1→SP判断以下指令的寻址方式寻址方式举例基址+变址寻址-操作数在程序存储器中MOVCA,@A+DPTR

;((A)+(DPTR))→AMOVCA,@A+PC

;((A)+(PC))→AJMP@A+DPTR

;((A)+(DPTR))→PC相对寻址为转移指令所用目的地址=转移指令所在地址+该转移指令的字节数+rel=下条指令地址+rel=(PC)+relrel,为偏移量,取值范围-128~+127。标志相当于PC的两个方向的转移。在程序中,我们用标号表示。不必关心rel的值。查表指令由位指令提供的位操作位地址的表示直接地址,SETB0AFH位标号,STEBEA单元地址.位数,STEB(A8H).7寄存器符号.位数,STEBIE.7两个位寻址区-内部RAM中具有位地址的区域与SFR。位寻址§3.4MCS-51指令分类数据传送类算数操作类逻辑运算类控制转移类位操作类指令功能指令执行周期数对程序状态字的影响1、数据传送类:普通传送指令

1、片内数据传送指令

2、片外数据传送指令

3、程序存储传送指令数据交换指令堆栈操作指令普通传送类指令(1)、片内数据传送指令MOV指令格式:MOV目的操作数,源操作数其中:源操作数(A、Rn、@Ri、direct、#data)

目的操作数(A、Rn、@Ri、direct、DPTR)①以A为目的操作数(4条)

MOVA,Rn/direct/@Ri/#data②以寄存器Rn为目的的操作数的指令(3条)

MOVRn,Rn/direct/A/#data③以直接地址direct为目的操作数的指令(5条)

MOVdirect,Rn/direct/A/@Ri/#data④以间接地址@Ri为目的操作数的指令(3条)

MOV@Ri,direct/A/#data⑤16位数据传送指令(1条)

MOVDPTR,#data16注意:片内数据存储器传送指令中不允许有如下指令

MOVRn,RnMOV@Ri,Ri(2)、片外数据传送指令MOVX指令格式:MOVX目的操作数,源操作数其中:源操作数(A、@Ri、@DPTR)

目的操作数(A、@Ri、@DPTR)①以A为目的操作数(4条)

MOVXA,@DPTR/@Ri②以寄存器@DPTR/@Ri

为目的的操作数的指令(3条)

MOV@DPTR/@Ri

,A(3)程序储存器数据传送指令MOVC

这类指令共有2条,两条指令都为基址加变址间接寻址方式。其功能是将存放在程序存储器ROM中的表格数据进行查找传送,所以又称查表指令。MOVCA,@A+DPTRMOVCA,@A+PC

2、堆栈指令(共2条)(1)、入栈指令PUSH

PUSHdirect

;(SP)+1→SP,(direct)→(SP)(2)、出栈指令POP

POPdirect

;((SP))→(direct),(SP)-1→SP

3、交换指令(共5条)⑴、字节交换XCHXCHA,Rn/direct/@Ri

;字节交换⑵、半字节交换XCHDXCHDA,@Ri;低半字交换⑶、自交换SWAPSWAPA ;A中高低半字交换总结MOVC的间接寻址数据与#data来自程序存储器MOVX指令的间接寻址数据来自外部数据存储器其余指令的数据来自内部RAM数据传送类指令的状态标志当这类指令的目标地址是累加器A时,指令执行后P标志会受影响。其它标志位是不受影响的。ADDA,Rn/direct/@Ri/#dataADDCA,Rn/direct/@Ri/#dataSUBBA,Rn/direct/@Ri/#dataINCRn/direct/@Ri/DPTRDECRn/direct/@RiMULABDIVABDAA2、算数操作类:除增1和减1指令,其余对Cy、Ac、OV、P有影响。关于OV,有效于符号数加法运算中,对于8位符号数其数的范围在:-128~+127。超出即溢出。其表现为:当结果应该为正时,却为负;当结果应该为负时,却为正,OV=1,说明溢出。否则,没有溢出。举例算数类指令的状态标志例3-1、异号数相加。指令执行前:(A)=49H,(30H)=ECH。执行指令:ADDA,30H01001001+)111011001←00110101指令执行后:(A)=35H,Cy=1,Ac=1,OV=0,P=0例3-2、同号数相加。指令执行前:(A)=ACH,(R1)=65H,(65H)=D3H。执行指令:ADDA,@R110101100+)110100111←01111111指令执行后:(A)=7FH,Cy=1,Ac=0,OV=1,P=1关于DA指令的BCD调整

由于ADD指令只能进行2进制运算;所以,在BCD码的加法运算中,其运算结果可能不再是BCD码;这时,用DA指令对结果进行调整,使其仍为BCD码。下面是可能出现的3种情况(P75例如):⑴、无进位,<9。例、2+4=60010

+)0100

0110⑵、无进位,>9。例、5+7=120101

+)0111

1100⑶、有进位,<9。例、9+7=161001

+)0111

1←0000由以上3种BCD码运算结果可以得出:①的运算结果是正确的②的运算结果错误,因为BCD码十进制数中只有0~9这10组四位二进制数没有1100这个编码。③运算结果错误,正确结果为16,而运算结果10。

调整方法①累加器低4位大于9或者辅助进位位Ac=1,则低4位加6调整。②累加器高4位大于9或者进位位Cy=1,则高4位加6调整。③累加器高4位为9,低4位大于9,则高4位和低4位分别加6调整。上述BCD码的加法运算进行十进制调整都是通过“DAA”指令自动实现的。3、逻辑运算类指令:ANLA,Rn/direct/@Ri/#dataANLdirect,A/#dataORLA,Rn/direct/@Ri/#dataORLdirect,A/#dataXRLA,Rn/direct/@Ri/#dataXRLdirect,A/#dataCLRACPLARLARLCARRARRCA

这类指令,除检验目的累加器A的P标志外,其它标志位不受影响。例、将逻辑单元中的某些位(如:D2、D5、D7)置1,清0,取反,其余位不变。置1 将置1的位“或”1,不变的位“或”0。 ORLP1,#10100100B清0 将清0的位“与”0,不变的位“与”1。 ANLP1,#01011011B取反 将取反的位“异或”1,不变的位“异或”0。XRLP1,#10100100B4、控制转移类指令:子程序调用无条件转移条件转移空操作ACALLaddr11LCALLaddr16RET ;子程序返回RETI ;中断返回AJMPaddr11LJMPaddr16SJMPrelJMP@A+DPRTJZrel ;(A)=0转移。JNZrel ;(A)≠0转移。CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Rn,#data,relDJNZRn,relDJNZdirect,relNOP5、位操作类指令

:功能类型同前述关于bit寻址,面对所有具有位地址的单元。指令功能指令功能MOV

C,bit直接寻址位送CANL

C,bitC逻辑与直接寻址位MOV

bit,CC送直接寻址位ANL

C,/bitC逻辑与直接寻址位的反CLR

CC清零ORL

C,bitC逻辑或直接寻址位CLR

bit直接寻址位清零ORL

C,/bitC逻辑或直接寻址位的反CPL

CC取反JC

relC为1转移CPL

bit直接寻址位取反JNC

relC为零转移SETB

CC置位JB

bit,rel直接寻址位为1转移SETB

bit直接寻址位置位JNB

bit,rel直接寻址为0转移JBC

bit,rel直接寻址位为1转移并清该位位操作类指令表作业:P95一、二3.7

MCS-51汇编语言程序设计汇编语言源程序的基本结构

顺序结构分支循环子程序中断服务程序分支程序设计例:求累加器A中,单字节符号数的补码。complement: JNBACC.7,return MOVC,ACC.7 ;保存符号位

CLPA ADDA,#1 MOVACC.7,C

;恢复符号位return: RET分支程序-单分支设计方法图1图2图3构成条件循环循环程序设计循环构成初始化循环处理循环控制循环结构循环的控制计数循环DJNZRn/direct,rel条件循环结构1结构2子程序设计

具有特定功能的、独立的、通用的程序模块。子程序的结构子程序名:就是子程序中的第一条指令的标号。PUSH指令要保护的是子程序要用到的公共资源。在子程序使用完返回上级程序时,必须将这些公共资源恢复成原来状态。在使用调用指令时,要注意ACALL与LCALL的区别参数传递:在调用子程序前,首先要将需要子程序处理的原始数据放入子程序指定的地方。在子程序中,程序自然会从该处取走数据,进行处理。返回后,上级程序应在子程序指定的地方去取处理结果。main:…… …… LCALLsubprogram …… ……subprogram:

PUSHx1 ;保护现场

PUSHx2 ……

处理程序锻

…… POPx2 ;恢复现场

POPx1 RET延时子程序一条DJNZ指令能够延时最长时间每个机器周期时间×指令周期数×循环次数=延时时间每个机器周期时间×2×256=延时时间如果时钟=12MHz,则,1μS×2×256=512μS

双重循环延时子程序分析

总周期数=(2×L1+2+1+X)×L2;L1、L2取值应使:(2×L1+2+1+X)×L2=延时时间÷周期时间=总周期数delay: MOVR7,#L2loop2:MOVR6,#L1 …… ;Xloop1:DJNZR6,loop1

DJNZR7,loop2如果时钟=12MHz,设计50mS延时子程序。总周期数=50000μS÷1μS=50000=250×200如果,L2=200,则,(2×L1+2+1+X)=(2×L1+3+X)=250L1=(250-3-X)÷2=(250-3-1)÷2=123……取X=1,增加一条NOP指令。如果时钟=12MHz,设计650μS延时子程序。总周期数=650μS÷1μS=650=13×50如果,L2=50,则,(2×L1+2+1+X)=(2×L1+3+X)=13L1=(13-3-X)÷2=(13-3-0)÷2=5……取X=0,不需增加NOP指令。如果时钟=6MHz,设计65mS延时子程序。总周期数=65000μS÷2μS=32500=130×250如果,L2=250,则,(2×L1+2+1+X)=(2×L1+3+X)=130L1=(130-3-X)÷2=(130-3-1)÷2=63……取X=1,增加一条NOP指令。如果时钟=12MHz,采用单循环设计650μS延时子程序。总周期数=650μS÷1μS=650=5×130如果单循环,总周期数=(2+X)×L1;如果取L1=130,则,(2+X)=5;所以,X=3……需增加3条NOP指令。delay: MOVR7,#L1loop1:…… ;X DJNZR6,loop1查表程序设计表格构建表格的使用:查表指令MOVCA,@A+PCMOVCA,@A+DPTRxf(x

)0f(0)1f(1)……n-1f(n-1)算出所有f(x),按x的顺序,依次存放在存储器中。x是f(x)的自变量,实际上也是f(x)的相对地址。基址+变址的计算,要的是f(x)在程序存储器中的绝对地址。关于f(x)的地址讨论相对地址f(x)012345(n-1)×2f(0)f(1)f(2)f(n-1)如果f(x)不等于1个字节,x就不能再成为f(x)的相对地址。f(x)在表中相对地址x内容0×字节数0f(0)1×字节数1f(1)2×字节数2f(2)3×字节数3f(3)4×字节数4f(4)…………n-1×字节数n-1f(n-1)……f(x)的相对地址=x×

f(x)的字节数f(x)的绝对地址=起始地址+相对地址MOVCA,@A+PC查表MOVCA,@A+PCRETTAB:PC:偏移量f(x)在表中相对地址=字节数×X数据表的首地址=(PC)+偏移量f(x)的绝对地址=首地址+相对地址

=(A)+(PC)=((PC)+偏移量)+相对地址 ……

根据x计算相对地址存入A

ADDA,偏移量

MOVCA,@A+PC

…… RETtab: DBf(0),f(1),f(2),……f(x),……MOVCA,@A+PC查表方法

显然使用这种查表指令,由于PC不能修改,偏移量只能加到A中。因此,偏移量越大,指令所支持表的空间越小。该指令能够访问的表空间<255个字节!如果f(x)只有一个字节,计算省去。一次只能得到一个字节,所以,f(x)有多少个字节,就要查多少次。MOVCA,@A+DPTR查表MOVCA,@A+DPTRTAB:相对地址=字节数×X数据表的首地址=(DPTR)f(x)的绝对地址=(A)+(DPTR)=首地址+相对地址MOVCA,@A+DP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论