版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章MCS-51单片机的
指令系统
本章要点指令格式寻址方式指令系统本章难点指令系统指令是计算机根据人们的要求来完成某项操作的命令。所谓指令系统是计算机所有命令的集合。
指令系统中指令功能的强弱直接反映了计算机性能的强弱。MCS-51单片机的111条指令有以下三种分类方法:(1)按指令所占字节数分,有:单字节指令(49条)双字节指令(45条)三字节指令(17条)(2)按指令执行的时间分,有:单周期(机器周期)指令(64条)双周期指令(45条)四周期指令(2条)(3)按指令的操作功能分,有:数据传送类指令(29条)算术运算类指令(24条)逻辑运算与移位类(24条)控制转移类指令(17条)位操作类指令(17条)
3.1
MCS-51的汇编语言指令格式和符号简介3.1.1指令格式MCS-51单片机指令的汇编语言语句行格式如下:[标号:]操作码助记符[操作数1][,操作数2][,操作数3][;注释]其中,带方括号部分为可选项;标号后必有冒号;助记符和操作数之间须用空格分隔;各操作数之间用逗号分隔;注释要用分号开头。各字段含义如下:(1)标号是用户设定的语句地址的符号,一般用字母打头的“字母-数字”串组成。(2)操作码助记符是由英文字母组成的字符串,它规定了指令的功能,如ADD加法、MUL乘法、MOV数据传递等,是指令中惟一不能空缺的部分。(3)操作数是指令操作的对象,它指出了参与操作的数据来源和操作结果存放的目的单元。操作数可以是一个数(立即数),也可以是一个数所在的存储单元地址。在MCS-51的指令系统中,操作数最多可以有三个。在两个操作数的指令中,将操作数1叫做目的操作数,操行数2叫源操作数。(4)注释部分是对该语句或程序段功能的解释说明,其目的是写给人看的,它不属于指令的功能部分,单片机不执行。需注意的是,当注释较长,一行不够时可以换一行写,但每行开头仍必须用分号“;”打头。例如,以后要学习的一程序段:
MOV23H,#0AH;23H←0AH。
CLRA
;寄存器A的内容清零。LOOP:ADDA,23H
;将寄存器A的内容和23H单元内容相加,结果存于A。
DJNZ23H,LOOP
;当23H单元中的内容减1后不为0时,转移至标号LOOP;标识的所在单元。3.1.2数据的表示形式和符号简介1.数据的表示形式(1)二进制数形式,末尾用字母B标识,如01011000B。(2)十进制数形式,末尾用字母D标识或不用任何标识,如78D、98。(3)十六进制形式,末尾用字母H标识,当数据的第一个数码为字母时,须在前面添加“0”,0F7H、OAEH、12H。(4)ASCII码形式,用单引号括起来标识,如’ABC’、’123’。2.常用符号简介在以后的指令学习中,除单片机的寄存器之外,还会用到一些符号,下面对常用到的符号作一简要介绍:(1)Rn:当前工作寄存器组中的8个通用寄存器R0~R7。其中,n=0~7。(2)Ri:当前工作寄存器组中的2个通用寄存器R0、R1。其中,i=0~1。(3)#data:8位立即数。(4)#data16:16位立即数。(5)addr11:11位目的地址。(6)addr16:16位目的地址。(7)direct:8位片内RAM的单元地址(包括SFR的地址和符号)。
(8)rel:8位补码表示的有符号数,表示相对转移指令中的偏移量。(9)bit:片内RAM或SFR中的直接寻址位。(10)C:代表PSW中的进位标志位,也是单片机中位处理器的累加器。(11)(X):表示括号内X寄存器或X地址单元中的内容,如(A)表示寄存器A的内容、(30H)表示30H地址单元中的内容。(12)((X)):表示以某寄存器或某地址单元中的内容为地址的这个单元中的内容。(13)@:间接寻址方式中间址寄存器的标志符号。(14)←:将箭头右边的内容送箭头左边的单元或寄存器。(15)/:加在位地址前,表示对该位的状态取反。3.2
MS-51单片机的寻址方式寻址就是寻找操作数的地址。所谓寻址方式,就是如何确定操作数所在的位置(地址)把操作数取出来的方法,或者说通过什么的方式找到操作数。
寻址方式的方便与快捷是衡量CPU性能的一个重要方面。MCS—51单片机有七种寻址方式,分别是:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址,
3.2.1立即寻址
所谓立即寻址,指操作数在指令中以立即数的形式直接给出。立即数可以是8位的,也可以是16位的。立即数前方加“#”来标识。例如:MOVA,#23H
;A←23H,即将立即数23H送入累加器A中。MOVDPTR,#1000H
;DPTR←1000H,即指令执行后DPTR的内容为1000H。
3.2.2直接寻址直接寻址是指操作数的地址在指令中直接给出。直接寻址方式可访问三种地址空间:(1)特殊功能寄存器SFR(只能用直接寻址);(2)片内RAM的低128个字节单元(该空间还可以采用寄存器间接寻址);(3)211个位地址空间。20H20H50H累加器A内部RAM……例如:MOVA,50H
;A←(50H),即把50H单元中的内容送入累加器A。该例中,若(50H)=20H,则指令执行后累加器A中内容为20H。又如:MOVA,P1
;A←(P1)
MOVA,90H源操作数P1属于直接寻址方式。因为特殊功能寄存器既P1可以用符号P1表示,又可以用其地址90H表示。3.2.3寄存器寻址寄存器寻址是指定的某一寄存器内容为操作数。寻址范围:当前工作寄存器组中的8个寄存器R0~R7(00-1FH)、特殊功能寄存器A、B和DPTR。其中B仅在乘除法指令中为寄存器寻址,当表示操作数地址时为直接寻址。A既可以寄存器寻址,又可以直接寻址。除这几个特殊功能寄存器外,其余的一律用直接寻址。例如:MOVA,R0;A←(R0)
MULAB;BA←(A)×(B)
MOVB,R1;B←(R1)3.2.4寄存器间接寻址指令所指定的某一寄存器的内容为操作数的地址。能够用于间接寻址的寄存器有R0、R1、DPTR和SP,用时在它们前面加@表示间接寻址。寄存器间接寻址的寻址空间为片内和片外的RAM。片内RAM的寄存器间接寻址采用寄存器R0和R1;片外RAM的寄存器间接寻址有两种形式:一是采用R0、R1作间址寄存器,这时R0或R1提供低8位地址,而高8位地址则由P2端口提供;二是采用16位的DPTR作间址寄存器。
例如:MOVA,@R0;A←((R0))若(RO)=60H,(60H)=10H,则指令执行完后寄存器A的内容为10H。…60H10H60HR0RAM…10HAMOVXA,@R1;A←((P2)(R1))。
MOVX是下一节将要学习的访问片外RAM指令。由于片外RAM地址空间有64KB,用的是16位地址,又由于Ri是8位寄存器,只能存储8位地址,故规定Ri只存放地址的低8位,高8位由P2口负责提供,为此在使用这条指令前应先对P2赋值。MOVXA,@DPTR;A←((DPTR)),即把DPTR中的内容为地址的片外RAM中数据送累加器A。3.2.5变址寻址变址寻址是以某个寄存器的内容为基本地址,然后在这个基本地址基础上加上地址偏移量才是真正的操作数地址,即基址寄存器内容加变址寄存器内容作为有效地址进行间接寻址。以DPTR或PC当前值作为基址寄存器,累加器A作为变址寄存器,二者内容之和为操作数的地址。MCS-51指令系统独有的。用于访问程序存储器(ROM)中的数据表格例如:JMP@A+DPTR;无条件转移指令MOVCA,@A+DPTR;A←((A)+(DPTR))MOVCA,@A+PC
;A←((A)+(PC)+1)后两条指令通常用于查表操作。功能完全一样,使用起来有一些差别。DPTR在使用前可以赋值,查表范围可达64K范围。PC的基址值是固定的,而A的内容是无符号数,因此只能在当前指令下256个地址单元范围内进行查表。0302H1EHROM……02F1HDPTRA(执行前)11HA(执行后)1EH3.2.6相对寻址相对寻址仅在转移指令中使用。它是以当前PC值为基地址,加上指令中给出的偏移量,二者之和为程序转移到的目的地址。例如:SJMP08H
目的地址=源地址+转移指令字节数+rel若该指令在存储器中的首地址为2000H,由于该指令为双字节指令,所以PC的当前值为PC+02H=2002H,故程序转移到的目的地址为2002H+08H=200AH。注意:(1)“PC当前值”是指转移指令的首地址加上该指令的字节数,也就是下一条指令在存储器中的首地址。(2)偏移量是一个8位的有符号补码数,所表示数的范围是-128~127。其中正值表示以PC的当前值为起点向地址增大的方向跳转,负值表示以PC的当前值为起点向地址减小的方向跳转。3.2.7位寻址MCS-51单片机有位处理能力。采用位寻址方式指令的操作数是8位二进制数中的某1位。例如:MOVC,P1.0;C←(P1.0)。MOVC,3AH;将3AH这一位中的内容送累加位C中SETBPSW.4;将PSW中D4位置1。3.3数据传送指令数据传送指令是MCS-51指令系统中使用最频繁的指令,是把源操作数传送给目标单元,而源操作数不变。源就是数据来源,目标就是传送的目的地。3.3.1通用数据传送指令格式:MOV目的操作数,源操作数功能:把源操作数指定的字节内容传送到目的操作数指定的单元中。目的操作数可以是:累加器A、通用寄存器Rn、直接地址direct和间接地址;源操作数可以是:累加器A、通用寄存器Rn、直接地址direct、间接地址和立即数A累加器@Ri间接寻址#data立即数Rn寄存器Direct直接寻址8051的数据传递方式1.以累加器A为目的操作数的传送指令共有4条,格式和功能见下表。例如,若(A)=80H,(R0)=10H,(10H)=20H,(R5)=3DH,(78H)=0A2H,则执行以下指令后,累加器A的内容分别为:MOVA,#78H;(A)=78HMOVA,R5;(A)=3DHMOVA,78H;(A)=0A2HMOVA,@R0;(A)=20H2.以Rn为目的操作数的传送指令以寄存器Rn为目的操作数的传送指令共3条,见下表。例如,如(A)=65H,(70H)=90H,执行以下三条指令后,R3寄存器的内容分别为:MOVR3,A;(R3)=65HMOVR3,70H;(R3)=90HMOVR3,#78H;(R3)=78H这里需要注意,在MCS-51指令系统中,源操作数和目的操作数不能有以下三种情况:(1)同时用Rn;(2)同时用@Ri;(3)一个操作数用Rn,同时另一个操作数用@Ri。3.以直接地址direct为目的操作数的传送指令以直接地址direct为目的操作数的传送指令共5条,见下表。
例如,若(R0)=30H,(30H)=20H,则指令MOV90H,@R0;(90H)=20HMOVP1,@R0;(P1)=20H这两条指令实际上是相同的,只不过在第二条指令中,用特殊功能寄存器符号名P1代替了其直接地址90H罢了。4.以寄存器间接地址@Ri为目的操作数的传送指令该类指令共3条,助记符及功能见下表所示。5.以DPTR为目的操作数的传送指令MOVA,59HMOVR0,AMOVA,#00HMOV@R0,AMOVA,#25HMOV51H,AMOV52H,#70H3.3.2片外RAM(或I/O口)与累加器A传送数据指令为了区别通用的内部数据传送指令,访问片外RAM的传送指令助记符记为MOVX。该类指令有4条,指令格式及功能见下表所示。MOVXA,@DPTR功能:将16位寄存器(DPTR)作为地址指针的外部RAM单元内容传送到累加器A中。即(A)←((DPTR))。说明:MOVX是对外部RAM的读(或写)操作指令,该指令为读数据操作,外部RAM地址为16位的,而其内容始终恒为8位。【例】试分析指令的执行结果。①MOVDPTR,#9000H;(DPTR)=9000H②MOVXA,@DPTR;(A)=((DPTR))=(9000H)即将外部RAM9000H地址单元的内容读出传送到累加器A中。MOVXA,@Ri功能:将16位合成地址(P2)(Ri)指示的外部RAM单元内容传送到累加器A中。即(A)←((P2)(Ri))。说明:该指令同样完成读数据操作,其中16位地址的高8位是隐含在P2寄存器中的,而16位地址的低8位由R0或R1寄存器的内容提供。【例】试分析指令的执行结果。①MOVP2,#80H;(P2)=80H,作为外部RAM的高8位地址②MOVR0,#20H;(R0)=20H,作为外部RAM的低8位地址③MOVXA,@R0;(A)←((P2)(R0))=(8020H)即将外部RAM8020H地址单元的内容读出传送到累加器A中。MOVX@DPTR,A功能:将累加器A中的内容传送到以16位寄存器(DPTR)作为地址指针的外部RAM单元中,即((DPTR))←(A)。说明:该指令为写数据操作,外部RAM地址是16位的,而其内容恒为8位。【例】试分析指令的执行结果。①MOVDPTR,#9000H;(DPTR)=9000H②MOVA,#10H;(A)=10H③MOVX@DPTR,A;((DPTR))=(9000H))=(A)=10H
即将数据10H写入到外部RAM9000H地址中。MOVX@Ri,A功能:将累加器A中的内容传送到以16位合成地址(P2)(Ri)指示的外部RAM单元中,即((P2)(Ri))←(A)。说明:该指令的16位地址其高8位是隐含在P2寄存器中的,而低8位由R0或R1寄存器的内容提供。【例】试分析指令的执行结果。①MOVP2,#90H;(P2)=90H②MOVR1,#10H;(R1)=10H③MOVA,#30H;(A)=30H④MOVX@R1,A;((P2)(R1))=(9010H)=((A)=30H
即将数据30H写入到外部RAM9010H地址中。3.3.3程序存储器向累加器A传送数据指令这两条指令的功能是:以数据指针寄存器DPTR的内容或程序计数器PC的当前值作为基地址,以累加器A的内容为偏移量,二者相加形成16位地址,将该16位地址所指出的程序存储器的单元内容送入A中。;MOVA,#00HCLRAMOVDPTR,#1000HMOVCA,@A+DPTRMOV20H,A
MOVA,#30H1000H:MOVCA,@A+PC;(A)=((A)+(PC)+1)=(30H+1001H)
结果:(A)=(1031H)使用这2条指令时,应注意以下几点:(1)指令执行完后不改变基址寄存器的内容。(2)由于执行的是16位加法,从低8位产生的进位将传送到高位去。(3)累加器A中的内容为无符号整数。(4)第一条指令是以PC为基址寄存器,当CPU取完指令操作码时,PC值会自动加1,指向下一条指令的第一字节地址。又由于累加器A中的内容为无符号整数,所以本条指令的查表范围为PC+1后的256字节范围内。(5)第二条指令以DPTR为基址寄存器,表格数据可以设置在程序存储器的任何地址空间中。(6)指令中,A与PC或DPTR的位置不能互换。例如,在程序存储器中,数据表格为:1010H:02H1011H:04H1012H:06H1013H:08H执行程序:1000H:MOVA,#0DH1002H:MOVCA,@A+PC1003H:MOVR0,A(冒号前表示存储单元的地址)执行完后,(A)=02H,(R0)=02H,(PC)=1004H3.3.4数据交换指令MCS-51的数据交换指令有两大类,分别是字节数据交换指令和半字节数据交换指令。1.字节数据交换指令共3条,指令格式及功能见下表。2.半字节数据交换指令3.累加器A中高4位与低4位交换指令3.3.5堆栈操作指令第一条为入栈指令,操作过程为:先将SP的内容加1,然后将直接地址direct单元中的数据送入SP所指向的单元中去。第二条为出栈指令,操作过程为:先将堆栈指针SP所指向的栈顶单元中的内容弹出,送到直接地址单元direct中,然后SP的内容减1,指向新的栈项单元。注意:PUSH指令的执行过程中实际隐含着一个数据堆栈,且将堆栈作为目的地址。MOVSP,#30HMOVDPTR,#1234HPUSHDPLPUSHDPH解释操作过程:第①条SP是符号,代表片内SFR地址81H,即SP=81H,(SP)=30H后,其意义是将片内RAM地址由30H~7FH区域设为堆栈空间。第②条(DPTR)=1234H,即(DPH)=12H,(DPL)=34H。第③条(SP1)←(SP0)+1=30H+1=31H。(SP1)=(31H)←(DPL)=34H。第④条(SP2)←(SP1)+1=31H+1=32H。(SP2)=(32H)←(DPH)=12H。执行结果:(31H)=34H,(32H)=12H,(SP)=32H。试分析指令的执行结果。①MOVSP,#32H②MOV31H,#23H③MOV32H,#01H④POPDPH⑤POPDPL解释操作过程:第①条(SP)=32H。第②条片内RAM地址31H的内容为23H,即(31H)=23H。第③条(32H)=01H。第④条(DPH)←((SP0))=(32H)=01H;然后(SP1)←(SP0)-1=32H-1=31H。第⑤条(DPL)←((SP1))=(31H)=23H;然后(SP2)←(SP1)-1=31H-1=30H。执行结果:(DPTR)=(DPH)(DPL)=0123H,(SP)=30H。3.4算术运算类指令在MCS-51的指令系统中,算术运算类指令主要完成加、减、乘、除四则运算,加1、减1和二/十进制调整操作,这些运算操作大多与累加器A有关,且运算结果将影响程序状态字PSW中的进(或借)位标志CY、辅助进(或借)位标志AC、溢出标志OV和奇偶标志位P。3.4.1加减运算指令加减运算指令包括加法指令(ADD)、带进位的加法指令(ADDC)和带借位的减法指令(SUBB)3种。1.加法指令
ADDA,源功能:加法,(A)=(A)+[源]这4条指令对PSW中的CY、AC、OV和P的影响如下:(1)进位标志CY:相加过程中若和的位7有进位,CY=1;否则,CY=0。(2)辅助进位标志AC:相加过程中若和的位3向位4有进位,AC=1;否则,AC=0。(3)溢出标志OV:相加过程中若和的位7和位6同时有进位或同时无进位,OV=0;否则,OV=1。也可以理解为:溢出标志位OV的值是由运算时和的位7、位6两位进位状态经过逻辑异或得到的。(4)奇偶标志位P:当A中1的个数为奇数时,P=1,为偶数时,P=0。2.带进位的加法指令
ADDCA,源功能:带进位加法。(A)=(A)+[源]+(C)。注意:CY的值是指在该指令执行之前已存入的进位标志值,而非指令执行过程中产生的进位标志值。例如,设有两个16位数相加,被加数的高8位放在41H单元,低8位放在40H单元,加数的高8位放在43H单元,低8位放在42H单元,和的低8位存放在50H单元,高8位存放在51H单元,进位标志位存放在52H单元。可编程序如下:MOVA,40H;被加数低8位送AADDA,42H;与加数低8位相加MOV50H,A;和的低8位存入50HMOVA,41H;被加数高8位送AADDCA,43H;被加数高8位与加数高8位以及低位来的进;位相加MOV51H,A;和的高8位存入51H单元MOVA,#00H;A中内容清零ADDCA,#00H;(A)+00H+高8位来的进位求和,结果送AMOV52H,A;进位标志位CY内容存入52H单元273.带借位的减法指令SUBBA,源功能:带进位减法,(A)=(A)-[源]-(C)。两条指令组合来实现纯减法功能:
CLRCSUBBA,源MOVA,#0C9H;(A)=C9HMOVR2,#54H;(R2)=54HMOVPSW,#80H;其中标志(C)=1SUBBA,R2;(A)=(A)-(R2)-(C)=C9H-54H-1=74H;且标志(C)=0、(AC)=0、(OV)=13.4.2乘除运算指令1.乘法指令该指令的功能是把累加器A与寄存器B中的8位无符号整数相乘,所得到的16位乘积的高8位存放在寄存器B中,低8位存放在累加器A中。如果二者的乘积大于255(0FFH),则OV置1,否则OV清0;运算结果总使进位标志位CY清0。【例】试分析指令的执行结果。①MOVA,#50H;(A)=50H=80②MOVB,#0A0H;(B)=A0H=160③MULAB;(A)×(B)=3200H=12800结果:(B)=32H,(A)=00H标志:(C)=0,(OV)=12.除法指令该指令是将累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商存放在累加器A中,余数存放在寄存器B中。进位标志CY和溢出标志OV均清0。若寄存器B中除数为0,则执行除法指令后,结果为不定值,并使溢出标志位OV置1,但在仟何情况下,进位标志CY总是被清0的。例如,设(A)=9AH,(B)=23H,执行指令:
DIVAB
则(A)=04H,(B)=0EH,0V=0,CY=0
3.4.3加1减1指令1.加1指令与加法指令不同,加1指令不影响各种标志。唯一的例外是INCA指令可以影响齐偶标志P。如:MOVA,0FFHINCA;(A)=0FFH+1=00H
加1后将溢出,结果为00H,但不影响进位标志。【例】试分析执行结果。①MOVR0,#7EH;(R0)=7EH②MOV7EH,#FFH;(7EH)=FFH③MOV7FH,#48H;(7FH)=48H④INC@R0
;((R0))=(7EH)=((R0))+1=(7EH)+1=FFH+01H
=00H⑤INCR0;(R0)=(R0)+1=7EH+01H=7FH⑥INC@R0
;((R0))=(7FH)=((R0))+1=(7FH)+1=48H+01H
=49H2.减1指令说明:若原字节为00H,减1后将变为0FFH,不影响标志(除DECPSW指令外)。【例】试分析指令的执行结果。①MOVR0,#7FH;(R0)=7FH②MOV7EH,#00H;(7EH)=00H③MOV7FH,#40H;(7FH)=40H④DEC@R0;((R0))=(7FH)=(7FH)-1=3FH⑤DECR0;(R0)=(R0)-1=7FH-01H=7EH⑥DEC@R0;((R0))=(7EH)=(7EH)-1=FFH3.4.4二/十进制调整指令这条指令是在进行BCD码加法运算时,用来对BCD码的加法运算结果自动进行修正,使之成为一个正确的两位BCD数,以完成十进制加法功能(进行十进制加法操作时,要把十进制数转换成BCD码来进行)。BCD码就是用二进制代码表示的十进制数。
在数字系统中,各种数据要转换为二进制代码才能进行处理,而人们习惯于使用十进制数,所以在数字系统的输入输出中仍采用十进制数,这样就产生了用四位二进制数表示一位十进制数的方法,这种用于表示十进制数的二进制代码称为二-十进制代码(BinaryCodedDecimal),简称为BCD码。它具有二进制数的形式以满足数字系统的要求,又具有十进制的特点(只有十种有效状态)。调整的方法:若累加器低4位大于9或者辅助进位标志AC=1,则低四位作加六调整,即AA+06H;若累加器A的高四位大于9或者Cy=1(包括由于低四位调整后导致上述结果),则高四位亦作加6调整,即AA+60H。例如:若作加法后A=9BH,Cy=0,AC=0,则执行DAA指令后,结果为A=01H,Cy=1,相当于十进制数101。100110110000011010100001011000001000000013.5逻辑运算与移位类指令3.5.1逻辑运算指令(1)逻辑与指令运算规则:见0则0例如:(A)=37H,(R0)=0A9H
执行指令:ANL
A,R0结果:(A)=21HANLA,Rn;A(A)(Rn)ANLA,direct;A(A)(direct)ANLA,@Ri;A(A)((Ri))ANLA,#data;A(A)dataANLdirect,A;(direct)(direct)(A)ANLdirect,#data;(direct)(direct)
data001101111010100100100001(2)逻辑或指令运算规则:见1则1例如:(A)=37H执行指令:ORL
A,#09H结果:(A)=3FH
ORLA,Rn;A(A)(Rn)ORLA,direct;A(A)(direct)ORLA,@Ri;A(A)((Ri))ORLA,#data;A(A)dataORLdirect,A;(direct)(direct)(A)ORLdirect,#data;(direct)(direct)
data001101110000100100111111(3)逻辑异或指令运算规则:同为0,异为1
XRLA,Rn;A(A)(Rn)XRLA,direct;A(A)(direct)XRLA,@Ri;A(A)((Ri))XRLA,#data;A(A)dataXRLdirect,A;direct(direct)(A)XRLdirect,#data
;direct(direct)data例如:(A)=37H执行指令:XRL
A,#09H结果:(A)=3EH001101110000100100111110(4)清零和取反指令逻辑运算还完成一些特殊的操作。例如:(1)清0操作
MOV30H,#00H也可以MOVA,30HXRL30H,A又可以ANL30H,#00H(2)屏蔽操作将某一存储单元若干位清0,其他位保持不变,称为屏蔽。被屏蔽的位,原来的数值将被消除,而被0所取代。例如,将P1口的低4位保持不变,屏蔽高4位,然后存入31H单元。
MOVA,P1ANLA,#0FHMOV31H,A(3)求反操作任何数与1相异或,结果1将变为0,0将变为1,利用这个特性可以对某一存储单元的内容求反。例如,将P1口的高4位求反,低4位保持不变,结果存入31H单元。
MOVA,P1XRLA,#OFOHMOV31H,A3.5.2循环移位指令3.6控制转移类指令该类指令用于控制程序的走向,因此其作用空间只能是程序存储器空间。这类指令包括无条件转移指令、条件转移指令、子程序调用、返回指令以及空操作指令。3.6.1无条件转移指令无条件转移指令控制程序计数器PC从现行值转移到目的地址。根据转移的距离和寻址方式的不同,又分为AJMP(绝对转移),LJMP(长转移),SJMP(短转移)和JMP(间接转移)4种。1.绝对转移指令【指令】AJMPaddr11(absolute)功能:在2KB存储区域内的转移说明:(1)转移目的地址的形成:先(PC)(PC)+2;然后PC15~11不变,PC10~0addr10~0(2)转移范围:2KB。(3)指令码的形成:(注:a10~a0均为转移目的地址的低11位)a10a9a800001a7~a0【例】试分析下列转移指令是否正确,对正确指令译码。①37FEHAJMP3BCDH;(PC0)=37FEH,(PC1)=(PC0)+2=3800H;与转移地址3BCDH的高5位均为00111,;在同一个2KB内,转移正确,其指令编码为61CD②37FEHAJMP3700H;(PC1)=(PC0)+2=37FEH+2=3800H;高5位为00111,而转移目的地址3700H的高5位为
;00110,两者不在同一个2KB存存储区内。其指令不正确。2.长转移指令(长跳转指令)该指令能提供16位目的地址,因此,执行这条指令可以使程序从当前地址转移到64K程序存储器地址空间的任何单元,即0000H—FFFFH,所以称长转移指令。指令的执行结果是将16位目的地址送入程序计数器PC。3短转移指令(相对转移)【指令】SJMPrel功能:短转移指令。说明:在实际使用SJMP
指令时,大多数情况不采用SJMPrel
形式,而是采用SJMP××××H形式或SJMP<标号>
的形式。其转移目的地址为:
(PC1)=(PC0)+2(注:SJMP为两字节指令)
(PC2)=(PC1)+relSJMP
的转移地址范围在(PC1)地址值的-128~+127之间,其中偏移量rel=目的地址-(PC1),且rel
为8位补码表示的数。【例】试分析该转移指令的功能。LP:SJMPLP;结果是程序在该条指令处原地址无限循环(原地踏步)另外该功能指令也可写成SJMP$的形式。4.间接转移指令
JMP@A+DPTR
转移到的目的地址(PC)=(A)+(DPTR)本指令不影响标志位,不改变
@A及DPTR中的内容。常用于多分支程序结构中,可在程序运行过程中动态地决定程序分支走向。
例:
MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT3………当(A)=00H时,程序转移到ROUT0处执行,当(A)=02H时,程序转移到ROUT1处执行,以此类推。3.6.2条件转移指令
条件转移指令用于实现按照一定的条件决定程序转移(分支)的方向。1.累加器判0转移指令
【指令】JZrel
功能:JZ指令为判零转移。说明:(1)若累加器(A)=00H,转移。
(2)若累加器(A)≠00H,程序顺序执行下一条指令。具体操作为:(PC1)←(PC0)+2(注:JZ为两字节指令)例1、将外部RAM的一个数据块(首地址为DATA1)传送到内部数据RAM(首地址为DATA2),遇到传送的数据为零时停止传送,试编程。
MOVR0,#DATA2
;设置内部RAM数据指针
MOVDPTR,#DATA1
;设置外部RAM数据指针
LOOP1:MOVXA,@DPTR
;读外部RAM数据
JZLOOP2
;判断传送数据是否为00H,是则转移
MOV@R0,A
;数据不为00H,送内部RAM
INCR0
;修改内部RAM地址指针
INCDPTR
;修改外部RAM地址指针
SJMPLOOP1;继续传送
LOOP2:SJMPLOOP2
;结束传送2.比较不相等转移指令
CJNE目的,源,rel功能:比较两个字节变量的值,如不相等,则转移。说明:CJNE指令具有比较和判断转移两种功能,CJNE指令只影响进(借)位标志C。具体操作如下:
(PC1)←(PC0)+3(注:CJNE为3字节指令)①若[目的]=[源],则程序顺序执行,且(C)=0,②若[目的]≠[源],则程序转移到目的地址,目的地址(PC2)←(PC1)+rel。同时[目的]>[源]时,(c)=0;[目的]<[源]时,(c)=1。
该类指令可产生三分支程序:
即,相等分支;大于分支;小于分支。
A=B吗?
出口YN
A>B吗?
入口YN123(CY)=0(CY)=0(CY)=1例如,设内部RAM的30H和31H单元之中各存放有一个8位的无符号数,请找出其中较大者送入40H单元。编程如下:
MOVA,30H;A(30H)
CJNEA,31H,K1;(30H)(31H)时转移
MOV40H,A;保存
SJMP$K1:JCK2;(CY)=1,即(30H)<(31H)时转移
MOV40H,A;保存较大者到40H中K2:MOV40H,31HSJMP$3.减1不0转移指令【指令】DJNZ目的,rel
功能:减1不为0循环转移。说明:DJNZ指令的主要作用是进行程序的循环控制。具体操作如下:
(PC1)←(PC0)+2或3(注:DJNZ指令有2字节和3字节两种形式)①若[目的]←[目的]-1=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医养生基础知识
- (2024)文化旅游区建设项目可行性研究报告申请报告(一)
- 2022-2023学年天津市培杰中学高三(上)期末语文试卷
- 《社会工作的访谈法》课件
- 2023年水分保持剂项目筹资方案
- 2023年镉、铋相关常用有色金属项目筹资方案
- 【CPA金投赏】2025播客营销白皮书
- 工业机器人技术与应用模拟练习题含答案
- 养老院老人生活娱乐活动组织服务质量管理制度
- 22 伟大的悲剧 教案初中语文课件
- 肾内科疑难病例讨论慢性肾脏病5期
- 《登泰山记》优秀课件
- 创业基础-中南财经政法大学中国大学mooc课后章节答案期末考试题库2023年
- 第八章-航空器受非法干扰的应急管理
- 2023年四川省成都市温江区四年级数学第二学期期末调研试题含解析
- 《康复医学》教学课件手外伤的康复
- 大型活动秩序维护预案5篇,活动现场秩序维护方案
- ERP基本培训教材
- 基建试题及答案
- 甲状旁腺功能亢进疑难病例讨论
- 四川农业大学生物化学(本科)期末考试高分题库全集含答案-2023修改整理
评论
0/150
提交评论