物理单片机3第三章寻址方式课件_第1页
物理单片机3第三章寻址方式课件_第2页
物理单片机3第三章寻址方式课件_第3页
物理单片机3第三章寻址方式课件_第4页
物理单片机3第三章寻址方式课件_第5页
已阅读5页,还剩247页未读 继续免费阅读

下载本文档

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

文档简介

1

单片机原理及应用北京化工大学信息科学与技术学院郭青1单片机原理及应用北京化工大学第三章80C51指令系统本章重点寻址方式指令格式操作结果及对标志位影响第三章80C51指令系统本章重点3.1概述分类数据传送类指令29数学运算类指令24逻辑运算类指令24控制转移类指令17位操作指令17111条指令3.1概述分类数据传送类指令29数学运算类指按指令长度分类单字节指令双字节指令三字节指令指令执行时间12个振荡周期6424个振荡周期4548个振荡周期2按指令长度分类单字节指令双字节指令三字节指令指令执行时间12指令格式标号:操作码[(目的操作数),(源操作数)];注释指令的符号地址由字母打头的字母数字串组成,长度一般不超过6个符号指令操作的性质用规定的汇编语言助记符表示指令操作的对象指令格式标号:操作码[(目的操作数),(源操作数)]3.2寻址方式和寻址空间概念:说明操作数所在的位置(地址),把操作数提取出来的方法基本寻址方式:1、寄存器寻址 2、直接寻址3、寄存器间接寻址 4、立即寻址5、相对寻址 6、变址寻址7、位寻址3.2寻址方式和寻址空间概念:基本寻址方式:1、寄存器一、寄存器寻址操作数—通用寄存器的内容表示符号—寄存器名称寻址范围工作寄存器Rn(R0~R7)寄存器ACC(累加器A)寄存器B,DPTR,位寄存器Cy一、寄存器寻址操作数—通用寄存器的内容寻址范围工作寄存器880C52片内数据RAM位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片内数据存储器片外数据存储器ACCDPTRB880C52片内数据RAM位寻址区R7~R03组R7~二、直接寻址操作数—指令中直接地址的内容寻址范围:1、内部数据RAM的低128个字节单元2、特殊功能寄存器3、位地址空间通用符号:direct二、直接寻址操作数—指令中直接地址的内容寻址范围:1、内1080C52片内数据RAM

位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片内数据存储器片外数据存储器1080C52片内数据RAM位寻址区R7~R03组R7三、寄存器间接寻址方式指令指定的寄存器内容为操作数地址间址寄存器—R0,R1,DPTR,SP寻址范围1、内部RAM的低128字节(00H~7FH)

@R0,@R1(@Ri,i=0,1)2、外部RAM的64KB(0000H~FFFFH)

@DPTR,@R0,@R1符号

@寄存器名3、堆栈区SP为间址寄存器三、寄存器间接寻址方式指令指定的寄存器内容为操作数地址间址寄1280C52片内数据RAM位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片内数据存储器片外数据存储器1280C52片内数据RAM位寻址区R7~R03组R7四、立即寻址方式指令直接给出操作数,操作数为8位或16位二进制数,称立即数寻址范围程序存储器中的立即数通用符号:#data(8位),#data16(16位)四、立即寻址方式指令直接给出操作数,操作数为8位或16位二进五、相对寻址方式以PC当前值为基址,加上指令中给出的偏移量(rel)形成有效的程序转移地址。控制转移类指令转移范围:以PC当前值为起始地址,相对偏移在+127~-128个字节单元之间。偏移量rel

八位二进制补码五、相对寻址方式以PC当前值为基址,加上指令中给出的偏移量(1005H:JC80H执行过程:读指令,完成后(PC)=(PC)+2如C=1,则(PC)=(PC)+rel

转移至1007H-80H=0F87H单元如C=0则执行1007H单元中的指令后向128个单元前向127个单元1005H40H1006H80H1007H0F87H1086H1005H:JC80H执行过程:读指令,完成后(六、变址间接寻址基址寄存器内容加上间址寄存器内容(地址偏移量)为有效地址基址寄存器:PC,DPTR变址寄存器:A寻址范围:程序存储器例:MOVCA,@A+DPTR

设A=11HDPTR=02F1H操作数地址为02F1H+11H=0302H操作:(0302H)A六、变址间接寻址基址寄存器内容加上间址寄存器内容(地址偏移量七、位寻址MCS-51设有独立的位处理器,位地址一般用直接位地址方式给出,可归入直接寻址方式寻址范围:位寻址内部RAM128位可位寻址的SFR82位位地址的表示方式:1、直接地址(位地址)2、位名称3、第几单元第几位,寄存器名+位4、用伪指令指定的符号地址通用符号bit七、位寻址MCS-51设有独立的位处理器,位地址一般用直接位例:PSW中F0(用户标志)可表示如下:D5HF0PSW.5AF(AFEQUF0)例:PSW中F0(用户标志)可表示如下:D5H193.3指令系统193.3指令系统3.3.1数据传送类指令按操作方式,分为三种:数据传送数据交换栈操作3.3.1数据传送类指令按操作方式,分为三种:数据传一、普通传送类指令格式:MOV(目的操作数),(源操作数)操作码助记符操作:将源操作数单元内容,传送到目的操作数单元中,源操作数内容不变。不影响标志位Cy,AC和OV。一、普通传送类指令格式:MOV(目的操作数),(源操作数操作数的组合关系操作数的组合关系1、立即数的传送MOVA,#data(A)#dataMOVRn,#data(Rn)#dataMOV@Ri,#data((Ri))#dataMOVdirect,#data(direct)#dataMOVDPTR,#data16(DPTR)#data1、立即数的传送MOVA,#data(A)#dataM说明:a、MOVA,#data将8位立即数送入累加器A中例:MOVA,#80H操作结果:(A)=80Hb、MOVRn,#datan=0~7将8位立即数送入工作寄存器Rn中例:MOVR4,#80H操作结果:(R4)=80H说明:a、MOVA,#data将8位立即数送入累加器A中c、MOV@Ri,#data将8位立即数送入由Ri指定的地址单元中,i=0,1。Ri中的地址为00H~7FH(8051)00H~FFH(8052)注:仅寻址内部RAM,不能寻址SFR例:MOV@R0,#32H

设(R0)=70H,(70H)=11H执行结果:(70H)=32Hc、MOV@Ri,#data将8位立即数送入由Ri指定d:MOVdirect,#data将8位立即数送入由direct直接寻址的地址单元中。direct:00H~FFH,8位二进制地址码寻址内部RAM(00H~7FH)及SFR例:MOV70H,#70H

MOVP0,#70H

MOV80H,#70Hd:MOVdirect,#data将8位立即数送入由die:MOVDPTR,#data唯一的16位数据传送指令,把16位立即数送入DPTR中例:MOVDPTR,#2034H执行结果:(DPH)=20H

(DPL)=34He:MOVDPTR,#data唯一的16位数据传送指令,2、内部数据存储器与累加器A传送数据MOVA,direct(A)(direct)MOVdirect,A(A)(direct)MOVA,Rn(A)(Rn)MOVRn,A(A)(Rn)MOVA,@Ri(A)((Ri))MOV@Ri,A((Ri))(A)2、内部数据存储器与累加器A传送数据MOVA,dire寻址方式的组合寻址方式的组合例:MOVR1,#82HMOVA,@R180C51指令错误因为82H是DPL的地址值,对于SFR,不能使用间接寻址方式正确指令:MOVA,DPL

或MOVA,82H80C52正确,寻址内部RAM例:MOVR1,#82H80C51指令错误正确指令:MO3、内部数据存储器中Rn、SFR和片内数据RAM之间的数据传送MOVdirect,direct(direct目的)(direct源)MOVdirect,Rn(direct)(Rn)MOVRn,direct(direct)(Rn)MOVdirect,@Ri(direct)((Ri))MOV@Ri,direct((Ri))(direct)3、内部数据存储器中Rn、SFR和片内数据RAM之间的数据传[物理]单片机3第三章寻址方式课件例1:设PSW中标志位RS1,RS0为“11”,则选中第三组工作寄存器MOV40H,R0MOV40H,18H结果相同例1:设PSW中标志位RS1,RS0为“11”,则选中第三组用立即寻址指令为片内RAM中20H,25H和P1口上置数例2:MOV20H,#25HMOV25H,#10HMOVP1,#0CAH执行结果

(20H)=25H,(25H)=10H

(P1)=CAH用立即寻址指令为片内RAM中20H,25H和P1口上置数例2将以上状态作为初值,执行以下程序,结果如何MOVR0,#20HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP3,P1(R0)=20H(A)=((R0))=(20H)=25H(R1)=(A)=25H(B)=((R1))=(25H)=10H((R1))=P1(25H)=CAHP3=P1=CAH将以上状态作为初值,执行以下程序,结果如何MOVR0,(A)=?(R1)=?(B)=?(25H)=?(P3)=?(P1)=?(20H)=?25H25H10HCAHCAHCAH25H(A)=?25H二、外部数据存储器的数据传送指令只能间接寻址,且只能与累加器A进行数据传送格式:MOVX(目的操作数),(源操作数)MOVXA,@DPTR(A)((DPTR))MOVX@DPTR,A((DPTR))(A)MOVXA,@Ri(A)((Ri))MOVX@Ri,A((Ri))(A)二、外部数据存储器的数据传送指令只能间接寻址,且只能与累加器例:若片外数据存储单元中,(3007H)=60HMOVDPTR,#3007HMOVXA,@DPTR结果:(A)=60H使用Ri作间址寄存器,此时需用P2口输出高八位地址,应事先预置P2,Ri的值以下程序功能与上例相同:MOVP2,#30HMOVR0,#07HMOVXA,@R0例:若片外数据存储单元中,(3007H)=60HMOVD三、程序存储器向累加器A传送指令—MOVCMOVCA,@A+PC(PC)(PC)+1(A)((A)+(PC)MOVCA,@A+DPTR(A)((A)+(DPTR))功能:把A中内容与基址寄存器(PC,DPTR)内容相加,求得程序存储器某单元地址,再将该地址单元内容送累加器A8位无符号整数三、程序存储器向累加器A传送指令—MOVCMOVCA,说明:1、以PC作为基址寄存器,因为PC值不能任意更改,所以查表范围为PC当前值开始后的256字节。偏移量计算式:DIS=表首地址-(该指令所在地址+1)2、以DPTR作为基址寄存器,因为DPTR的内容可以通过赋值改变,使表格可以设置在64KB程序存储器的任意地址空间。说明:1、以PC作为基址寄存器,因为PC值不能任意更改,所以例1:编制根据累加器A中的数(0~9)查其平方表的子程序。COUNT:PUSHDPH;保护DPTR内容

PUSHDPL;

MOVDPTR,#TABLE

;赋表首地址给DPTRMOVCA,@A+DPTR;根据A中内容查表

POPDPL;恢复DPTR内容

POPDPHRET;返回主程序例1:编制根据累加器A中的数(0~9)查其平方表的子程序。CORG1000HTABLE:DB00DB01DB04DB09DB16DB25DB36DB49DB64DB81DB:伪指令,作用是把其后的值存入由标号开始的连续单元中ORG1000HDB:伪指令,作用是把其后的值例2:编子程序根据A中二进制数查其ASCII码BITOASC:ADDA,#02HMOVCA,@A+PCSJMPBARETDB30H,31H,32H,33HDB34H,35H,36H,37HDB38H,39H,41H,42HDB43H,44H,45H,46HRETTABLE:BARET:;加偏移量调整;查表;返回主程序例2:编子程序根据A中二进制数查其ASCII码BITOASC四、数据交换指令1、字节交换指令XCHA,RnXCHA,directXCHA,@Ri(A)(Rn)

(A)

(direct)(A)((Ri))例:设(R0)=20H,(A)=3FH,(20H)=75H执行指令:XCHA,@R0执行结果:(A)=75H,(20H)=3FH四、数据交换指令1、字节交换指令XCHA,Rn(2、半字节交换指令XCHDA,@Ri(A3~0)((Ri)3~0)例:设(R1)=30H,(A)=67H,(30H)=84H执行指令:XCHDA,@R1执行结果:(A)=64H(30H)=87H2、半字节交换指令XCHDA,@Ri3、累加器A高4位与低4位内容互换指令SWAPA;(A0~3)(A0~3)例:设(A)=0CAH执行指令:SWAPA执行结果:(A)=0ACH3、累加器A高4位与低4位内容互换指令SWAPA5、堆栈操作类指令PUSHdirect(SP)(SP)+1((SP))(direct)POPdirect(direct)((SP))(SP)(SP)-1要点:入栈操作,先执行SP+1,再入栈出栈操作,先出栈,再执行SP-15、堆栈操作类指令PUSHdirect(SP)例:在中断响应时,(SP)=09H,数据指针DPTR的内容为0123H执行以下指令:PUSHDPLPUSHDPH(SP)+1,使(SP)=0AH(DPL)压入0AH单元(SP)+1,(SP)=0BH(DPH)压入0BH单元执行结果:(0AH)=23H(0BH)=01H(SP)=0BH例:在中断响应时,(SP)=09H,数据指针DPTR的内容为堆栈操作需遵循先入后出,后入先出原则,才能保持原单元内容不变例:设(DPTR)=0123HPUSHDPHPUSHDPL…….…….POPDPLPOPDPH执行结果:(DPTR)=0123H如执行:PUSHDPHPUSHDPL·······POPDPHPOPDPL执行结果:(DPTR)=2301H堆栈操作需遵循先入后出,后入先出原则,才能保持原单元内容不变3.3.2算术运算类指令类型:加,减,乘,除,增量、减量以及二—十进制调整指令ADD、ADDC、SUBB指令的执行将影响标志位(PSW中的OV,Cy,AC及P)要求掌握指令的操作结果对标志位的影响3.3.2算术运算类指令类型:加,减,乘,除,增量、减一、加法指令ADD目的操作数—累加器A源操作数—

4种寻址方式ADDA,Rn(A)(A)+(Rn)ADDA,direct(A)(A)+(direct)ADDA,@Ri(A)(A)+((Ri))ADDA,#data(A)(A)+#data运算均针对无符号二进制数进行,但结合OV标志可实现有符号数运算。结果将影响OV,Cy,AC,P标志A源+A一、加法指令ADD目的操作数—累加器AADDA,R当最高位有进位,Cy=1位3向位4有进位,AC=1OV取决于6、7两位的进位情况,同时有进位或无进位,则OV=0;只有一位有进位,OV=1A中有偶数个1,P=0;否则,P=1当最高位有进位,Cy=1例:设(A)=0C3H,(R0)=0AAH

执行指令:ADDA,R0

写出执行结果及对标志位影响(A)11000011+(R0)10101010

01101101C=1AC=0OV=1P=1(A)=6DH只对有符号数运算有意义。两负数相加,结果为正数,溢出例:设(A)=0C3H,(R0)=0AAH(A例:设(A)=0C3H,(R0)=0AAH

执行指令:ADDA,R0

写出执行结果及对标志位影响(A)11000011+(R0)10101010

01101101C=1AC=0OV=1P=1(A)=6DH无符号数195+170=365有符号数-61+(-86)=-147109溢出

例:设(A)=0C3H,(R0)=0AAH(A二、带进位加法指令ADDCADDCA,Rn;(A)(A)+(C)+(Rn)ADDCA,direct;(A)(A)+(C)+(direct)ADDCA,@Ri;(A)(A)+(C)+((Ri))ADDCA,#data;(A)(A)+(C)+(#data)常用于多字节加法二、带进位加法指令ADDCADDCA,Rn;例:设(A)=0C3H,(R0)=0AAH,C=1

执行指令:ADDCA,R0(A)11000011+(C)0000000111000100+(R0)10101010

01101110C=1AC=0OV=1P=1(A)=6EH例:设(A)=0C3H,(R0)=0AAH,C=1(A三、带借位减法指令SUBBSUBBA,Rn;(A)(A)-(C)-(Rn)SUBBA,direct;(A)(A)-(C)-(direct)SUBBA,@Ri;(A)(A)-(C)-((Ri))SUBBA,#data;(A)(A)-(C)-#data影响标志位:最高位有借位,Cy=1位3向位4有借位,AC=1最高两位同时有借位或无借位,OV=0;只有一位有借位,OV=1三、带借位减法指令SUBBSUBBA,Rn;例:设(A)=0C9H,(30H)=54H,C=1

执行:SUBBA,30H(A)11001001-(C)0000000111001000-(30H)01010100

01110100C=0AC=0OV=1P=0(A)=74H只有在符号数相减时,OV才意味着溢出与否,如出现以下两种情况,OV置1:负-正=正正-负=负例:设(A)=0C9H,(30H)=54H,C=1(A)四、增量指令INCINCA;(A)(A)+1INCRn;(Rn)(Rn)+1INCdirect;(direct)(direct)+1INC@Ri;((Ri))((Ri))+1INCDPTR;(DPTR)(DPTR)+1操作:指定变量加1,结果仍存于原地址单元中。除P外,不影响任何标志位。四、增量指令INCINCA;例:设(R0)=7EH,(7EH)=0FFH

(7FH)=40H执行下列指令:INC@R0;INCR0;INC@R0;((R0))=((R0))+1,(7EH)=00H((R0))=((R0))+1,(7FH)=41H(R0)=(R0)+1,(R0)=7FH运行结果:(R0)=7FH,(7EH)=00H(7FH)=41H例:设(R0)=7EH,(7EH)=0FFH执行下列指令:I例:执行指令序列MOVDPTR,#1FFEH;INCDPTR;INCDPTR;INCDPTR;(DPTR)=1FFEH(DPTR)=1FFFH(DPTR)=2000H(DPTR)=2001H例:执行指令序列MOVDPTR,#1FFEH;(DPTR五、减量指令DECDECA;(A)(A)-1DECRn;(Rn)(Rn)-1DECdirect;(direct)(direct)-1DEC@Ri;((Ri))((Ri))-1操作:指定变量减1,结果送回原地址单元,不影响标志位(除P)。设(40H)=00H

执行DEC40H结果:(40H)=FFH不影响标志位五、减量指令DECDECA;六、乘法指令MULAB;(A)0~7(B)8~15(A)*(B)影响标志位:如乘积>255(0FFH)(即B>0),OV=1C总是被清0,即C=0AC不变,对P有影响六、乘法指令MULAB;(A)0~7(A)*(B)影例:设(A)=80H(128),(B)=32H(50)执行指令:MULAB结果:乘积为1900H(6400)(A)=(B)=00H19HOV=Cy=P=100例:设(A)=80H(128),(B)=32H(50)执行指七、除法指令DIVAB;(A)(B)商余数(A)/(B)对标志位影响:当B中除数为00H,除法运算结果为不定值,则A、B中内容均为不定值,OV置1C=0例:(A)=87H(135),(B)=0CH(12)

DIVAB(A)=(B)=0BH(11)03HOV=C=00七、除法指令DIVAB;(A)商(A)/(B)对标八、二—十进制调整指令DAA;调整A中内容为BCD码调整方法:根据C和AC的状态,并结合A的内容IF[(A0~3)>9]OR[(AC)=1],THEN(A0~3)=(A0~3)+06H;IF[(A4~7)>9]OR[(C)=1],THEN(A4~7)=(A4~7)+60H因为指令要利用C和AC,所以必须跟在加法指令(ADD,ADDC)后面八、二—十进制调整指令DAA;调整A中内容为B根据A中的数值及PSW相应标志位的状态,可能的操作为A加06H,60H,66H例:(A)=01010110B(56)(R3)=01100111B(67)以上均为BCD码(C)=0执行指令:ADDCA,R3DAA根据A中的数值及PSW相应标志位的状态,可能的操作为A加06(A)01010110+(R3)0110011110111101A3~0>9,AC=0A7~4>9,C=0+66H调整+0110011000100011结果:(A)=23H

(C)=1对于无符号BCD码运算,56+67=123使用此指令条件:1、两个操作数均为压缩BCD码2、不适合减法和增1运算(A)0101011010例:对于十进制减法运算,可采用补码相加的方法即用9AH减去减数得到以十为模的补码设被减数存30H单元,减数存40H单元,结果存50H单元。程序如下:CLRC;MOVA,#9AH;SUBBA,40H;ADDA,30H;DAA;MOV50H,A清进位位求减数的十补码补码相加调整至BCD码例:对于十进制减法运算,可采用补码相加的方法设被减数存30H3.3.3逻辑运算类指令按操作数分为两类:单操作数指令双操作数指令针对累加器A进行A与第二操作数之间进行操作:清零、求反、移位,与、或、异或3.3.3逻辑运算类指令按操作数分为两类:单一、单操作数逻辑运算类指令1、累加器A清零指令

CLRA;(A)02、累加器求反指令

CPLA;(A)(A)例:设(A)=0AAH(10101010B)执行:CPLA结果:(A)=01010101B(55H)一、单操作数逻辑运算类指令1、累加器A清零指令2、累加器求反3、累加器A循环左移指令

RLA;例:(A)=0C5H(11000101B)RLA(A)=10001011B=8BH3、累加器A循环左移指令例:(A)=0C5H(11000734、累加器A连同进位位C循环左移指令RLCA;例:(A)=45H(01000101B),(C)=1RLCA;(A)=10001011B=8BH(C)=0734、累加器A连同进位位C循环左移指令RLCA5、累加器A循环右移指令RRA

;6、累加器A连同进位位C循环右移指令RRCA

;例:(A)=0C5H(11000101B),(C)=1执行指令:RRCA结果:(A)=11100010B=0E2H(C)=15、累加器A循环右移指令RRA;6、累加器A连同二、双操作数逻辑运算类指令1、逻辑“与”指令ANLA,Rn

ANLA,directANLA,@RiANLA,#data

以A为第一操作数,逻辑“与”运算的结果存入AANLdirect,AANLdirect,#data目的操作数为direct,源操作数为A和立即数二、双操作数逻辑运算类指令1、逻辑“与”指令ANL与指令常用于屏蔽某些不用位。方法:欲屏蔽位该位与“0”相“与”,保留位与“1”相“与”例ANLA,#11110000B;屏蔽低4位,高4位不变与指令常用于屏蔽某些不用位。方法:欲屏蔽位该位与“0”相“与2、逻辑“或”指令ORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#dataORL指令常用于使字节中某些位置1方法:欲置1的位与“1”相或,欲保留不变的位与“0”相或如ORLA,#0FH;高4位不变,低4位置12、逻辑“或”指令ORLA,RnORL指令常用于使3、逻辑“异或”指令XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#dataXRL指令可用于对某些位取反方法:欲取反的位用“1”去异或,保留位用“0”去异或如XRLA,#0FH;高4位不变,低4位取反3、逻辑“异或”指令XRLA,RnXRL指令可用于例:设(A)=0C3H(11000011B)(R0)=0AAH(10101010B)分别执行以下指令:ANLA,R0;ORLA,R0;XRLA,R0;(A)=10000010B=82H(A)=11101011B=0EBH(A)=01101001B=69H例:设(A)=0C3H(11000011B)分别执行以下3.3.4控制转移类指令3类:无条件转移条件转移子程序调用及返回3.3.4控制转移类指令3类:无条件转移一、无条件转移指令1、绝对无条件转移AJMPaddr11;(PC)(PC)+2(PC0~10)addr0~10(PC11~15)不变addr11:11位地址,是转移目的地址的低11位。在汇编语言程序中,可写成4位16进制地址,也可写成代表16位地址的标号(符号地址)形式。转移范围:2K字节一、无条件转移指令1、绝对无条件转移AJMPaddr1例1:0345H:AJMPaddr11addr11取值可为00000000000B~11111111111B执行时(PC)=(PC)+2=0347H15141312111098765432100347H:0000001101000111B转移目标地址范围:PC11~15不变00000000000B11111111111B有效转移地址范围:

0000H~07FFH例1:0345H:AJMPaddr11执例2:07FFH:AJMPadr11(PC)+2=07FFH+2=0801H0000100000000001B00000000001B11111111111B0801H0801H0FFFH转移范围转移范围:包括当前指令的下一条指令在内的同一2K字节内addr11:在0801H~0FFFH范围内例2:07FFH:AJMPadr11(PC)+2=0例3:0345H:AJMP0123H2567H:AJMP29ABH是否正确正确错误2567H:0010010101100111B11111111111B27FFH转移地址最大为27FFH,29ABH大于27FFH,超出有效转移地址范围例3:0345H:AJMP0123H是否正确正确错误22、长转移指令LIMP

addr16;(PC)addr16转移范围:64KB3、相对转移指令SJMPrel

;(PC)(PC)+2(PC)(PC)+relrel:8位二进制补码,可写成符号地址的形式转移范围:PC当前值为基准,-128~+1272、长转移指令LIMPaddr16;(PC)例:0345H:SJMPrelPC当前值:0347H向后128字节02C7H向前127字节03C6Hrel=80Hrel=7FH当rel取值为FEH(-2),则目的地址与源地址相同如设rel=FEH,执行指令

HERE:SJMPHERE程序在此指令处无限循环例:0345H:SJMPrelPC当前值:03474、间接转移指令JMP@A+DPTR;(PC)(A)+(DPTR)多分支转移指令,DPTR内容为多分支转移程序的首地址,由累加器A的内容来选择其中的某一个分支转移指令例:MOVDPTR,#JMP_TBLJMP@A+DPTR…..AJMPLABEL0AJMPLABEL1AJMPLABEL2AJMPLABEL3JMP_TBL:A中内容为偶数分支转移表不超过256B4、间接转移指令JMP@A+DPTR;二、条件转移指令均为相对寻址方式,指令提供偏移量rel,转移范围为PC当前值的-128~+1271、判零转移指令JZrel

;(PC)(PC)+2如(A)=0,则(PC)=(PC)+rel否则,程序顺序执行JNZrel

;(PC)(PC)+2如(A)=0,则(PC)=(PC)+rel否则,程序顺序执行二、条件转移指令均为相对寻址方式,指令提供偏移量rel,转移例:将外部数据存储器的一个数据块传送到内部数据RAM,两者的首地址分别为DATA1和DATA2,遇到传送的数据为0时停止传送。分析:数据块传送,长度较短,均采用间接寻址方式,其中R0寻址外部数据存储器,R1寻址内部RAM。传送时,要以累加器A作为过渡,利用判零转移可以判别是否继续传送还是终止例:将外部数据存储器的一个数据块传送到内部数据RAM,两者的程序如下:MOVR0,#DATA1;MOVR1,#DATA2;MOVXA,@R0;JZSTOP;MOV@R1,A;INCR0;INCR1;SJMPLOOP;LOOP:HERE:外部数据块首址内部数据块首址外部数据传入A为零则终止不为零则传送至内部RAM单元修改地址指针继续循环STOP:程序如下:MOVR0,#DATA1;LOOP:HE2、比较转移指令格式:CJNE(目的操作数),(源操作数),rel2、比较转移指令格式:CJNE(目的操作数),(源操根据目的和源操作数的寻址方式不同,共有4条CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel三字节指令例:设(R7)=56H,执行指令CJNER7,#60H,K1…………K1:根据目的和源操作数的寻址方式不同,共有4条CJNEA,例2、设P1口P1·0~P1·3为准备就绪信号输入端,当该4位输入全“1”说明各项工作准备好,单片机可顺序执行主程序,否则循环等待。程序片段如下:L0:MOVA,P1;ANLA,#0FH;CJNEA,#0FH,L0;…………MAN1:读P1口内容高4位无意义,屏蔽低4位不全为1,返回L0,否则继续执行例2、设P1口P1·0~P1·3为准备就绪信号输入端,当该43、循环转移指令(减1条件转移指令)DJNZRn,rel

;(PC)(PC)+2(Rn)(Rn)-1If(Rn)=0,(PC)(PC)+relElse,程序向下执行DJNZdirect,rel;(PC)(PC)+3(direct)(direct)-1If(direct)=0,(PC)(PC)+relElse,程序向下执行3、循环转移指令(减1条件转移指令)DJNZRn,rel若循环变量为00H,则循环次数为256次例1:(40H)=01H,(50H)=70H

(60H)=15H,以下程序片段的执行结果DJNZ40H,LABEL1;DJNZ50H,LABEL2;DJNZ60H,LABEL3;结束循环向下执行转向LABEL2执行,继续循环需等上条指令执行完,才执行本指令各单元内容变为:(40H)=00H,(50H)=6FH,(60H)=15H若循环变量为00H,则循环次数为256次例1:(40H)=例2:MOVR2,#8;CPLP1·7;DJNZR2,TOGGLF;TOGGLF:循环次数送R2P1·7取反,1个机周R2控制循环,2个机器周期执行结果:例2:MOVR2,#8;TOGGLF:循环次数送R2三、子程序调用及返回指令1、长调用指令LCALLaddr16;(PC)=(PC)+3(SP)=(SP)+1((SP))=(PC0~7)(SP)=(SP)+1((SP))=(PC8~15)(PC)=addr0~1564KB范围内子程序调用三、子程序调用及返回指令1、长调用指令LCALLaddr例:设(SP)=53H,子程序首址在3000H单元,并以标号STR表示。即

2000H:LCALLSTR执行时:(PC)=(PC)+3=2003H(SP)+1,(54H)=

03H(SP)+1,(55H)=

20H执行结果:(SP)=(54H)=(55H)=(PC)=55H03H20H3000HSTR(PC)例:设(SP)=53H,子程序首址在3000H单元,并以标号2、绝对调用指令ACALLaddr11

;(PC)=(PC)+2(SP)=(SP)+1((SP))=(PC0~7)(SP)=(SP)+1((SP))=(PC8~15)(PC0~10)addr11(PC11~15)不变提供2KB范围内的子程序调用,调用范围同AJMP指令2、绝对调用指令ACALLaddr11;(PC)=(P3、返回指令RET;(PC8~15)((SP))(SP)(SP)-1(PC0~7)((SP))(SP)(SP)-1例:设(SP)=6BH,内部RAM(6AH)=23H

(6BH)=01H,执行RET(PC8~15)(6BH)(PC0~7)(6AH)执行结果:(PC)=0123H

(SP)=69H3、返回指令RET;(PC8~15)4、中断返回指令RETI

;功能:A)恢复断点,同RETB)恢复中断逻辑,使CPU能接收同级或低级中断请求5、空操作指令NOP

;(PC)(PC)+1功能:无任何操作,继续执行下一条指令,不影响任何标志,产生一个机器周期的延时4、中断返回指令RETI;功能:A)恢复断点,同RET5例:利用NOP指令产生方波CLRP2.7;NOPNOPNOPSETBP2.7;P2.7清0输出置位P2.7高电平输出例:利用NOP指令产生方波CLRP2.7;P2.程序举例103在3000H为首地址的存储区域中,存放着14个由ASCII码表示的0~9之间的数。试编写程序,将它们转换成BCD码,并以压缩BCD码的形式,存放在2000H~2006H单元。分析:1、外部RAM数据块操作,14个数

DPTR做源间址寄存器,R0为目标间址寄存器

R3做计数器2、ASCII码转换为压缩BCD码ASCII分离BCD码压缩BCD码屏蔽高4位移位、异或程序举例103在3000H为首地址的存储区域中,存放着程序104MOVDPTR,#3000HMOVR0,#00HMOVR3,#07HMOVXA,@DPTRANLA,#0FHMOVR4,AINCDPTRMOVXA,@DPTRANLA,#0FHSWAPAXRLA,R4MOVP2,#20HMOVX@R0,AINCDPTRINCR0DJNZR3,LOOPLOOP:;源数据块首地址;目标数据块首地址;计数器;取低位字节ASCII码;屏蔽高4位,转换为BCD码;暂存;修改地址指针,指向高位字节;取高位字节ASCII码;转换为BCD码;移位到高4位;异或,转换为压缩BCD码;高8位目标地址;存放压缩BCD码到外部RAM;修改源地址指针;修改目标地址;循环程序104MOVDPTR,#3000HLOOP:;源3.3.5位操作指令位处理器:CPU程序存储器数据存储器累加器(C)I/O口数据RAM可位寻址空间128位SFR的可寻址位82位3.3.5位操作指令位处理器:CPU数据RAM可位寻位地址表示:bit在汇编语言中有5种表示方法:(以用户标志F0为例)1、位地址D5H2、字节地址·位D0H·53、位寄存器名称F04、寄存器名·位PSW·55、事先用伪指令定义的符号地址格式:字符名称BIT位地址

AFBITF0位地址表示:bit1、位地址D5H一、位传送指令MOVC,bit;(C)(bit)MOVbit,C;(bit)(C)注:位传送必须通过累加器C进行例:将30H位的内容传送到20H位MOVC,30HMOV20H,C一、位传送指令MOVC,bit;二、位状态控制指令1、位清零指令

CLRbit;(bit)0

CLRC;(C)02、位求反指令

CPLbit;(bit)(bit)

CPLC;(C)(C)3、位置位指令

SETBbit;(bit)1

SETBC;(C)1二、位状态控制指令1、位清零指令2、位求反指令3、位置位指令例:设(P1)=00110101B

执行以下指令:

CLRP1.0;CPLP1.0;SETBP1.6;P1=00110100BP1=00110101BP1=01110101B例:设(P1)=00110101BP1=00110100三、位逻辑操作指令1、位逻辑“与”

ANLC,bit;(C)(C)与(bit)

ANLC,/bit;(C)(C)与(bit)2、位逻辑“或”

ORLC,bit;(C)(C)或(bit)

ORLC,/bit;(C)(C)或(bit)三、位逻辑操作指令1、位逻辑“与”2、位逻辑“或”例:设E,B,D都代表位地址,试编写程序完成E、B内容的异或操作。即D=EB+EB程序如下:MOVC,BANLC,/EMOVF0,CMOVC,EANLC,/BORLC,F0MOVD,C;C=EB;暂存EB;C=EB;C=EB+EB;将运算结果存入D位操作必须通过位累加器C进行例:设E,B,D都代表位地址,试编写程序完成E、B内容的异或四、位控制转移指令1、判 C转移

JCrel;C=1转移

JNCrel;C=0转移例:设(C)=0,以下程序段的执行路径是什么JCL1CPLCJCL2L1:……L2:……;C=0,不转移,顺序执行;C取反,C=1;C=1,转向L2执行四、位控制转移指令1、判 C转移例:设(C)=0,以下程序2、判位变量转移指令JBbit,rel;(bit)=1转移JNBbit,rel;(bit)=0转移判位变量并清0转移指令JBCbit,rel;(PC)(PC)+3IF(bit)=1,Then(PC)(PC)+relAnd(bit)=02、判位变量转移指令JBbit,rel;(例1:MOVP1,#0CAHMOVA,#56HJBP1.2,L1JNBACC.3,L2L1:……L2:……;P1=11001010B;A=01010110B;P1.2=0,不转;ACC.3=0,转L2执行例2:MOVA,#43HJBCACC.2,L1JBCACC.6,L2L1:……L2:……;A=43H=01000011B;ACC.2=0,不转移;ACC.6=1,转L2执行,且使ACC.6=0执行结果:(A)=03H例1:MOVP1,#0CAH;P1=110010105.2汇编语言常用伪指令一、设置起始地址ORG格式:ORGnn操作码助记符16位二进制数功能:指定后续源程序经汇编后的目标程序存放的起始地址值。总是出现在每段源程序或数据块的开始,可使程序员将程序、子程序或数据块存放在程序存储器的任何位置。5.2汇编语言常用伪指令一、设置起始地址ORG格式:例:ORG1000HSTART:MOVA,#00H表示由START开始的目标程序从1000H开始存放一个源程序中,多次设置程序段起始地址,要求定义地址空间从小到大,且不能重叠如:ORG3000HMOVA,20H……ORG2700HMOVA,21H……地址从大到小,错误例:ORG1000H表示由ST再如:ORG2000HMOVA,20HORG2001HMOVA,21H……地址从小到大,但重叠,所以不正确若在源程序开始不放ORG指令,则汇编后的目标程序将从0000H单元开始存放再如:ORG2000H地址从小到大,但重叠,所以不二、定义字节数据伪指令DB或DEFB格式:(标号:)DB(项或项表)指一个字节、数或以‘’括起的字符串功能:将项或项表的数值存入从标号开始的连续单元中例:HERE:DB84HDB43H;(HERE)=84H;(HERE+1)=43H二、定义字节数据伪指令DB或DEFB指一个字节、数或以‘例:ORG1000HSEG:DB53H,74H,78H,’1’,’2’结果:(1000H)=53H(1001H)=74H

(1002H)=78H

(1003H)=31H

(1004H)=32H1,2的ASCII码注:操作数为字节数据(00H~FFH),字节数据串或字符串(长度应限制在80个字节数据内)例:ORG1000H结果:(1三、定义字数据伪指令DW或DEFW格式:(标号:)DW(项或项表)功能:类似DB指令,区别在于DW定义16位数据(字数据)。在汇编时,按高位字节在高地址单元,低位字节在低地址单元的顺序存放,常用于建立地址表例:ABC:DW1234H,0008H与ABC:DB34H,12H,08H,00H等价三、定义字数据伪指令DW或DEFW格式:(标号:)D四、预留存储区伪指令DS或DEFS格式:(标号:)DS(表达式)功能:由标号指定单元开始,定义一个数据区,以备源程序使用。预留的存储单元数由表达式的值来决定例:ORG3C40HTEMP:DS10……即由3C40H单元开始保留连续的10个存储单元的存储区四、预留存储区伪指令DS或DEFS格式:(标号:)D五、标号赋值伪指令EQU格式:(标号)EQU(表达式)功能:将表达式的值赋予标号,又称等值指令例:BLKEQU1000H表达式的值可以是数据地址、代码地址、位地址或立即数。即可以是8位,也可以是16位二进制数注:EQU伪指令必须先赋值,后使用;且在整个源程序中,该标号的值不能改变五、标号赋值伪指令EQU格式:(标号)EQU(表六、定义标号值伪指令DL格式:(标号:)DL(表达式)功能:定义该标号的值为表达式例:COUNT1:DL2300H……COUNT2:DLCOUNT1+1与EQU区别:DL可在同一源程序中对同一标号多次赋值六、定义标号值伪指令DL格式:(标号:)DL(表七、汇编结束伪指令END格式:(标号:)END可有可无功能:汇编语言源程序结束标志注意:一个源程序只能且必须有一个END伪指令,并放在所有指令的最后七、汇编结束伪指令END格式:(标号:)ENMCS—51源程序的基本格式 ORG0000H AJMPSTART ORG0003H LJMPINTIE0 …… ORG0050HSTART:………… ORG1000H

A0:……

…… ORG2000HINTIE0:…………END;程序起始,转向主程序;转向外中断0服务子程序;主程序段;子程序段A0;外部中断0服务子程序;汇编程序结束MCS—51源程序的基本格式 ORG0000H;本章小结126寻址方式和寻址空间数据传送类指令算术运算类指令逻辑运算类指令控制转移类指令位操作类指令汇编语言常用伪指令本章小结126寻址方式和寻址空间127

单片机原理及应用北京化工大学信息科学与技术学院郭青1单片机原理及应用北京化工大学第三章80C51指令系统本章重点寻址方式指令格式操作结果及对标志位影响第三章80C51指令系统本章重点3.1概述分类数据传送类指令29数学运算类指令24逻辑运算类指令24控制转移类指令17位操作指令17111条指令3.1概述分类数据传送类指令29数学运算类指按指令长度分类单字节指令双字节指令三字节指令指令执行时间12个振荡周期6424个振荡周期4548个振荡周期2按指令长度分类单字节指令双字节指令三字节指令指令执行时间12指令格式标号:操作码[(目的操作数),(源操作数)];注释指令的符号地址由字母打头的字母数字串组成,长度一般不超过6个符号指令操作的性质用规定的汇编语言助记符表示指令操作的对象指令格式标号:操作码[(目的操作数),(源操作数)]3.2寻址方式和寻址空间概念:说明操作数所在的位置(地址),把操作数提取出来的方法基本寻址方式:1、寄存器寻址 2、直接寻址3、寄存器间接寻址 4、立即寻址5、相对寻址 6、变址寻址7、位寻址3.2寻址方式和寻址空间概念:基本寻址方式:1、寄存器一、寄存器寻址操作数—通用寄存器的内容表示符号—寄存器名称寻址范围工作寄存器Rn(R0~R7)寄存器ACC(累加器A)寄存器B,DPTR,位寄存器Cy一、寄存器寻址操作数—通用寄存器的内容寻址范围工作寄存器13480C52片内数据RAM位寻址区R7~R0

3组R7~R0

2组R7~R0

1组R7~R0

0组20H18H10H08H00H寄存器30H7FH80HFFH特殊功能寄存器(SFR)RAM64KBFFFFH0000H片内数据存储器片外数据存储器

温馨提示

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

评论

0/150

提交评论