MCS-51单片机指令系统_第1页
MCS-51单片机指令系统_第2页
MCS-51单片机指令系统_第3页
MCS-51单片机指令系统_第4页
MCS-51单片机指令系统_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

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

文档简介

《微型计算机原理及接口技术》授课专业:自动化授课学时:60学时1第三章MCS-51单片机指令系统3.1指令系统概述13.2数据传送类指令23.3算术运算类指令33.4逻辑运算类指令43.5控制转移类指令53.6位操作类指令62§3.1指令系统概述2学习内容1指令概述寻址方式31、概念指令:是指示单片机完成特定操作的命令。

指令系统:是单片机能够执行的全部命令的集合。汇编语言指令:用助记符、符号地址、标号等表示的书写程序的语言。2、指令的格式一、指令概述[标号:]操作码助记符[目的操作数,][源操作数][;注释]如:START:

MOV

A,#01H

;A←#01H

标号

操作码助记符

操作数

注释4注:标号由1~6个字符数字串组成,第一个必须是字母;不一定每句都有标号,标号不产生目标代码;汇编语言中已经有确切定义的符号不能作为标号;同一标号在一个程序中只能定义一次;标号后面必须跟冒号。标号:给该条语句起个名字,以便在其它语句中寻找该条语句,它代表该条语句所在的地址。5注:操作数可以是数的本身或其所在地址;十六进制数以A~F打头的数前面要加0,以区别于标号。操作码助记符:规定指令进行何种操作,是指令中不能空缺的部分,一般采用具有相关含义的英语单词或缩写表示。操作数:说明被操作的数的源及目的。注释:为便于阅读理解程序,对语句所作的解释说明,不产生目标代码,用分号开始表示注释。63、指令系统中有关符号说明符号含义Rn当前R0-R7@RiR0R1(i=0,1)direct8位直接地址(内部RAM的低128个单元的地址)或指SFR#data8/168位常数(立即数)16位常数(立即数)Addr11/1611位目的地址,16位目的地址rel转移指令8位偏移量(补码)-128~+127bit位地址/对该位内容取反@间接寻址符号(前缀)(x)X存储单元中的内容((x))以X中的内容为地址的存储单元中的内容7MCS-51汇编语言有111种指令,42种操作码助记符用来描述33种操作功能。按功能分为数据传送类:29条算术运算类:24条逻辑运算类:24条控制转移类:17条位操作类:17条4、指令分类8按字节数分为单字节指令:49条双字节指令:45条三字节指令:17条按运算速度分为单周期指令:64条双周期指令:45条四周期指令:2条9寻址方式:寻找指令中操作数的地址,并把操作数取出来的方法。51单片机一共七种寻址方式:立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址位寻址二、MCS-51的寻址方式10它是操作数直接在指令中给出的寻址方式。这种操作数称为立即数,立即数有8位和16位两种,立即数可以是十进制,也可以是十六进制,还可以二进制。立即数前面带“#”。1、立即寻址[例3-1]:

MOVA,#20H;A←#20HMOVA,#10000111B;A←#10000111BMOVA,#50;A←#50

MOVDPTR,#1808H ;DPTR←#1808H注:立即数只能作为源操作数。11MOVA,#20H;A←#20H即把20H这个数据送入累加器A中。PC分析74H20H操作码立即数……PC执行PCACC20HMOVA,#20H执行示意图执行结果:(A)=20H12指令中直接给出操作数所在地址的寻址方式。可用符号“direct”表示指令中的直接地址,寻址范围是内部RAM的低128字节和SFR.2.直接寻址[例3-2]:

MOVA,20H;将片内RAM20H单元中的内容送入累加器A,70H为直接地址。13MOVA,20H;A←(20H)PC分析PC执行PCE5H20H操作码直接地址……ROM……62H……RAM20H……ACC62H执行结果:(A)=62H14在指定的寄存器中存放操作数的寻址方式。这类寄存器包括工作寄存器R0~R7、A、B、DPTR。3.寄存器寻址[例3-3]:

MOVA,R0;把工作寄存器R0中的内容传送到累加器A中。15把操作数所在的地址存放在指定的寄存器中,而操作数本身则存放在该地址所对应的存储单元中的寻址方式。间接寻址寄存器前用“@”表示前缀。能够用于寄存器间接寻址的寄存器有R0、R1、DPTR和SP(SP不用间接寻址符“@”)。4.寄存器间接寻址[例3-4]:

MOVA,@R0;A←((R0))16以16位寄存器(PC或DPTR)的内容作为基址,以累加器A的内容作为偏移量,将两者进行相加得到的和作为操作数地址。变址寻址只能对程序存储器进行寻址,分为两种:以PC的当前值为基址以DPTR的内容为基址5.变址寻址17[例3-5]:

MOVCA,@A+PC;A←((A)+(PC))上述指令的功能是,PC的当前值与累加器A的内容相加,形成操作数的地址。[例3-6]:

MOVCA,@A+DPTR

;A←((A)+(DPTR))上述指令的功能是,DPTR的值与累加器A的内容相加,形成操作数的地址。18ACCSFRROMDPLDPH30H20H48H2035H+[例3-7]:

将程序存储器ROM中2035H单元的内容读入累加器A中:

MOVDPTR,#2030H;DPTR←#2030HMOVA,#05H;A←#05H

MOVCA,@A+DPTR;A←(2035H)05H48H19主要用于转移指令,它是把指令中给出的相对地址偏移量rel与PC当前值相加,得到程序转移的目标地址。6.相对寻址目标地址=PC当前值+rel=转移指令所在地址+转移指令字节数+relrel是一个带符号的8位二进制补码,其取值范围为

-128~127,负数表示从当前地址向上转移,正数表示从当前地址向下转移。20相对寻址方式示意图程序存储器ROM2002HSJMP/80H2009Hrel=07H07HPCPC→2000HPC+1→2001HPC+2→2002H…XXH…[例3-8]:在地址2000H处有一条相对转移指令:SJMPloop

;机器码:2000H80H07H

目标地址=(2000+2+07)H=2009H。21指令中直接给出位操作数的地址。位地址可用符号“bit”表示。7.位寻址[例3-9]:MOVC,F0;CY←(F0)指令的功能:将位F0的内容送到进位标志CY中。

[例3-10]:MOVC,2EH;CY←(2EH)

指令的功能:将位地址2EH的内容送到进位标志CY中。22注:可供位寻址的区域:片内RAM的20H~2FH为位寻址空间00~7FH;

凡是地址能被8整除的SFR,共11个。23表3-1寻址方式及寻址空间对照表寻址方式符号寻址空间寄存器寻址寄存器名工作寄存器R0~R7、A、B、DPTR直接寻址direct片内RAM低128字节、特殊功能寄存器SFR寄存器间接寻址@R0、@R1、@DPTR片内RAM低128字节〔@R0、@R1〕、片外RAM〔@R0、@R1、@DPTR〕立即寻址#data8或#data16程序存储器(指令的常数部分)变址寻址@A+DPTR、@A+PC程序存储器位寻址bit、/bit片内RAM中的20H~2FH的128个位、特殊功能寄存器中可位寻址的位相对寻址rel程序存储器256字节范围(PC+rel)241、作业:指出下列指令中源操作数的寻址方式MOVA,77HADDA,R2MOVA,#55HMOVA,@R1MOVCA,@A+DPTRMOVC,30HMOVXA,@R0MOV50H,AMOVCA,@A+PCSJMP34HADDA,#21直接寻址寄存器寻址立即寻址寄存器间接寻址变址寻址位寻址寄存器间接寻址寄存器寻址变址寻址相对寻址立即寻址25功能:进行数据传送。注意:数据传送类指令一般不影响状态标志位。分类:片内RAM传送指令

MOV

片外RAM传送指令

MOVX

ROM传送指令

MOVC

数据交换指令

XCHXCHDSWAP

堆栈操作指令

PUSHPOP

§3.2数据传送类指令26程序存储器ROMEPROM特殊功能寄存器SFR片内RAM128字节片外数据存储器RAMMOVCMOVXMOVPUSHPOPXCHXCHDSWAP

数据传送指令操作域示意图27分类:1、以累加器A为目的地址的指令2、以寄存器Rn为目的地址的指令3、以直接地址为目的地址的指令4、以寄存器间接地址为目的地址的指令5、以DPTR为目的地址的16位指令特点:传送是在单片机内部进行,不需要通过外部总线交换数据,速度比较快。指令助记符为:MOV一、片内RAM传送指令28指令格式:

MOVA,Rn

;A←(Rn)

MOVA,direct;A←(直接地址)

MOVA,@Ri

;A←((Ri))

MOVA,#data;A←立即数指令解释:把源操作数送入累计器A中。1、以累加器A为目的地址的指令29举例说明:

[例3-11]:

已知(R1)=40H;(30H)=12H;(40H)=34H,求分别执行下列指令后结果。①MOVA,R1②MOVA,30H③MOVA,@R1④MOVA,#56H各指令执行后结果:(A)=①40H、②12H、③34H、④56H30指令格式:

MOVRn,A;Rn←(A)

MOVRn,direct;Rn←(直接地址)

MOVRn,#data;Rn←立即数指令解释:把源操作数送入工作寄存器Rn中。2、以寄存器Rn为目的地址的指令31举例说明:

[例3-12]:

已知(A)=40H;(30H)=12H;(40H)=34H,求分别执行下列指令后结果。①MOVR1,A②MOVR1,30H③MOVR1,#40H各指令执行后结果:(R1)=①40H、②12H、③40H32指令格式:

MOVdirect,A;direct←(A)

MOVdirect,Rn

;direct←(Rn)

MOVdirect1,direct2;direct1←(direct2)

MOVdirect,@Ri

;direct←((Ri))MOVdirect,#data;direct←立即数指令解释:将源操作数送入直接地址所指的存储单元中。3、以直接地址为目的地址的指令33举例说明:

[例3-13]:

已知(R1)=40H;(30H)=12H;(40H)=34H;(A)=78H,求分别执行下列指令后结果。①MOV50H,A②MOV50H,R1③MOV50H,30H④MOV50H,@R1⑤MOV50H,#56H各指令执行后结果:(50H)=①78H、②40H、③12H、④34H、⑤56H34指令格式:

MOV@Ri,A;(Ri)←(A)

MOV@Ri,direct;(Ri)←(direct)

MOV@Ri,#data;(Ri)←立即数

指令解释:把源操作数送入R0、R1指针间接寻址的片内RAM单元中。4、以寄存器间接地址为目的地址的指令35举例说明:

[例3-14]:

已知(R0)=40H;(30H)=12H;(A)=78H,求分别执行下列指令后结果。①MOV@R0,A②MOV@R0,30H③MOV@R0,#56H各指令执行后结果:(40H)=①78H、②12H、③56H36指令格式:

MOVDPTR,#data16;DPTR←16位立即数指令解释:把一个16位立即数送入DPTR寄存器。高8位送入DPH,低8位送入DPL。5、以DPTR为目的地址的16位指令37练习题2、设(30H)=40H;(40H)=10H;(P1)=0CAH,试判断下列程序执行后的结果。MOVR0,#30HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1

各指令执行后结果:(A)=,(B)=,(40H)=,(P2)=。38特点:此类指令实际是片外RAM与A之间的传送指令。片外RAM单元只能采用寄存器间接寻址的方式来访问,R0、R1、DPTR可作间接寻址的寄存器。指令助记符为:MOVX二、片外RAM传送指令分类:

1、以DPTR间接寻址的指令

2、以R0和R1间接寻址的指令39指令格式:

MOVXA,@DPTR;A←((DPTR))

MOVX@DPTR,A;(DPTR)←(A)指令解释:片外RAM单元的地址存于DPTR中,上述两条指令,第一条指令是读片外RAM单元中的内容到A中;第二条指令是把A中内容写入片外RAM单元中。注意:DPTR是16位的地址指针,可寻址64KB(0000H~FFFFH)的外部RAM。1、以DPTR间接寻址的指令40举例说明:

[例3-15]:将外部RAM中1000H单元中的内容送入外部RAM中2000H单元中。已知(1000H)=12H,(2000H)=34H。

MOV DPTR,#1000H ;DPTR←#1000HMOVXA,@DPTR ;A←((DPTR))MOV DPTR,#2000H;DPTR←#2000HMOVX@DPTR,A;(DPTR)←(A)

41指令格式:

MOVXA,@Ri;A←((Ri))

MOVX@Ri,A;(Ri)←(A)指令解释:片外RAM单元的地址存于Ri中,上述两条指令,第一条指令是读片外RAM单元中的内容到A中;第二条指令是把A中内容写入片外RAM单元中。2、以R0和R1间接寻址的指令42注意:Ri(R0或R1)是8位的地址指针,可寻址256B(00H~FFH)的外部RAM。要想寻址64KB的范围,可使P2口输出外部RAM的高8位地址(页地址,共256页00H~FFH),而使Ri提供低8位地址(页内寻址,256B/页)。43举例说明:

[例3-16]:将外部RAM2050H单元的内容送入累加器A中。

MOVP2,#20H;P2←#20H,得到页地址

MOVR1,#50H;R1←#50H,得到页内地址

MOVXA,@R1;A←(2050H)

或:

MOVDPTR,#2050H ;DPTR←#2050HMOVXA,@DPTR;A←(2050H)44特点:ROM只能读不能写,数据传送是单向的。指令助记符为:MOVC指令格式:

MOVCA,@A+PC;PC←(PC)+1,A←((A)+(PC))MOVCA,@A+DPTR;A←((A)+(DPTR))指令解释:在程序存储器中查寻表格常数,并将它送入累加器A,也称它为查表指令。三、片外ROM传送指令45注意:第一条指令分别以当前指令的PC作为基址寄存器,A作为变址寄存器,可寻址范围是在当前指令下256B之内。第二条指令DPTR作为基址寄存器,可寻址范围64KB。基址寄存器内容与变址寄存器内容相加形成16位地址。46举例说明:

[例3-17]:将ROM1020H单元内容送内部RAM70H单元。

MOVA,#20HMOVDPTR,#1000HMOVCA,@A+DPTRMOV70H,A47四、数据交换指令分类:1、全字节交换指令XCH2、半字节交换指令XCHD3、高低四位互换指令SWAP48指令格式:

XCH A,direct;(A)←→(直接地址)

XCH A,Rn

;(A)←→(Rn)

XCH A,@Ri

;(A)←→((Ri))指令解释:将A的内容与源操作数相互交换。1、全字节交换指令49指令格式:

XCHD A,@Ri;(A)3~0←→((Ri))3~0指令解释:将累加器A的低4位与Ri的间接寻址单元内容的低4位相互交换,高4位不变。2、半字节交换指令50指令格式:

SWAPA;(A)7~4←→(A)3~0指令解释:A中的高低4位互换。练习题:已知(A)=20H,(R1)=30H,(20H)=12H,(40H)=54H,求执行下列指令后结果。

XCH A,R1 XCH A,40H XCH A,@R1XCHD A,@R1SWAPA3、高低四位互换指令;(A)=30H,(R1)=20H;(A)=54H,(40H)=30H;(A)=12H,(20H)=54H;(A)=14H,(20H)=52H;(A)=41H(A)=,(R1)=,(20H)=,(40H)=。41H20H52H30H51堆栈特点:先进后出或后进先出。堆栈用途:用于保护和恢复CPU的工作现场,也可实现内部RAM单元之间的数据传送和交换。堆栈指针:SP始终指向栈顶位置,初始化时对SP设定在内部RAM的30H~7FH范围内。堆栈操作:入栈和出栈。五、堆栈操作类指令52指令格式:

PUSHdirect;SP←(SP)+1,(SP)←(direct)指令解释:先将堆栈指针SP的内容加1(指针上移一个单元),然后将直接寻址单元的内容送到SP指针所指的堆栈单元中(栈顶)。1、进栈指令53指令格式:

POPdirect;direct←((SP)),SP←(SP)-1指令解释:先将堆栈指针SP所指的单元(栈顶)内容弹出,并送入direct单元中,然后SP的内容减1(指针下移一个单元)。注意:PUSH和POP要成对出现。2、出栈指令54功能:进行数据算术运算。注意:一般会影响状态标志位。分类:加法指令:3类减法指令:2类乘法指令除法指令

§3.3算术运算类指令55指令格式:

ADDA,Rn ;A←(A)+(Rn)ADDA,direct;A←(A)+(直接地址)ADDA,@Ri ;A←(A)+((Ri))ADDA,#data;A←(A)+立即数指令解释:将源操作数和累加器A中的操作数相加,其结果存放在A中。一、加法指令——不带进位56影响标志位:CY、AC和P:若位D3向D4进位,则AC=1,反之为0;若位D7进位,则CY=1,反之为0;位D6、D7进位情况会影响OV标志,OV=C6⊕C7;A中1的个数影响P。57举例说明:

[例3-20]:两个无符号数放在A和R2中,设(A)=0C2H(194),(R0)=0BBH(187),执行指令:

ADDA,R0

11000010+10111011111

01111101A中偶数个111001POVCYAC0异或PSW结果:(A)=7DH(125),CY=1,AC=0,OV=1,P=0.58指令格式:

ADDC A,Rn;A←(A)+(Rn)+(CY)ADDC A,direct;A←(A)+(直接地址)+(CY)ADDC A,@Ri;A←(A)+((Ri))+(CY)ADDC A,#data;A←(A)+立即数+(CY)指令解释:将累加器A的内容、指令中的源操作数和CY三者相加,并把结果存放到A中。一、加法指令——带进位59注意:ADDC指令对PSW标志位的影响与ADD指令相同,这组指令常用于多字节加法运算。举例说明:

[例3-21]:两个无符号数放在A和20H中,设(A)=85H,(20H)=0FFH,CY=1。执行指令:

ADDCA,20H

结果:(A)=85H,CY=1,AC=1,OV=0,P=1.

60指令格式:

INC A;A←(A)+1INC Rn

;Rn←(Rn)+1INC direct;direct←(direct)+1INC @Ri

;(Ri)←((Ri))+1INC DPTR;DPTR←(DPTR)+1

指令解释:将指定单元中的内容加1后,结果仍保存在原单元。注意:除了标志位P外,INC不影响其他标志位。一、加法指令——加1指令61指令格式:

SUBB A,#data;A←(A)-立即数-(CY)SUBB A,direct;A←(A)-(直接地址)–(CY)SUBB A,@Ri ;A←(A)-((Ri))–(CY)SUBB A,Rn ;A←(A)-(Rn)–(CY)指令解释:从累加器A减去源操作数及标志位CY,其结果再送累加器A中。二、减法指令——带借位62注意:系统没有提供不带借位的减法指令,若要进行不带借位的减法运算,只需先将CY位清0即可。SUBB指令对PSW的标志位产生影响同于加法指令。63举例说明:

[例3-22]:设(A)=6CH,(R2)=40H,CY=0。执行指令:SUBBA,R2

分析执行结果及对标志位的影响。

结果:(A)=2CH,CY=0,AC=0,OV=0,P=1

01101100-01000000000101100A中奇数个110010POVCYAC0异或PSW64指令格式:

DECA;A←(A)-1DECdirect;直接地址←(直接地址)-1DEC@Ri ;(Ri)←((Ri))-1DECRn;Rn←(Rn)-1指令解释:将指定单元中的内容减1后,结果仍保存在原单元。注意:除了标志位P外,DEC不影响其他标志位。且没有对DPTR的减1操作指令。二、减法指令——减1指令65指令格式:

MULAB;B、A←(A)×(B)指令解释:将累加器A和寄存器B中两个8位无符号整数相乘,并把乘积的高8位存于寄存器B中,低8位存于累加器A中。

注意:乘法运算指令时会对标志位产生影响:CY位总是被清0,即CY=0;OV标志则反映乘积的位数,若乘积大于255,则OV=1,否则OV=0。影响P,不影响AC。

三、乘法指令66举例说明:

[例3-23]:设(A)=64H,(B)=3CH,执行指令:

MUL AB

结果为:(A)×(B)=1770H,(A)=70H,(B)=17H,CY=0,OV=1,P=1。67指令格式:

DIVAB;A商,B余←(A)/(B)指令解释:将累加器A和寄存器B中的两个8位无符号整数相除,所得商存于A中,余数存于B中。注意:除法运算指令时会对标志位产生影响:CY位总是被清0,即CY=0;OV标志位的状态反映寄存器B中的除数情况,若除数(B)为0,则OV=1,表示本次运算无意义,否则,OV=0。影响P,不影响AC。

四、除法指令68举例说明:

[例3-24]:设(A)=0F0H(240),(B)=20H(32)。执行指令:

DIV AB

结果为:(A)=07H(商7),

(B)=10H(余数16),标志位:OV=0,CY=0,P=1。69功能:进行数据逻辑运算。注意:一般不影响状态标志位。分类:逻辑与指令逻辑或指令逻辑异或指令累加器A的逻辑操作指令:3类§3.4逻辑运算类指令70指令格式:

ANLA,#data;A←(A)∧立即数ANLA,Rn;A←(A)∧(Rn)ANLA,direct;A←(A)∧(直接地址)ANLA,@Ri;A←(A)∧((Ri))ANLdirect,#data;(direct)←(direct)∧立即数ANLdirect,A;(direct)←(direct)∧(A)一、逻辑与指令指令解释:将目的操作数和源操作数的内容逐位进行逻辑“与”操作,结果送入目的地址中。。71指令格式:

ORLA,#data;A←(A)∨立即数ORLA,Rn;A←(A)∨(Rn)ORLA,direct;A←(A)∨(直接地址)ORLA,@Ri;A←(A)∨((Ri))

ORLdirect,#data;(direct)←(direct)∨立即数

ORLdirect,A;(direct)←(direct)∨(A)二、逻辑或指令指令解释:将目的操作数和源操作数的内容逐位进行逻辑“或”操作,结果送入目的地址中。。72指令格式:

XRLA,#data;A←(A)⊕立即数

XRLA,Rn;A←(A)⊕(Rn)

XRLA,direct;A←(A)⊕(直接地址)

XRLA,@Ri;A←(A)⊕((Ri))

XRLdirect,#data;(direct)←(direct)⊕立即数

XRLdirect,A;(direct)←(direct)⊕(A)三、逻辑异与指令指令解释:将目的操作数和源操作数的内容逐位进行逻辑“异或”操作,结果送入目的地址中。。73举例说明

[例3-25]:设(A)=57H,(30H)=0FH,(R0)=3CH。分别执行指令:

①ANLA,#11110000B②ORLA,30H③XRLA,R0

结果为:①(A)=50H②(A)=5FH③(A)=6BH

74注意ANL常用于位清0操作,即将需要清0的位与“0”相与,其余位与“1”相与不变。ORL常用于位置1操作,即将需要置1的位与“1”相或,其余位与“0”相或不变。XRL常用于位取反操作,即将需要取反的位与“1”相异或,其余位与“0”相异或不变。75练习题

3、分析下列程序段的执行结果,并说明程序功能。

MOVA,#77HXRLA,#0FFHANLA,#0FH MOVP1,#64HANLP1,#0F0HORLA,P1

;(A)=77H;(A)=77H⊕0FFH=88H;(A)=88H∧0FH=08H;(P1)=64H;(P1)=64H∧0F0H=60H;(A)=08H∨60H=68H

结果为:(A)=68H;(P1)=60H76四、累加器A的逻辑操作指令分类:累加器A清0累加器A取反累加器A移位累加器A循环左移累加器A循环右移累加器A带进位循环左移累加器A带进位循环右移77指令格式

CLR A;A←0指令解释将累加器A的内容清“0”

。举例说明

[例3-26]:设(A)=55H。执行指令:

CLR A

结果为:(A)=00H1、累加器A清078指令格式

CPL A;A←/(A)指令解释将累加器A的内容逐位逻辑求反,结果仍存放在A中。举例说明

[例3-27]:设(A)=55H。执行指令:

CPL A

结果为:(A)=0AAH。

2、累加器A取反79指令格式

3、累加器A移位RLA:循环左移是将累加器A的内容依次向左循环移动1位。RRA:循环右移是将累加器A的内容依次向右循环移动1位。RLCA:带进位循环左移是将累加器A的内容和进位标志CY依次向左循环移动1位。RRCA:带进位循环右移是将累加器A的内容和进位标志CY依次向右循环移动1位。80注意除RLC和RRC影响CY和P外,其他不影响标志。举例说明

[例3-28]:设(A)=11H,CY=1,执行指令:

RL A RLC ARRARRCA结果:(A)=22H,CY=1(A)=45H,CY=0(A)=A2H,CY=0(A)=51H,CY=081功能:控制程序流向。注意:不影响状态标志位。分类:无条件转移指令条件转移指令子程序操作指令空操作指令§3.5控制转移类指令82一、无条件转移指令功能:使程序无条件转移到指定的地址去执行。

分类:长转移指令绝对转移指令相对转移指令间接转移指令83指令格式

LJMPaddr16;PC←(PC)+3,PC←addr16指令解释

先使程序计数器PC值加3(完成取指并指向下一条指令的地址),然后将指令提供的16位地址(addr16)送入PC,然后程序无条件地转向目标地址(addr16)处执行。注意

addr16可实现在ROM中的64KB范围内转移。1、长转移指令84指令格式

AJMPaddr11;PC←(PC)+2,PC10~0←addr11指令解释

先使程序计数器PC值加2(完成取指并指指向下一条指令的地址),然后将指令提供的addr11作为转移目的地址的低11位,和PC当前值的高5位形成16位的目的地址,程序随即转移到该地址处执行。注意

addr11可实现在ROM中的2KB范围内转移。2、绝对转移指令85指令格式

SJMPrel

;PC←(PC)+2+rel指令解释 指令的功能是先使程序计数器PC值加2(完成取指并指向下一条指令的地址)然后把PC当前值与地址偏移量rel相加作为目标转移地址。即:

目标地址=(PC)+2+rel=(PC)当前值+rel3、相对转移指令86注意

rel是一个带符号的8位二进制数的补码,范围为-128~127,所以SJMP指令的转移范围以PC当前值为起点,向下跳128个字节,或向上跳127个字节,共256个字节范围内转移。踏步指令,又称为动态停机指令,执行结果是转向本指令自己,程序在原处无限循环。一般写成:

HERE:SJMPHERE或SJMP$87指令格式

JMP@A+DPTR;PC←(PC)+1,PC←(A)+(DPTR)指令解释将累加器A中数与DPTR的16位数相加,和作为目标地址送入PC,实现无条件转移。注意该指令采用变址寻址方式,DPTR作为基址寄存器,由用户预先设定,A的内容作为偏移量,根据A值的不同,就可转移到不同的地址,又称为散转。

4、间接转移指令88举例说明[例3-29]:程序段1:

ORG0000HLJMPMAIN………………MAIN:………………程序段2:START:……………………………….SJMPSTART89二、条件转移指令功能:条件转移指令要求对某一特定条件进行判断:

当满足条件时,程序就转移到目标地址去执行;当不满足条件时,则顺序执行下一条指令。用于实现分支结构的程序。分类:累加器A的判0转移指令比较不等转移指令减1不为0转移指令90指令格式

JZ rel

JNZrel指令解释若累加器A的内容为0,则程序转向指定的目标地址,否则程序顺序执行。若累加器A的内容不为0,则程序转向指定的目标地址,否则程序顺序执行。1、累加器A的判0转移指令91举例说明[例3-30]:将片内RAM的40H单元开始的数据块传送到片外RAM的1000H开始的单元中,当遇到的数据为0,则停止传送(假定不超过存储空间就会遇到0)。

MOVR0,#40HMOVDPTR,#1000HLOOP:MOVA,@R0JZHEREMOVX@DPTR,AINCR0INCDPTRSJMPLOOPHERE:SJMPHERE92指令格式CJNEA,direct,rel;(A)≠(direct)则转移CJNEA,#data,rel;(A)≠立即数则转移

CJNERn,#data,rel;(Rn)≠立即数则转移CJNE@Ri,#data,rel;((Ri))≠立即数则转移指令解释将前两个操作数进行比较:若不相等,程序转移到指定的目标地址,若相等,程序顺序执行。2、比较不等转移指令比较是采用相减运算的方法。结果会影响CY标志,但不影响任何一个操作数的内容。93指令格式

DJNZRn,rel

;Rn←(Rn)-1;(Rn)≠0则转移,PC←(PC)+2+rel;(Rn)=0则顺序执行,PC←(PC)+2②

DJNZdirect,rel

;direct←(direct)-1;(direct)≠0则转移,PC←(PC)+2+rel;(direct)=

0则转移,PC←(PC)+2+rel3、减1不为0转移可以控制循环次数。94指令解释将Rn/direct的内容减1后进行判断,若不为0,程序转移到目标地址处执行,若为0,则程序顺序执行。举例说明

[例3-31]:计算子程序延时时间DELAY:MOVR0,#5;1机器周期DY1:NOP;1机器周期

DJNZR0,DY1;2机器周期

RET;2机器周期

延时时间=1+(1+2)*5+2=18(机器周期)95三、调用子程序及返回指令定义:

子程序是指能完成某一任务的相对独立的程序段。适用:同一个程序的不同地方要求执行同样的操作可将该操作编成一个子程序。分类:长调用指令绝对调用指令返回指令96特点:在主程序需要时,安排一条子程序调用指令,使程序无条件地转移到子程序处执行,执行完后由返回指令回到原断点处继续执行主程序。子程序中可包括对另外子程序的调用,称为子程序嵌套,但次数是有限制的。97子程序和主程序间的关系图98指令格式

LCALLaddr16;PC←(PC)+3;SP←

(SP)+1,(SP)←(PC)L

;SP←(SP)+1,(SP)←(PC)H;PC←addr16指令功能先将PC+3(完成取指操作并指向下一条指令的地址),再把该地址(又称断点地址)压入堆栈保护起来,然后把addr16送入PC,并转入该地址执行子程序。1、长调用指令99指令格式

ACALLaddr11;PC←(PC)+2;SP←

(SP)+1,(SP)←(PC)L

;SP←(SP)+1,(SP)←(PC)H;PC10~0←addr11指令功能先将PC+2(完成取指操作并指向下一条指令的地址),再把该地址压入堆栈保护起来,然后把addr11送入PC,和PC当前值的高5位合并成16位的子程序入口地址,并转入该地址执行子程序。2、绝对调用指令100子程序返回指令指令格式

RET;PCH←((SP)),SP←(SP)-1;PCL←((SP)),SP←(SP)-1指令解释将保存在堆栈中的断点地址弹出送给PC,使CPU结束子程序返回到断点地址处继续往下执行主程序。注意:RET指令不可缺,且放在子程序的出口处。3、返回指令101中断返回指令指令格式

RETI;PCH←((SP)),SP←(SP)-1;PCL←((SP)),SP←(SP)-1指令解释将保存在堆栈中的断点地址弹出送给PC,使CPU结束中断服务程序返回到断点地址处继续执行主程序。注意:RETI指令不可缺,且放在中断服务程序的出口处。102指令格式

NOP;PC←(PC)+1指令解释这是一条1字节的指令。该指令执行时CPU不进行任何操作,但需要消耗一个机器周期的时间,通常用于短暂的延时。

四、空操作指令103举例说明

[例3-32]:调用延时子程序。

START:MOVP1,ALCALLDELAYINCASJMPSTART…….DELAY:MOVR0,#5DY1:NOPDJNZR0,DY1RET104功能位变量的传送、修改、逻辑操作等。注意以CY为位累加器,以可位寻址的BIT为操作数。分类:位传送指令位置位清0指令位逻辑运算指令位条件转移指令§3.6位操作类指令105指令格式

MOV C,bit;CY←(bit)

MOV bit,C;bit←CY指令解释实现某个可位寻址的位(bit)与位累加器C之间的相互传送。注意两个bit之间不能直接传送,必须通过位累加器C。一、位传送指令106举例说明

[例3-33]:设(CY)=0,(20H).1=1,执行指令:

MOVC,20H.1

等同与:MOVC,01H

结果为:CY=1。

注意:这里的01H是位地址,20H是内部RAM的字节地址。

107指令格式

CLR C;CY←0CLR bit;bit←0SETBC;CY←1SETB bit;bit←1指令解释前两条指令是把位累加器C和bit位的内容清0。后两条指令是把位累加器C和bit位的内容置1。二、位置位清0指令108举例说明

[例3-34]:要设定工作寄存器2区为当前工作区,可用以下指令实现:

SETBRS1CLRRS0

结果为:RS1=1,RS0=0。等同与:

ANLPSW,#0F7HORLPSW,#10H109指令格式

ANLC,bit;CY←CY∧(bit)ANLC,/bit;CY←CY∧(/bit)ORLC,bit;CY←CY∨(bit)ORLC,/bit;CY←CY∨(/bit)CPLC;CY←/CYCPLbit;bit←/bit三、位逻辑运算指令前两条指令的功能是将bit位的值(或bit取反后的值)与累加器C的值进行逻辑与操作,结果送位累加器C。中间两条指令的功能是将bit位的值(或bit取反后的值)与累加器C的值进行逻辑或操作,结果送位累加器C。后两条指令的功能是把位累加器C和bit位的内容取反。110举例说明

[例3-35]:用编程的方法实现下图所示电路的功能:

P3.0=(P1.3)∧(P1.4)∨(/P1.2)

程序如下:

MOVC,P1.3ANLC,P1.4ORLC,/P1.2MOVP3.0,C≥1P1.2P1.4P1.3P3.0.&11111、以CY状态为条件的转移指令指令格式

JC rel;若(CY)=1则转移,PC←(PC)+2+relJNCrel;若(CY)=0则转移,PC←(PC)+2+rel指令解释

两条指令是对CY进行判断。第一条是若(CY)=1,则转移到目标地址去执行;若(CY)=0,则程序顺序执行。第二条是若(CY)=0,则转移到目标地址去执行;若(CY)=1,则程序顺序执行。四、位条件转移指令112举例说明

[例3-36]:比较片内RAM的50H和51H单元中两个8位无符号数的大小,把大数存入60H单元。若两数相等,则把标志位F0置1。

MOVA,50HCJNEA,51H,LOOPSETBF0SJMPHERELOOP:JCLOOP1MOV60H,ASJMPHERELOOP1:MOV60H,51HHERE:SJMPHERE1132、以位变量状态为条件的转移指令格式

JBbit,rel

;若(bit)=1则转移,PC←(PC)+3+rel

JNBbit,rel

;若(bit)=0则转移,PC←(PC)+3+rel

JBCbit,rel

;若(bit)=1则转移,同时bit←0,PC←PC+3+rel

第一条指令的功能是若bit位内容为1,转移到目标地址,若为0,程序顺序执行。第二条指令的功能是若bit位内容为0,转移到目标地址,若为1,程序顺序执行。第三条指令的功能是若bit位内容为1,则将bit位内容清0,并转移到目标地址,若为0,程序顺序执行。。1141、指令格式、分类;2、寻址方式:七种立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址位寻址指令系统总结1153、数据传送类指令:

片内RAM传送指令MOV

片外RAM传送指令MOVX

片外ROM传送指令MOVC

数据交换指令XCHXCHDSWAP

堆栈操作指令PUSHPOP1164、算术运算类:加法指令:ADD、ADDC、INC减法指令:SUBB、DEC乘法指令:MUL除法指令:DIV1175、逻辑运算类:累加器A的逻辑操作指令:

CLR、CPL、RR、RRC、RL、RLC逻辑与指令:ANL逻辑或指令:ORL逻辑异或指令:XRL1186、控制转移类:无条件转移指令:LJMP、AJMP、SJMP、JMP条件转移指令:JZ/JNZ、CJNE、DJNZ调用子程序及返回指令:

LCALL、ACALL、RET、RETI空操作指令:NOP1197、位操作类指令:位传送指令:MOV位置位清0指令:CLR、SETB位逻辑运算指令:ANL、ORL、CPL位条件转移指令:JC/JNC、JB/JNB/JBC120习题课一、填空题:1、若用传送指令访MCS-51的程序存储器,它的操作码助记符应为

。2、访问MCS-51片内RAM应该使用的传送指令助记符是

。3、累加器(A)=80H,执行完指令ADDA,#83H后,进位为CY=

。4、执行ANLA,#0FH指令后,累加器的高4位=

。5、累加器(A)=00H,e=20H,PC当前值=1000H,执行完指令JZe后,PC=

。6、累加器(A)=7EH,(20H)=04H,MCS-51执行完ADDA,20H指令后,PSW.0=

。7、MOVPSW,#10H是将MCS-51的工作寄存器置为第

组。1218、ORLA,#0F0H是将A的高4位置1,而低4位

。9、INC指令对CY位

影响。10、MOVC,20H源操作数是

寻址方式。11、MOVCA,@A+DPTR源操作数的寻址方式为

。12、在位操作中,能起到与字节操作中累加器作用的是

。13、欲使P1口的低4位输出0而高4位保持不变,应执行一条

指令。14、在R7初值为00H的情况下,DJNZR7,$指令将循环执行

次。15、如果(A)=56H,(R0)=07AH,执行XCHA,R0;结果(A)=

,(R0)=

122二、判断下列指令中哪些是合法指令?哪些是非法指令?1、MOVXDPTR,A2、SWAPR03、XCHDA,30H4、ANL#30H,A5、RLC30H6、CLRDPTR7、CLRPSW.68、CPL40H9、ORLC,40H10

温馨提示

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

评论

0/150

提交评论