




已阅读5页,还剩84页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章MCS-51指令系统,2.1MCS-51指令系统的分类及一般说明2.2数据传送类指令2.3算术操作类指令2.4逻辑操作类指令2.5控制程序转移类指令2.6布尔变量操作类指令2.7小结,每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:单周期(64条);双周期(45条);4周期(2条),按指令的功能分类,可分为5大类:数据传送类(29条);算术运算类(24条)逻辑运算及移位类(24);控制转移类(17条)位操作类(17条),每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:单字节(49条);双字节(46条);3字节(16条),2.1MCS-51指令系统的分类和一般说明,标号:操作码操作数;注释,一、指令基本格式,方括符表示可选项标号代表指令所在地址,1-8个字母/数字,“:”结尾,标号:操作码目的操作数,源操作数;注释,START:MOVA,#30H;将立即数30H传送至A中MOVDPTR,#5678H;将立即数5678H传送至DPTR,标号:指令的符号地址。,用于一段功能程序的识别标记或控制转移地址。,指令前的标号代表该指令的地址,是用符号表示的地址。,一般用英文字母和数字组成。,标号必须用冒号“:”与操作码分隔。,操作码:表示指令的操作功能。,操作码用助记符表示,它代表了指令的操作功能。,操作码是指令的必需部分,是指令的核心,不可缺少。,操作数:参加操作的数据或数据地址。,操作数与操作码之间用空格分隔,操作数与操作数之间用逗号“,”分隔。,操作数可以是数据,也可以是数据的地址、数据地址的地址或操作数的其他信息。,操作数可分为目的操作数和源操作数。,操作数可用二进制数、十进制数或十六进制数表示。,操作数的个数可以是03个。,注释:指令功能说明。,注释属于非必需项,是为便于阅读,对指令功能作的说明和注解。,注释必须以“;”开始。,二、指令分类,按指令功能分类:可分为数据传送类、算术运算类、逻辑运算类、位操作类和控制转移类等5大类指令。,80C51共有111条指令。,按指令长度分类:可分为1字节、2字节和3字节指令。,按指令执行时间分类:可分为1机周、2机周和4机周指令。,三、指令中常用符号,分类介绍各类指令之前,先对描述指令的一些符号意义进行一些简单约定:(1)Ri和Rn:R表示当前工作寄存器区中的工作寄存器,i表示0或1,即R0和R1。n表示07,,即R0R7,当前工作寄存器的选定是由PSW的RS1和RS0位决定的。(2)data:表示立即数,data为8位常数。data是指包含在指令中的8位立即数。(3)data16:包含在指令中的16位立即数。,(4)rel:相对地址,以补码形式表示的地址偏移量,范围为-128+127,主要用于无条件相对短转移指令SJMP和所有的条件转移指令中。(5)addr16:16位目的地址。目的地址可在全部程序存储器的64KB空间范围内,主要用于无条件长转移指令LJMP和子程序长调用指令LCALL中。(6)addr11:11位目的地址。目的地址应与下条指令处于相同的2KB程序存储器地址空间范围内,主要用于绝对转移指令AJMP和子程序绝对调用指令ACALL指令中。(7)direct:表示直接寻址的地址,即8位内部数据存储器RAM的单元地址(0127/255),或特殊功能寄存器SFR的地址。对于SFR可直接用其名称来代替其直接地址。,(8)bit:内部数据存储器RAM和特殊功能寄存器SFR中的可直接寻址位地址。(9):间接寻址寄存器或基地址寄存器的前缀,如Ri,DPTR,表示寄存器间接寻址。(10)(X):表示X中的内容。(11)(X):表示由X寻址的单元中的内容,即(X)作地址,该地址的内容用(X)表示。(12)/和符号:/表示对该位操作数取反,但不影响该位的原值。表示指令操作流程,将箭头一方的内容,送入箭头另一方的单元中去。,四、寻址方式,寻址就是寻找操作数的地址。寻址方式:指令按地址获得操作数的方式MCS-51有七种寻址方式,且一条指令可能含多种寻址方式。寄存器寻址立即寻址寄存器间接寻址直接寻址变址寻址(基址寄存器+变址寄存器间接寻址)相对寻址位寻址,(1)寄存器寻址选定某寄存器,自该寄存器中读取或存放操作数,以完成指令规定的操作,称为寄存器寻址。例如:MOVA,R0;设指令执行前A=20H,R0=40H,执行指令后,A=40H?,R0=40H?解析:指令执行如下所示,A,R0,(2)立即寻址立即寻址是直接给出操作数,操作数紧跟在操作码的后面,作为指令的一部分与操作码一起存放在程序存储器内,可以立即得到并执行,不需要另去寄存器或存储器等处寻找和取数,故称为立即寻址。该操作数称为立即数,并在其前冠以“”号作前缀,以表示并非地址。立即数可以是8位或16位,用十六进制数表示,一般用于为寄存器或存储器赋常数初值。例如:8位立即数:MOVA,#40H;A40H16位立即数:MOVDPTR,#2100H;DPTR2100HADDA,#05H;(A)(A)+立即数05H,(3)寄存器间接寻址,MOVA,R0;将以R0中内容为地址的存储单元中的数据传送至A中MOVXA,DPTR;将外RAMDPTR所指存储单元中的数据传送至A中PUSHPSW;将PSW中数据传送至堆栈指针SP所指的存储单元中MOVR1,#0FH;(30H)立即数0FH,寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数。间接寻址用间址符“”作为前缀。,【例】,注意:1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。2)符号“”表示“在”,其含义与读音皆同“at”。,例:MOVA,R0;A(R0)设指令执行前A=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后,A=34H?,R0=40H?,(40H)=34H?,解析:指令执行如下所示:,R0=40H,A,(4)直接寻址直接寻址是给出操作数的直接地址。直接寻址范围为内RAM128B和特殊功能寄存器。访问特殊功能寄存器SFR只能采用直接寻址方式。例:设存储器两个单元的内容如图所示,执行指令MOVA,40H后A=56H?直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量形式。,思考题:直接寻址方式指令和立即寻址方式指令的形式有什么不同?,在本单片机中规定:访问特殊功能寄存器SFR只能采用直接寻址方式。例如:MOVA,SP;(A)(SP)MOVA,81H;(A)(SP)MOVP1,#5AH;(P1)(#5AH)MOV90H,#5AH;(P1)(#5AH)MOVB,30H;(B)(30H)在本单片机中访问特殊功能寄存器SFR只能采用直接寻址方式的原因是SFR分布在80H0FFH范围内,而52系列单片机有256字节的片内RAM,其中的80H0FFH的RAM与SFR所占地址重叠。于是规定:80H0FFH范围内的RAM只能用寄存器间接寻址方式,而SFR只能用直接寻址方式。从而解决了地址冲突的问题。例如:MOVA,90H等效于MOVA,P1属直接寻址,(5)变址寻址基址寄存器加变址寄存器间接寻址,简称变址寻址。它以数据指针DPTR或程序计数器PC作为基址寄存器,累加器A作为变址寄存器,两者的内容相加形成16位程序存储器地址,该地址就是操作数所在地址。数据地址=基地址+偏移量例如:MOVCA,A+DPTR;(A)(A)+(DPTR)该指令寻址及操作功能如下图所示。这种寻址方式常用于访问程序存储器中的常数表。,(6)相对寻址相对寻址是以当前程序计数器PC值加上指令规定的偏移量rel,构成实际操作数地址的寻址方法。它用于访问程序存储器,常出现在相对转移指令中。在使用相对寻址时要注意以下两点:第一,当前PC值是指相对转移指令所在地址(一般称为源地址)加上转移指令字节数。即:当前PC值=源地址+转移指令字节数。例如:JZrel若该指令地址(源地址)为2050H,则执行该指令时的当前PC值即为2052H。,第二,偏移量rel是有符号的单字节数,以补码表示。其相对值的范围是-128+127(即00HFFH),负数表示从当前地址向上转移,正数表示从当前地址向下转移。所以,相对转移指令满足条件后,转移的地址(一般称为目的地址)应为:目的地址=当前PC值+rel=源地址+转移指令字节数+rel例如:指令JZ08H和JZ0F4H表示累加器A为零条件满足后,从源地址(2050H)分别向下、向上转移10个单元。其相对寻址示意如下页图(a)、(b)所示。这两条指令均为双字节指令,相对寻址示意图(a)指令JZ08H寻址示意图;(b)指令JZF4H寻址示意图,(7)位寻址MCS51系列单片机具有位寻址的功能,即指令中直接给出位地址,可以对内部数据存储器RAM中的128位和特殊寄存器SFR中的93位进行寻址,并且位操作指令可对地址空间的每一位进行传送及逻辑操作。例如:SETBPSW.3;(PSW.3)1该指令为双字节指令,指令的第二字节直接给出位地址D3H(PSW.3的位地址)。,注意:1)位地址里的数据只可能是一个0或12)有的位地址十分明确,如P1.0,ACC.7等,有的位地址则“不太明确”,如:MOVA,17H;(A)(17H),17H是字节地址MOVACC.0,17H;(ACC.0)(17H),这里ACC.0是位地址所以该指令中的17H是22H单元的第7位,在MCS51系列单片机的存储空间中,指令究竟对哪个存储器空间进行操作是由指令操作码和寻址方式确定的。7种寻址方式如下表所示。,寻址方式小结,1、对片外程序存储器只能用变址寻址方式,或者反过来说,变址寻址是一种专门用于程序存储器的寻址方式。2、内部数据存储器由于使用频繁,因此寻址方式多。3、对外部数据存储器,只能使用寄存器间接寻址。4、立即寻址方式只涉及8位或16位数据。5、相对寻址解决程序转移问题。6、本节所讲的各种寻址方式都是针对于源操作数,但实际上目的操作数也有寻址问题。,2.2.1数据传送类指令,数据传送类指令共29条,它是指令系统中最活跃、使用最多的一类指令。一般的操作是把源操作数传送到目的操作数,即指令执行后目的操作数改为源操作数,而源操作数保持不变。若要求在进行数据传送时,不丢失目的操作数,则可以用交换型传送指令。,按数据传送类指令的操作方式,传送类指令分为3种类型:数据传送:MOV、MOVX、MOVC数据交换:XCH、XCHD、SWAP堆栈操作:PUSH、POP数据传送类指令不影响进位标志CY、半进位标志AC和溢出标志OV,但当传送或交换数据后影响累加器A的值时,奇偶标志P的值则按A的值重新设定。,数据传送类指令助记符与操作,Rn:R0R7Ri:R0,R1#data:8位立即数#data16:16位立即数direct:直接地址rel:8位带符号偏移量,(1)内部存储器间传送指令(16条):内部数据存储器RAM区是数据传送最活跃的区域,可用的指令数也最多,共有16条指令,指令操作码助记符为MOV。寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。,内部RAM之间源操作数传递关系图,例:顺序执行下列指令序列,求每一步执行结果。,MOVA,#30H;A=30HMOV4FH,A;(4FH)=30HMOVR0,#20H;R0=20HMOVR0,4FH;(20H)=30HMOV21H,20H;(21H)=30H,例:用两种寻址方式实现,将片内RAM60H单元的数据传送给累加器A。,解1:MOVA,60H解2:MOVR0,#60HMOVA,R0,说明,1、一条指令中不能同时出现两个工作寄存器:非法指令:MOVR1,R2MOVR2,R02、间址寄存器只能使用R0、R1。非法指令:MOVA,R23、SFR区只能直接寻址,不能用寄存器间接寻址。非法指令:MOVR0,#80HMOVA,R04、指令表:B:指令字节数,M:机器周期数只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意“创造发明”指令。,(2)外部数据存储器数据传送指令(4条):MCS51单片机CPU对片外扩展的数据存储器RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来完成。一般数据的传送是通过P0口和P2口完成的,即片外RAM地址总线低8位由P0口送出,高8位由P2口送出,数据总线(8位)也由P0口传送(双向),但与低8位地址总线是分时传送的。MOVXA,DPTR;(A)(DPTR)MOVXA,Ri;(A)(Ri)MOVXDPTR,A;(DPTR)(A)MOVXRi,A;(Ri)(A),例:设外部RAM(0203H)=FFH,分析以下指令执行后的结果。MOVDPTR,0203H;(DPTR)0203HMOVXA,DPTR;(A)(DPTR)MOV30H,A;(30H)(A)MOVA,0FH;(A)0FHMOVXDPTR,A;(DPTR)(A)执行结果为:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。,(3)程序存储器向累加器A传送数据指令(2条)程序存储器向累加器A传送数据指令,通常称为查表指令,寻址方式属:基址+变址间接寻址,把程序存储器(ROM或EPROM)中存放的表格数据读出,传送到累加器A。它共有如下两条单字节指令,指令操作码助记符为MOVC。A+DPTR或A+PC指向程序存储器中的某单元。拟传送给累加器ACC的数据就是程序中事先写进去的表格数据。这些表格数据往往用伪指令DB,DW等定义在程序中。MOVCA,A+DPTR;(A)(A)+(DPTR)MOVCA,A+PC;(PC)(PC)+1,(A)(A)+(PC),例:在外部ROM/EPROM中,从2000H单元开始依次存放09的平方值:0、1、4、9、81,要求依据累加器A中的值(09)来查找所对应的平方值,分析下述程序的结果。MOVDPTR,2000H;(DPTR)2000HMOVA,09H;(A)09HMOVCA,A+DPTR;(A)(A)+(DPTR)执行结果:(DPTR)=2000H,(A)=51H(81的十六进制数)。,例:仍以例1外部ROM/EPROM2000H单元开始存放09的平方值,以PC作为基址寄存器进行查表。解:设MOVC指令所在地址(PC)=1FF0H,则偏移量=2000H(1FF0H+1)=0FH相应的程序如下:MOVA,09H;(A)09HADDA,0FH;地址调整MOVCA,A+PC;(A)(A)+(PC)+1)执行结果为:(PC)=1FF1H,(A)=51H。,2、数据交换指令(5条):数据交换指令其数据作双向传送,涉及传送的双方互为源地址、目的地址,指令执行后各方的操作数都修改为另一方的操作数。因此,两操作数均未冲掉、丢失。数据交换类指令共有如下5条指令:XCHA,direct;(A)(direct)XCHA,Ri;(A)(Ri)XCHA,Rn;(A)(Rn)XCHDA,Ri;(A3A0)(Ri)30)SWAPA;(A7A4)(A3A0),例:设(R0)=30H,(30H)=4AH,(A)=28H,则执行下列指令后,各寄存器中的内容分别为多少?XCHA,R0;(A)=4AH,(30H)=28HXCHDA,R0;(A)=2AH,(30H)=48HSWAPA;(A)=82H例:设A=29H,(2A)=38H执行指令XCHA,2AH后,A=?(2AH)=?解:(A)=38H,(2A)=29H习题:将片内RAM60H单元与61H单元的数据交换,用指令XCH60H,61H对吗?,3、堆栈操作类指令(2条):堆栈操作有进栈和出栈操作,即压入和弹出数据,常用于保存或恢复现场。该类指令共有如下两条指令:入栈指令:PUSHn;SPSP+1,(SP)(n)出栈指令:POPn;(n)(SP),SPSP-1说明:堆栈区由特殊功能寄存器堆栈指针SP管理;堆栈区可以安排在RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,而是放在RAM区的靠后的位置;堆栈总是指向栈顶;通常PUSH与POP两条指令成对使用,例如:设(A)=7BH;(35H)=11H并且知道(SP)=60HPUSHACC;(61H)#7BHPUSH35H;(62H)(35H)即:(62H)#11HPOPACC;(A)(62H)即:(A)#11HPOP5AH;(5AH)(61H)即:(5AH)#7BH,例:设A=02,B=56H,执行下列指令后,SP=?,A=?,B=?,SBR:MOVSP,#30H;设栈底PUSHAPUSHBMOVA,#0MOVB,#01POPBPOPA,习题:找出指令错误并改正:1MOVA,#1000H;A1000H2MOVXA,1000H;A(1000H)片外RAM3MOVCA,1000H;A(1000H)片外ROM4MOVX60H,A;片外RAM(60H)A5MOVR0,60H;片内RAM:(61H)(60H)MOV61H,R06.XCHR1,R2;R1R27.MOVXDPTR,#2000H;DPTR2000H8.MOVX60H,DPTR;片内RAM片外RAM,2.2.2算术运算类指令,算术运算类指令共有24条,与数据传送指令不同,多数算术运算指令会影响标志位的状态,即CPU执行算术运算指令后,根据数据操作情况自动设置标志位的状态。算术运算类指令可分为:加法带进位加法带借位减法加1减1单字节乘/除法运算十进制调整算术运算对8位无符号数可进行直接运算;借助溢出标志,可对带符号数进行2的补码运算;借助进位标志,可进行多字节加减运算,也可以对压缩BCD码(即单字节中存放两位BCD码)进行运算。,算术运算类指令,算术运算类指令(续),加法运算:(ADD4条)带进位加法运算:(ADDC4条)带借位减法运算:(SUBB4条),所有的加法(ADD)、带进位加法(ADDC)、带借位减法(SUBB)运算都是以A为一个加数或被减数,最终结果也存进A。,加法(ADD)、带进位加法(ADDC)以及带借位减法(SUBB)运算中,如果产生了进位或借位,将自动对PSW中的Cy标志位置“1”。,带进位加法(ADDC):(A)(A)+(Cy)+(第二操作数)带借位减法(SUBB):(A)(A)-(Cy)-(第二操作数),算术运算类指令(续),加1/减1操作:(INC,DEC9条)INC,DEC与用加/减法指令做加1/减1操作不同之处在于INC、DEC不影响标志位.,单字节乘/除运算:(MUL,DIV2条)两个单字节数的乘/除法运算只在A与B之间进行。MULAB:(A)与(B)相乘,积为16位数,(A)积的高8位;(B)积的低8位DIVAB:(A)除以(B),结果用2字节表示,(A)商的整数部分;(B)余数,算术运算类指令(续),BCD码是指“用二进制表达的十进制数”。如:十进制数20可以用二进制数00010100B表示;也可以用十六进制数14H表示;还可以用BCD码00100000B或20H表示。,4个二进制位就可以表示一位BCD码:00001001可表示十进制数(BCD数)09;8个二进制位就可以表示两位压缩的BCD码:0000000010011001表示0099。,十进制调整:(DAA1条)用于两个BCD码之间的相加,这条指令只能跟在ADD或ADDC之后,若(A)309或(AC)=1则(A)30(A)306;若(A)749或(CY)=1则(A)74(A)746;,P.60例5:两个十进制数“65”与“58”相加,根据常识,显然其和应当为“123”。,MOVA,#65HADDA,#58HDAA结果:(A)=23H(CY)=1,指令“DAA”完成的操作:,65011001015801011000,+,1,3,18,19,2,6601100110,若(A)309或(AC)=1则(A)30(A)306;若(A)749或(CY)=1则(A)74(A)746;,又如:两个十进制数“39”与“58”相加,根据常识,显然其和应当为“97”。,MOVA,#39HADDA,#58HDAA结果:(A)=97H(CY)=0,39001110015801011000,+,0,7,23,9,60110,指令“DAA”完成的操作:,例:对累加器中的压缩BCD数加1和减1ADDA,01HDAAADDA,#99HDAA,例:4位压缩的BCD数的相加程序。设一个加数放在30H、31H单元,另一个加数放在32H、33H单元。和数放到30H、31H单元。MOVR0,#30H;设地址指针指向个位十位数MOVR1,#32HMOVA,R0ADDA,R1;个位十位数相加DAMOVR0,AINCR0INCR1;指向百位千位数MOVA,R0ADDCA,R1;百位千位数相加DAAMOVR0,A,例:把累加器中的二进制数转换为3位BCD数的子程序。百位数放在HUND,十位、个位数放在TENONE中。HUND和TENONE为内部RAM中的两个单元。BINBCD:MOVB,#100DIVAB;得到百位数MOVHUND,AMOVA,10XCHA,BDIVAB;得到十位数和个位数SWAPAADDA,B;组成压缩的BCD数MOVTENINE,ARET,2.2.3逻辑运算及移位类指令,逻辑与运算:(ANL6条)逻辑或运算:(ORL6条)逻辑异或运算:(XRL6条)累加器清零/取反:(CLR,CPL2条)累加器移位操作:(RL,RLC,RR,RRC4条),1、逻辑“与”运算指令逻辑“与”运算指令共有如下6条,其助记符为ANL。ANLdirect,A;(direct)(direct)(A)ANLdirect,data;(direct)(direct)dataANLA,data;(A)(A)dataANLA,direct;(A)(A)(direct)ANLA,Ri;(A)(A)(Ri)ANLA,Rn;(A)(A)(Rn),逻辑“与”运算指令是将两个指定的操作数按位进行逻辑“与”的操作。例如:(A)=FAH=11111010B,(R1)=7FH=01111111B执行指令:ANLA,R1;(A)1111101001111111结果为:(A)=01111010B=7AH。逻辑“与”ANL指令常用于屏蔽(置0)字节中某些位。若清除某位,则用“0”和该位相与;若保留某位,则用“1”和该位相与。,2、逻辑“或”运算指令逻辑“或”运算指令共有如下6条指令,其助记符为ORL。ORLdirect,A;(direct)(direct)(A)ORLdirect,data;(direct)(direct)dataORLA,data;(A)(A)dataORLA,direct;(A)(A)(direct)ORLA,Ri;(A)(A)(Ri)ORLA,Rn;(A)(A)(Rn),逻辑“或”指令将两个指定的操作数按位进行逻辑“或”操作。例如:若(A)=C0H,(R0)=3FH,(3F)=0FH执行指令:ORLA,R0;(A)(A)(R0)结果为:(A)=CFH。它常用来使字节中某些位置“1”,欲保留(不变)的位用“0”与该位相或,而欲置位的位则用“1”与该位相或。,例:根据累加器A中40位的状态,用逻辑与、或指令控制P1口40位的状态,P1口的高3位保持不变。ANLA,00011111B;屏蔽A的高3位ANLP1,11100000B;保留P1的高3位ORLP1,A;使P1.4P1.0按A4A0置位若上述程序执行前:(A)=B5H=10110101B,(P1)=6AH=01101010B,则执行程序后:(A)=15H=00010101B,(P1)=75H=01110101B。,3、逻辑“异或”运算指令“异或”运算是当两个操作数不一致时结果为1,两个操作数一致时结果为0,这种运算也是按位进行,共有如下6条指令,其助记符为XRL。XRLdirect,A;(direct)(direct)(AXRLdirect,data;(direct)(direct)dataXRLA,data;(A)(A)dataXRLA,direct;(A)(A)(direct)XRLA,Ri;(A)(A)(Ri)XRLA,Rn;(A)(A)(Rn),逻辑“异或”指令常用来对字节中某些位进行取反操作,欲某位取反则该位与“1”相异或;欲某位保留则该位与“0”相异或。还可利用异或指令对某单元自身异或,以实现清零操作。例:若(A)=B5H=10110101B,执行下列指令:XRLA,0F0H;A的高4位取反,低4位保留MOV30H,A;(30H)(A)=45HXRLA,30H;自身异或使A清零执行后结果:(A)=00H。,逻辑“与”、“或”、“异或”各6条指令有如下共同的特点:逻辑“与”ANL、“或”ORL、“异或”XRL运算指令除逻辑操作功能不同外,三者的寻址方式相同,指令字节数相同,机器周期数相同。ANL、ORL、XRL的前两条指令的目的操作数均为直接地址方式,可很方便地对内部RAM的00HFFH任一单元或特殊功能寄存器的指定位进行清零、置位、取反、保持等逻辑操作。ANL、ORL、XRL的后4条指令,其逻辑运算的目的操作数均在累加器A中,且逻辑运算结果保存在A中。,4、累加器A清零与取反指令CLRA;(A)00HCPLA;(A)(A)第1条是对累加器A清零指令,第2条是把累加器A的内容取反后再送入A中保存的对A求反指令,它们均为单字节指令。若用其它方法达到清零或取反的目的,则至少需用双字节指令。,5、移位指令移位指令有如下循环左移、带进位位循环左移、循环右移和带进位位循环右移4条指令,移位只能对累加器A进行。RLA;(An+1)(An),(A0)(A7)RLCA;(An+1)(An),(CY)(A7),(A0)(CY)RRA;(An)(An+1),(A7)(A0)RRCA;(An)(An+1),(CY)(A0),(A7)(CY),6、累加器移位操作:(RL,RLC,RR,RRC4条),RLA左环移,累加器A,累加器A,Cy,累加器A,Cy,累加器A,RRCA带进位位右环移,RRA右环移,RLCA带进位位左环移,2.3.4控制转移类指令,控制转移类指令共计17条,可分为无条件转移指令、条件转移指令、子程序调用及返回指令。有了丰富的控制转移类指令,就能很方便地实现程序的向前、向后跳转,并根据条件分支运行、循环运行、调用子程序等。1、无条件转移指令无条件转移指令有如下4条指令,它们提供了不同的转移范围和寻址方式:LJMPaddr16;(PC)addr16AJMPaddr11;(PC)(PC)+2,(PC)100addr11SJMPrel;(PC)(PC)+2+relJMPA+DPTR;(PC)(A)+DPTR,(1)LJMP:长转移指令,三字节指令,提供16位目标地址addr16。LJMPaddr16例:在程序存储器0000H单元存放一条指令:LJMP3000H;(PC)3000H则上电复位后程序将跳到3000H单元去执行用户程序。,(2)AJMP:绝对转移指令,双字节指令。该指令执行后,程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数2,构成当前PC值。取当前PC值的高5位与指令中提供的11位直接地址形成转移的目的地址,即:,PC,转移目的地址:,由于11位地址的范围是0000000000011111111111,即2KB范围,而目标地址的高5位是由PC当前值固定的,所以程序可转移的位置只能是和PC当前值在同一2KB的范围之内。本指令转移可以向前也可以向后,指令执行后不影响状态标志位。例:若AJMP指令地址(PC)=2300H。执行指令:AJMP0FFH;(PC)(PC)+2=2302H结果为:转移目的地址(PC)=20FFH,程序向前转向20FFH单元开始执行。又如:若AJMP指令地址(PC)=2FFFH。执行指令:AJMP0FFH(PC)(PC)+2=3001H结果为:转移目的地址(PC)=30FFH,程序向后转向30FFH单元开始执行。,(3)SJMP:短转移指令,双字节指令,指令的操作数是相对地址Rel。由于rel是带符号的偏移量,所以程序可以无条件向前或向后转移,转移的范围是在SJMP指令所在地址PC值(源地址)加该指令字节数2的基础上,以-128+127为偏移量(256个单元)的范围内实现相对短转移,即:目的地址=源地址+2+relrel的计算公式如下:向前转移:rel=FE(源地址与目的地址差的绝对值)向后转移:rel=(源地址与目的地址差的绝对值)2若rel值大于80H,程序向前转移;若rel值小于80H,则程序向后转移。例:设(PC)=2100H,若转向215CH去执行程序,则:rel=(215CH2100H)2H=5AH,(4)JMP:间接长转移指令。JMPA+DPTR它是以数据指针DPTR的内容为基址,以累加器A的内容为相对偏移量,在64KB范围内可无条件转移的单字节指令。该指令的特点是转移地址可以在程序运行中加以改变。例:根据累加器A的数值,转不同处理程序的入口。MOVDPTR,TABLE;表首址送DPTRJMPA+DPTR;依据A值转移TABLE:AJMPTAB1;当(A)=0时转TAB1执行AJMPTAB2;当(A)=2时转TAB2执行AJMPTAB3;当(A)=4时转TAB3执行,2、条件转移指令(判跳指令)条件转移指令是当某种条件满足时,程序转移执行;条件不满足时,程序仍按原来顺序继续执行。条件转移的条件可以是上一条指令或者更前一条指令的执行结果(常体现在标志位上),也可以是条件转移指令本身包含的某种运算结果。(1)累加器判零转移指令这类指令有2条:JZrel;若(A)=0,则(PC)(PC)+2+rel若(A)0,则(PC)(PC)+2JNZrel;若(A)0,则(PC)(PC)+2+rel若(A)=0,则(PC)(PC)+2,例:将外部数据RAM的一个数据块传送到内部数据RAM,两者的首址分别为DATA1和DATA2,遇到传送的数据为零时停止。解:外部RAM向内部RAM的数据传送一定要以累加器A作为过渡,利用判零条件转移正好可以判别是否要继续传送或者终止。完成数据传送的参考程序如下:MOVR0,DATA1;外部数据块首址送R0MOVR1,DATA2;内部数据块首址送R1LOOP:MOVXA,R0;取外部RAM数据入AHERE:JZHERE;数据为零则终止传送MOVR1,A;数据传送至内部RAM单元INCR0;修改地址指针,指向下一数据地址INCR1SJMPLOOP;循环取数,(2)比较转移指令比较转移指令共有4条,其一般格式为:CJNE目的操作数,源操作数这组指令是先对两个规定的操作数进行比较,根据比较的结果来决定是否转移到目的地址。4条比较转移指令如下:CJNEA,data,relCJNEA,direct,relCJNERi,data,relCJNERn,data,rel,以上4条指令的差别仅在于操作数的寻址方式不同,均完成以下操作:若目的操作数=源操作数,则(PC)(PC)+3;若目的操作数源操作数,则(PC)(PC)+3+rel,CY=0;若目的操作数源操作数,则(PC)(PC)+3+rel,CY=1;偏移量rel的计算公式为:向前转移:rel=FD-(源地址与目的地址差的绝对值)向后转移:rel=(源地址与目的地址差的绝对值)-3,(3)减1条件转移指令(循环转移指令)减1条件转移指令有如下两条:DJNZdirect,rel;(direct)(direct)1若(direct)=0,则(PC)(PC)+3否则,(PC)(PC)+3+relDJNZRn,rel;若(Rn)=0,则(PC)(PC)+2否则,(PC)(PC)+2+rel,LCALLaddr16子程序长调用指令可在64K范围内调用子程序,3、子程序调用及返回:(LCALL,ACALL,RET,RETI4条),ACALLaddr11子程序绝对调用指令可在指令所在的2K范围内调用子程序,RET子程序返回指令子程序结束并返回调用的下一条指令,RETI中断服务子程序返回指令中断结束/返回被打断处的下一条指令,2.3.5位操作类指令,位操作又称为布尔变量操作,它是以位(bit)作为单位来进行运算和操作的。MCS51系列单片机内设置了一个位处理器(布尔处理机),它有自己的累加器(借用进位标志CY),自己的存储器(即位寻址区中的各位),也有完成位操作的运算器等。这一组指令的操作对象是内部RAM中的位寻址区,即20H2FH中连续的128位(位地址00H7FH),以及特殊功能寄存器SFR中可进行位寻址的各位。,在指令中,位地址的表示方法主要有以下4种(均以程序状态字寄存器PSW的第五位F0标志为例说明):直接位地址表示方式:如D5H;点操作符表示(说明是什么寄存器的什么位)方式:如PSW.5,说明是PSW的第五位;位名称表示方法:如F0;用户定义名表示方式:如用户定义用FLG这一名称(位符号地址)来代替F0,位操作类指令(17条),位操作类指令以位为单位进行逻辑运算及操作,可分为4种:,位传送:(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度美发师个人工作室合作协议
- 二零二五年度抵账土地租赁及项目合作开发及补偿合同
- 2025年度建筑工程安全文明施工监理合同
- 二零二五年度社区便利店股份合作与增值服务合同
- 二零二五年度债转股与风险投资借款协议
- 二零二五年度红酒品鉴会赞助合作协议
- 2025抖音网红直播带货合作合同范本
- 二零二五年智慧城市建设项目房地产开发公司股权协议
- 2025年知识产权法律咨询与代理服务合同
- 二零二五年度腻子产品市场拓展与销售培训合同
- NY/T 396-2000农用水源环境质量监测技术规范
- GB/T 9652.1-2007水轮机控制系统技术条件
- GB/T 35162-2017道路基层用缓凝硅酸盐水泥
- GB/T 34618-2017蒸汽疏水系统在线阀门内漏温度检测方法
- GB/T 12807-2021实验室玻璃仪器分度吸量管
- 狂犬病暴露处置考试题库及答案
- 2023年江苏大学附属医院医护人员招聘笔试模拟试题及答案解析
- 事故案例分析考试真题版
- 小学数学人教一年级上册准备课年市级公开课教案 市赛获奖
- 医院管理案例-智慧后勤助力医院后勤管理转型
- 企业应急管理及能力提升培训课件精选
评论
0/150
提交评论