




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章MCS-51单片机指令系统4.1概述4.2数据传送类指令4.3算术运算类指令4.4逻辑运算类指令4.5控制转移类指令4.6位处理类指令2.1概述一、指令与指令系统指令系统:
一种型号的计算机所有指令的集合就是它的指令系统[即软件(语言)系统]。各种型号的计算机都有自己的指令系统。指令:是主机能直接识别和接受并指挥计算机执行某种操作的命令。二、计算机指令的基本类型1.机器语言2.汇编语言3.高级语言1.机器语言a.特点:b.缺点:c.机器码表示的指令格式:是计算机自身固有的语言;用二进制代码表示,亦称为机器代码。能被主机直接识别、分析和执行;程序不易阅读,易出错;----------(读程序难)代码不便于记忆,编程繁、难;--(写程序难)操作码[操作数]2.汇编语言a.优点:b.缺点:指令意义直观、易记忆,编程方便;不需专门的软件平台,占用的存储空间少;1-3B执行速度快;不能被机器本身直接识别。程序通用性差,复杂程序编程工作量大;介于机器语言和高级语言之间,用助记符、符号地址和标号来表示指令和编写程序。直接和硬件接口,适时性强。机器语言汇编语言代真(汇编、翻译目标代码)手工代真、自动代真3.高级语言Basic、Fortran、Pascal、C、Delphi、java等b.缺点:写、读程序方便、简单;程序通用性强。机器本身无法识别。a.优点:需要专门的软件系统(平台),需占用较大的存储空间;三、MCS-51系列单片机的指令格式完整的指令格式如下:[标号:]操作码[操作数][,操作数][;注释]其中:[]项是可选项。注释:注释也是指令语句的可选项,它是为增加程序的可读性而设置的,是针对某指令而添加的说明性文字,不产生可执行的目标代码。操作数:参与操作的地址单元、寄存器单元或数据;可选项(可以是0-2个)“对谁操作”操作码:用助记符表示,是由对应的英文缩写构成的,作用是命令主机作何操作。它规定了指令具体的操作功能,描述指令的操作性质,是一条指令中不可缺少的内容。“做什么,应达到什么目的”标号:用符号表明本条指令的起始存储单元地址,也称为指令的符号地址。以便控制程序的转向。可选项。Note:标号与操作码之间用“:”隔开;标号以英文字母为首,不能超过6个字符;操作码与操作数之间用若干空格隔开;操作数之间用“,”隔开;注释前用“;”与指令主题隔开。四、指令的分类MCS-51指令系统有111条指令,可按下列几种方式分类:1.按指令字节数分类:
单字节指令(49条)、双字节指令(45条)和三字节指令(17条)。2.按指令执行时间分类:
单机器周期指令(64条)、双机器周期指令(45条)和四机器周期指令(2条)。3.按功能分类:
数据传送类指令(29条)、算术运算类指令(24条)、逻辑操作类指令(24条)、控制转移类指令(17条)和位操作指令(17条)。五、指令格式的符号约定Rn:当前工作寄存器R0-R7中的某个寄存器;Ri:当前寄存器组中能间接寻址的两个寄存器R0,R1;#data:8位二进制数(立即数);#data16:16位二进制数;direct:片内RAM中的某个单元或某个SFR的地址;addr11:11位二进制码表示的地址,寻址范围0-2KB;addr16:16位二进制码表示的地址,寻址范围0-64KB;rel:用补码形式表示的8位二进制偏移量;bit:可直接位寻址的片内RAM或SFR中的某个位地址;C:最高进位标志位或为累加器;@:在间接寻址方式中,是间接寻址寄存器指针的前缀。$:表示当前的指令地址;/:在位操作指令中,表示对该位先求反后再参与操作。(X):表示X单元中的内容;((X)):表示以X单元中的内容为地址的相应单元中的数据;如((Ri))、((DPTR))←:表示将箭头右边的内容传送到左边;:表示将数据交换;∨、∧、⊕:分别表示逻辑或、与、异或。4.2数据传送类指令(共29条)数据传送就是将数据从一个单元传送到另一个单元的操作,是单片机最基本、最主要、量最大的操作。数据传送指令共29条,可分为内部RAM数据传送、外部RAM数据传送、程序存储器数据传送、数据交换和堆栈操作等五类。寻址范围:累加器A、片内RAM、SFR、片外RAM。功能:(目的地址)←(源地址),源地址单元的内容不变。对标志位的影响:除以累加器A为目的操作数的数据传送指令对P标志位有影响外,其余均不影响标志位。一、一般传送类指令(4+3+5+3=15条)MOVA,Rn;(A)←(Rn)MOVA,direct;(A)←(direct)MOVA,@Ri;(A)←((Ri))MOVA,#data;(A)←#dataMOVRn,A;(Rn)←(A)MOVRn,direct;(Rn)←(direct)MOVRn,#data;(Rn)←#dataMOVdirect,A;(direct)←(A)MOVdirect,Rn;(direct)←(Rn)MOVdirect,@Ri;(direct)←((Rn))MOVdirect,direct;(direct)←(direct)MOVdirect,#data;(direct)←#dataMOV@Ri,A;((Rn))←(A)MOV@Ri,direct;((Rn))←(direct)MOV@Ri,#data;((Rn))←#data例子:设内部RAM第30H单元内容为40H,第40H单元内容10H,P1作为输出口其输入的数据为0CAH(11001010B)经过程序执行后结果。
MOVR0,#30HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1R0,R1,A,B40H单元,P2口?二、堆栈操作指令(2条)PUSHdirect;SP←SP+1,(SP)←(direct)POPdirect;(direct)←(SP),(SP)←(SP)-1例1:设(SP)=30H,(A)=01H,(B)=02H,执行如下指令后,SP、A和B中的内容分别是什么?
PUSH ACCPUSH BPOP ACCPOPB三、累加器传送类指令(3+2+4+2=11条)①8位数据交换指令:XCH A,Rn ;(A)(Rn)XCH A,@Ri ;(A)((Ri))XCH A,direct ;(A)(direct)②4位数据(半字节)交换指令:XCHD A,@Ri ;(A)3~0((Ri))3~0SWAP A ;(A)7~4(A)3~0例2:编程将内部RAM中30H单元的低4位和高4位进行交换,并保持A中的内容不变。XCHA,30HSWAPAXCHA,30HSWAP30H???③访问外部RAM的指令MOVXA,@DPTR;(A)←((DPTR))MOVXA,@Ri;(A)←((Ri))MOVX@DPTR,A;((DPTR))←(A)MOVX@Ri,A;((Ri))←(A)例3:若(R0)=12H,(0012H)=56H,则执行指令
MOVXA,@R0后;累加器(A)=?例4:若(DPTR)=3020H,(A)=48H,则执行指令MOVX@DPTR,A后,外部RAM(3020H)=?再来一个例子
例如:设外部RAM(0203H)=FFH,分析以下指令执行后的结果。MOVDPTR,#0203H;(DPTR)←0203H,900203MOVXA,@DPTR;(A)←((DPTR)),E0MOV30H,A;(30H)←(A),F530MOVA,#0FH;(A)←0FH,740FMOVX@DPTR,A;((DPTR))←(A),F0执行结果为:(DPTR)=0203H,(30H)=FFH,(0203H)=(A)=0FH。④读程序存储器的指令(查表指令):
MOVCA,@A+DPTR;(A)←((A)+(DPTR))
MOVCA,@A+PC;(PC)←(PC)+1,(A)←((A)+(PC))※两条指令的异同:其功能完全相同,但使用中存在着差异:采用DPTR作为基址寄存器,表可以放在64KB程序存储器空间的任何地址,使用方便,故称为远程查表。一般作为首选查表指令。采用PC作为基址寄存器,具体的表在程序存储器中只能在查表指令后的256B的地址空间中,使用有限制,故称为近程查表。四、16位数据传送指令(1条)MOVDPTR,#data16;(DPTR)←#data16即:(DPH)←#data8~15;(DPL)←#data0~7。例5:编程将内部RAM中30H单元的数据传送到外部RAM的2000H单元。
MOVA,30HMOVDPTR,#2000HMOVX@DPTR,A例:利用查表的方法编写Y=X2(X=0,1,2,…,9)的查表程序。设变量X的值存放在内存30H单元中,求得的Y的值存放在内存31H单元中;平方表存放在首地址为TABLE的程序存储器中。编程如下:MOVA,30HMOVDPTR,#TABLEMOVCA,@A+DPTRMOV31H,ATABLE:00H,01H,04H,09H,10H,19H,24H,31H,40H,51H若(30H)=#03H,则执行完上述程序后:(31H)=?4.3算术运算类指令
(共24条)算术运算指令的两个参与运算的操作数,累加器A为第一操作数,也是目的操作数;第二操作数可以是#data(立即数)、寄存器R0~R7、@Ri(片内RAM)或直接地址单元。算术运算指令可分为加法指令、带进位的加法指令、带借位的减法指令、十进制调整指令、加1指令、减1指令、乘除指令。算术指令都是针对8位无符号数的,如要进行带符号或多字节二进制数运算,需编写程序,通过执行程序来实现。(实验1.多字节算术运算程序实验)一、加法指令ADDA,#data;(A)←(A)+#dataADDA,direct;(A)←(A)+(direct)ADDA,@Ri;(A)←(A)+((Ri))ADDA,Rn;(A)←(A)+(Rn)ADDCA,#data;(A)←(A)+#data+(C)ADDCA,direct;(A)←(A)+(direct)+(C)ADDCA,@Ri;(A)←(A)+((Ri))+(C)ADDCA,Rn;(A)←(A)+(Rn)+(C)INCA;(A)←(A)+1INCdirect;(direct)←(direct)+1INC@Ri;((Ri))←((Ri))+1INCRn;(Rn)←(Rn)+1INCDPTR;(DPTR)←(DPTR)+1进位(借位)标志CY为无符号整数的多字节加法、减法、移位等操作提供了方便;溢出标志OV可方便的控制补码运算;辅助进位标志AC用于BCD码运算。算术运算操作将影响PSW中的OV、CY、AC和P等。
例若(A)=84H,(30H)=8DH,执行指令ADDA,30H之后,由于:
即:(A)=11H,(CY)=1,(AC)=1,(OV)=1(D7有进位,D6无进位),(P)=0。
带进位加法指令
指令的功能是把源操作数与累加器A的内容相加再与进位标志CY的值相加,结果送入目的操作数A中。加的进位标志CY的值是在该指令执行之前已经存在的进位标志的值,而不是执行该指令过程中产生的进位。增1指令的功能是把源操作数的内容加1,结果再送回原单元。这些指令仅INCA影响P标志。其余指令都不影响标志位的状态。
DAA二-十进制调整指令若(A)0~3>9或(AC)=1,则(A)0~3=(A)0~3+06H;若(A)4~7>9或(C)=1,则(A)4~7=(A)4~7+06H;若上述两个条件同时满足,则(A)=(A)+66H。本指令用于对两个BCD码相加后存放在累加器A中的结果进行调整,使之成为一个正确的两位BCD码,以完成十进制加法功能。例:若累加器和寄存器R3中均存放的是BCD码,(A)=84H,(R3)=67H,执行以下指令:ADDA,R3DAA执行过程:执行第1条指令时,单片机按二进制数相加后得到:(A)=EBH,C=0。但是,按照十进制的加法,应该有:84+67=151,结果有误。所以在按二进制数相加后,再加一条十进制调整指令:DAA,按照指令的执行规则:(A)0~3和(A)4~7均大于9,所以要加66H调整,即(A)=(A)+66H=EBH+66H=51H,且(C)=1,这个结果就是十进制加法84+67=151的结果。例若(A)=01010110B(56),表示的BCD码为,(R2)=01100111B(67),表示的BCD码为,(CY)=0。执行以下指令:ADDA,R2DAA由于(A)=00100011B,即,且(CY)=1,即结果为BCD数123。应该注意,DA指令不能对减法进行十进制调整。BDH(189)二、减法指令(4+1=5条)SUBBA,#data;(A)←(A)-#data-(C)SUBBA,direct;(A)←(A)-(direct)-(C)SUBBA,@Ri;(A)←(A)-((Ri))-(C)SUBBA,Rn;(A)←(A)-(Rn)-(C)DECA;(A)←(A)-1DECdirect;(direct)←(direct)-1DECRn;(Rn)←(Rn)-1DEC@Ri;((Ri))←((Ri))-1带借位减CY:差的位7需借位时,(CY)=1;否则,(CY)=0。AC:差的位3需借位时,(AC)=1;否则,(AC)=0。OV:若位6有借位而位7无借位或位7有借位而位6无借位时,(OV)=1。如要用此组指令完成不带借位减法,只需先清CY为0。例若(A)=C9H,(R2)=54H,(CY)=1,执行指令SUBBA,R2之后,由于:
即:(A)=74H,(CY)=0,(AC)=1,(OV)=1(位6有借位,位7无借位),(P)=0。
例:试编写计算3412H-0E7FH的程序,将差的高8位存入41H,低8位存入40H。CLRCMOVA,#12HSUBBA,#7FHMOV40H,AMOVA,#34HSUBBA,#0EHMOV41H,AEND减1这组指令的功能是把操作数的内容减1,结果再送回原单元。这组指令仅DECA影响P标志。其余指令都不影响标志位的状态。三、乘除法指令(1+1=2条)MULAB;累加器A与B寄存器相乘该指令的功能是将累加器A与寄存器B中的无符号8位二进制数相乘,乘积的低8位留在累加器A中,高8位存放在寄存器B中。当乘积大于FFH时,溢出标志位(OV)=1。而标志CY总是被清0。例若(A)=50H(80),(B)=A0H(160),执行指令MULAB(12800即3200H)之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。
乘法DIVAB;累加器A除以寄存器B该指令的功能是将累加器A中的无符号8位二进制数除以寄存器B中的无符号8位二进制数,商的整数部分存放在累加器A中,余数部分存放在寄存器B中。当除数为0时,则结果的A和B的内容不定,且溢出标志位(OV)=1。而标志CY总是被清0。例若(A)=FBH(251),(B)=12H(18),执行指令DIVAB之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。除法4.4逻辑运算类指令
(共24条)
逻辑运算指令可以完成与、或、异或、清0和取反操作,当以累加器A为目的操作数时,对P标志有影响;累加器清0操作对P标志有影响。
循环指令是对累加器A的循环移位操作,包括左、右方向以及带与不带进位位等移位方式,移位操作时,带进位的循环移位对CY和P标志有影响;一、单操作数逻辑运算类指令(2+4=6条)CLRA;(A)←0CPLA;(A)←(A)1这两条指令的功能分别是把累加器A的内容清0和取反,结果仍在A中。例若(A)=A5H,执行指令CLRA之后,(A)=00H。
例若(A)=AAH,执行指令CPLA之后,(A)=55H。
1010101001010101累加器循环移位
例子设(A)=0C5H(11000101B)执行指令RRA结果是什么? 累加器A内容循环右位移,最低位A0移入最高位。 结果(A)=0E2H(11100010B)例子设(A)=0C5H(11000101B)(C)=1执行指令RRCA结果是什么? 累加器A内容和C循环右位移,C移入A的最高位,A的最低位移入C。 结果(A)=0E2H(11100010B)(C)=1例子设(A)=0C5H(11000101B)执行指令RLA结果是什么? 累加器A内容循环左位移,最高位转移到最低位 结果(A)=08BH(10001011B)例子设(A)=045H(01000101B)(C)=1,执行指令RLCA结果是什么? 累加器A内容循环左位移,A最高位到C,C移入A的最低位。 结果(A)=08BH(10001011B)(C)=0二、双操作数逻辑运算类指令(6+6+6=18条)1.逻辑“与”指令(6条):ANLA,#data;(A)←(A)∧#dataANLA,direct;(A)←(A)∧(direct)ANLA,Rn;(A)←(A)∧(Rn)ANLA,@Ri;(A)←(A)∧((Ri))ANLdirect,A;(direct)←(direct)∧(A)ANLdirect,#data;(direct)←(direct)∧#data&2.逻辑“或”指令(6条)
:ORLA,#data;(A)←(A)∨#dataORLA,direct;(A)←(A)∨(direct)ORLA,Rn;(A)←(A)∨(Rn)ORLA,@Ri;(A)←(A)∨((Ri))ORLdirect,A;(direct)←(direct)∨(A)ORLdirect,#data;(direct)←(direct)∨#data≥1
逻辑与
前2条指令的功能是把源操作数与直接地址指示的单元内容相与,结果送入直接地址指示的单元。后4条指令的功能是把源操作数与累加器A的内容相与,结果送入累加器A中。例若(A)=C3H,(11000011B)(R0)=AAH(10101010B),执行指令ANLA,R0之后,(A)=82H(10000010B)。
前2条指令的功能是把源操作数与直接地址指示的单元内容相或,结果送入直接地址指示的单元。后4条指令的功能是把源操作数与累加器A的内容相或,结果送入累加器A中。逻辑或例若(A)=C3H(11000011B),(R0)=55H(01010101B),执行指令ORLA,R0之后,(A)=D7H(11010111B)。3.5.3逻辑异或
前2条指令的功能是把源操作数与直接地址指示的单元内容异或,结果送入直接地址指示的单元。后4条指令的功能是把源操作数与累加器A的内容异或,结果送入累加器A中。例若(A)=C3H(11000011B),(R0)=AAH(10101010B),执行指令XRLA,R0之后,(A)=69H(11010010B)。逻辑“与”指令常用来“屏蔽”某些不用的位。P72例2例9:已知(A)=8AH,(R1)=73H,试编程将A的高4位和R1的低4位合并成一个字节存放在R0中。ANLA,#F0HANLR1,#0FHORLA,R1MOVR0,AANLA,#F0H;屏蔽A的低4位MOVR0,A;暂存到R0中MOVA,R1
;ANLA,#0FH;屏蔽R1的高4位ORLA,R0;合并MOVR0,A;结果送到R0中END例:编写一程序,实现下图所示的逻辑运算功能。其中:X、Y和Z表示输入信号的地址,F表示输出信号的地址。MOVA,XANLA,YMOVF,AMOVA,YORLA,ZCPLAORLA,FMOVF,A≥1&≥1XYZF4.5控制转移类指令
(共17条)功能:改变程序计数器PC中的内容,控制程序执行的流向,实现程序分支转向。分为两大类:一、无条件转移类指令(9条)
:1.子程序调用与返回类指令(2+2=4条)2.转移类指令(4条)3.空操作指令(1条)二、条件转移类指令(8条)
:1.判0转移指令(2条)2.比较转移指令(4条)3.循环转移指令(2条)一、无条件转移类指令(9条)ACALLaddr11;(PC)←(PC)+2;(SP)←(SP)+1,((SP))←(PC)0~7;(SP)←(SP)+1,((SP))←(PC)8~15;(PC)0~10←addr11,(PC)11~15不变。LCALLaddr16;(PC)←(PC)+3;(SP)←(SP)+1,((SP))←(PC)0~7;(SP)←(SP)+1,((SP))←(PC)8~15;(PC)
←addr16。RET;(PC)8~15←((SP)),(SP)←(SP)-1;(PC)0~7←((SP)),(SP)←(SP)-1RETI;(PC)8~15←((SP)),(SP)←(SP)-1;(PC)0~7←((SP)),(SP)←(SP)-1主程序与子程序的调用关系图返回两级子程序嵌套的示意图
这两条指令可以实现子程序的短调用和长调用。这两条指令的执行不影响任何标志。
子程序调用指令ACALL指令执行时,被调用的子程序的首址必须设在包含当前指令(即调用指令的下一条指令)的第一个字节在内的2K字节范围内的程序存储器中。LCALL指令执行时,被调用的子程序的首址可以设在64K字节范围内的程序存储器空间的任何位置。
例若(SP)=07H,标号“XADD”表示的实际地址为0345H,PC的当前值为0123H。执行指令ACALL后,(PC)+2=0125H,其低8位的25H压入堆栈的08H单元,其高8位的01H压入堆栈的09H单元。(PC)=0345H,程序转向目标地址0345H处执行。RET指令的功能是从堆栈中弹出由调用指令压入堆栈保护的断点地址,并送入指令计数器PC,从而结束子程序的执行。程序返回到断点处继续执行。返回类指令
RETI指令是专用于中断服务程序返回的指令,除正确返回中断断点处执行主程序以外,并有清除内部相应的中断状态寄存器(以保证正确的中断逻辑)的功能。AJMPaddr11;(PC)←(PC)+2,(PC)0~10←addr11LJMPaddr16;(PC)←(PC)+3,(PC)←addr16NOP;;(PC)←(PC)+1JMP@A+DPTR;(PC)←(A)+(DPTR)SJMPrel;(PC)←(PC)+2,(PC)←(PC)+rel转移类指令
短跳转AJMPaddr11;PC←(PC)+2,;PC10~0←addr11该指令执行时,先将PC的内容加2(这是PC指向的是AJMP的下一条指令),然后把指令中11位地址码传送到PC10~0,而PC15~11保持原内容不变。在目标地址的11位中,前3位为页地址,后8位为页内地址(每页含256个单元)。长跳转LJMPaddr16;PC←addr16第一字节为操作码,该指令执行时,将指令的第二、三字节地址码分别装入指令计数器PC的高8位和低8位中,程序无条件地转移到指定的目标地址去执行。LJMP提供的是16位地址,因此程序可以转向64KB的程序存储器地址空间的任何单元。
例若标号“NEWADD”表示转移目标地址1234H。执行指令LJMPNEWADD时,两字节的目标地址将装入PC中,使程序转向目标地址1234H处运行。空操作
NOP;PC←(PC)+1这条指令不产生任何控制操作,只是将程序计数器PC的内容加1。该指令在执行时间上要消耗1个机器周期,在存储空间上可以占用一个字节。因此,常用来实现较短时间的延时。散转指令JMP@A+DPTR;PC←(PC)+1,PC←(A)+(DPTR)该指令具有散转功能,可以代替许多判别跳转指令。其转移地址由数据指针DPTR的16位数和累加器A的8位数进行无符号数相加形成,并直接装入PC。该指令执行时对标志位无影响。例有一段程序如下:MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT3当(A)=00H时,程序将转到ROUT0处执行;当(A)=02H时,程序将转到ROUT1处执行;其余类推。
一个补充知识(补码) 补码(two'scomplement)1、在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。2、补码与原码的转换过程几乎是相同的。正数的补码,是其本身 +9的补码是00001001负数的补码 符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。例子:求-7的补码 后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001)所以-7的补码是11111001。相对转移
SJMPrel;PC←(PC)+2,PC←(PC)+rel
第一字节为操作码,第二字节为相对偏移量rel,rel是一个带符号的偏移字节数(2的补码),取值范围为+127~-128(00H~7FH对应表示0~+127,80H~FFH对应表示-128~-1)。负数表示反向转移,正数表示正向转移。rel可以是一个转移目标地址的标号,由汇编程序在汇编过程中自动计算偏移地址,并填入指令代码中。在手工汇编时,可用转移目标地址减转移指令所在的源地址,再减转移指令字节数2得到偏移字节数rel。
例若标号“NEWADD”表示转移目标地址0123H,PC的当前值为0100H。执行指令SJMPNEWADD后,程序将转向0123H处执行(此时rel=0123H-(0100+2)=21H)。偏移量rel及其计算相对偏移量rel是一个带符号的8位二进制数,最高位为符号位,其余7位为有效数。由于rel∈[-127,+127],所以SJMPrel指令的转移范围只能在[PC当前值±127]。在用汇编语言编写程序时,rel可用目的地址的标号来表示,手工汇编时可按下式计算rel:rel=[目的地址-PC当前值]补例:通常用SJMP$指令来实现动态停机的操作(称原地踏步),$表示该指令所在地址,则rel=?rel=[目的地址-PC当前值]补=[-02H]补=FEH例:SJMPLOOP,该指令所在首地址为0103H,LOOP目的地址为0150H,求偏移量rel=?PC当前值=0103H+02H=0105H所以:rel=[0150H-0105H]补=[4BH]补=
4BH思考题:若SJMPrel指令首地址为0100H,目的地址为00B0H,求偏移量rel=?二、条件转移类指令(2+4+2=8条)累加器判0转移
指令的功能是对累加器A的内容为0和不为0进行检测并转移。当不满足各自的条件时,程序继续往下执行。当各自的条件满足时,程序转向指定的目标地址。目标地址的计算与SJMP指令情况相同。指令执行时对标志位无影响。例若累加器A原始内容为00H,则:JNZL1;由于A的内容为00H,所以程序往下执行INCA;JNZL2;由于A的内容已不为0,所以程序转向L2处执行
例:将外部数据RAM的一个数据块传送到内部数据RAM,两者的首址分别为DATA1和DATA2,遇到传送的数据为零时停止。 解:外部RAM向内部RAM的数据传送一定要以累加器A作为过渡,利用判零条件转移正好可以判别是否要继续传送或者终止。完成数据传送的参考程序如下:MOVR0,#DATA1;外部数据块首址送R0MOVR1,#DATA2;内部数据块首址送R1LOOP:MOVXA,@R0;取外部RAM数据入AHERE:JZEND;数据为零则终止传送MOV@R1,A;数据传送至内部RAM单元INCR0;修改地址指针,指向下一数据地址INCR1SJMPLOOP;循环取数2.比较转移指令(4条)这组指令的功能是对指定的目的字节和源字节进行比较,若它们的值不相等则转移,转移的目标地址为当前的PC值加3后,再加指令的第三字节偏移量rel;若目的字节的内容大于源字节的内容,则进位标志清0;若目的字节的内容小于源字节的内容,则进位标志置1;若目的字节的内容等于源字节的内容,程序将继续往下执行。例子例如:当P1口输入为3AH时,程序继续进行,否则等待,直至P1口出现3AH。参考程序如下:MOVA,#3AH;立即数3A送A;743AWAIT:CJNEA,P1,WAIT;(P1)≠3AH,则等待,B590FD3.循环转移指令(2条)DJNZRn,rel规则:(PC)←(PC)+2,(Rn)←(Rn)-1若(Rn)≠0,则(PC)←(PC)+rel转移;若(Rn)=0则结束循环,程序顺序往下执行。
注意:(Rn)要先减一,再判断是否为零!DJNZdirect,rel
不同点:(P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 股东合同协议书模板样本
- 福鼎充电桩采购合同范本
- 销售激光折弯机合同范本
- 特许加盟合同的管理协议
- 第三方管理装修合同协议
- 煤炭采购居间合同协议书
- 物业被盗赔偿协议书范本
- 网签购房合同中补充协议
- 防雷装置检测委托协议书
- 狗狗协议领养协议书模板
- 智能心理辅导系统-洞察阐释
- 运沙船运输合同协议
- 文物保护修复验收技术规范
- 《神经外科护理操作技术》课件
- 重庆发展投资公司及所属企业招聘笔试题库2025
- 2025年中国宠物行业白皮书
- 六西格玛试题及答案
- 2024年下半年青海西宁市事业单位面向社会招聘工作人员笔试及现场笔试历年典型考题及考点剖析附带答案详解
- 2025年宁夏石嘴山市矿业集团有限责任公司招聘笔试参考题库附带答案详解
- 《教育心理学》教材
- 双面提花结构电磁复合材料性能研究与优化
评论
0/150
提交评论