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

下载本文档

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

文档简介

第三章MCS-51单片机指令系统1、指令的格式。2、寻址方式。3、分类指令。3.1

概述3.2

寻址方式本章主要内容3.3

MCS-51单片机指令系统《单片机原理及应用》

本节主要论述指令格式、指令的三种表示形式、指令字节数、指令分类和指令系统综述等五个问题。3.1

概述

标号又称为指令地址符号,一般由1-6个符组成,以字母开头的字母数字串。一、指令格式[标号]:操作码[操作数][;注释]注意:方括号是可选项。

操作码用MCS-51单片机所规定的助记符来表示,它规定指令进行何种操作。

操作数是指令操作的对象,分为目的操作数和源操作数。

注释是对该指令作用或功能的说明。二、指令的三种表达形式1、指令的二进制形式

2、指令的十六进制形式3、指令的助记符形式

如果累加器A中已有一个加数20,那么能够完成20+6并把结果送入累加器A的加法指令:

二进制形式:

0011100000000110B

十六进制形式:

3806H

助记符形式:

ADD

A,#06H;A←A+06H例如1、单字节指令(49条)

单字节指令只有一个字节。1)无操作数单节指令

只有操作码字段,操作数隐含在操作码中

例如:INCDPTR

指令码:10100011三、指令的字节数

2)含有操作数寄存器号的单字节指令例如:八位数传送指令

MOV

A,Rn其中,n的取值范围为0~7。指令码:11101rrr

这类指令的指令码有操作码字段和专门用来指示操作数所在寄存器号的字段组成。

双字节指令含有两个字,操作码字节在前,操作数字节在后。

例如:八位数传送指令

MOV

A,#data;A←data

指令码:74××H2、双字节指令(46条)指令码的第一字节为操作码,第二、三字节为操作数或操作数地址。3、三字节指令(16条)例如:逻辑与操作指令

ANL

direct,#data指令码:53××

××

H1、指令分类2)算术运算指令3)逻辑运算指令1)数据传送指令4)控制转移和位操作指令四、指令的分类及符号说明1)Rn

:表示当前选中的寄存器区的8个工作寄存器(n=0~7)中的一个。2)@Ri:表示寄存器间接寻址,Ri只能是R0或R1。3)#data:8位立即数,实际使用时data应是00H~0FFH中的一个。4)#data16:16位立即数。2、符号的说明5)direct:表示8位内部数据存储器单

元的地址。6)

addr16:表示16位的目的地址。7)addr11:表示11位的目的地址。8)rel

:表示8位带符号地址偏移量。9)@DPTR

:表示以DPTR为数据指针的间接寻址,用于对外部64KRAM/ROM寻址。10)bit

:表示内部RAM(包括专用寄存器)中

的直接寻址位。13)@:为间址寄存器或基址寄存器的前

缀。如@Ri,@A+PC,@A+DPTR。14)/:位操作数的前缀,表示对该位操作

数取反。如/bit.15)$:当前指令的地址。返回

MCS-51单片机的指令系统共有七种寻址方式。3.2寻址方式

特点:操作数以寄存器的名字表示。寻址范围:工作寄存器R0~R7、A、B、DPTR。一、寄存器寻址例如:R0(35H)A结果A=35HMOVA,R0;AR0特点:指令直接给出操作数。操作数字前加“#”符号为前缀,以区别直接地址。#data或#data16,只能做源操作数,常用于赋初值。二、立即寻址例如(1)MOVA,44H;A(44H)(2)MOVA,#44H;A44H(1)将片内RAM中44H单元的内容送累加器A,属于直接寻址。(2)则是把44H这个数本身送到累加器A,属于立即寻址。功能:特点:直接给出操作数地址,直接地址常用8位二进制地址。寻址范围:只限于内部RAM。内部RAM的低128单元和SFR,SFR除以单元地址形式给出外,还以寄存器符号形式给出。直接寻址是访问SFR的唯一方法。三、直接寻址功能:

将片内RAM56H单元中的内容34H送到累加器A中。例如:MOVA,56H;A(56H)34H片内RAM

34H累加器A56H图3.1指令传递特点:操作数地址以寄存器名称间接给出,以寄存器中的内容作为操作数的地址。加标识符@区别于寄存器寻址。MCS-51规定:只能以R0、R1和DPTR实现问址。在寄存器前加“@”符号作前缀。四、寄存器间接寻址(1)内部RAM低128单元:只能使用R0、R1作间址寄存器,通用形式为@Ri(i=0,1)。寻址范围:(2)外部RAM64KB:只能使用DPTR作间址寄存器,其形式为@DPTR。(3)外部RAM低256单元:一个特殊寻址区,除可用DPTR作为间址寄存器寻址外,还可用R0或R1作间址寄存器寻址。(4)堆栈操作指令(PUSH和POP)也应算作寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。寄存器间接寻址指令不能用于寻址SFR。寄存器间接寻址是访问外部RAM的唯一方法。MOVA,R0;A←R0MOVA,@R0;A←(R0)例如:R0=65H,(65H)=26H26H片内RAMA

65H

图3.2

R065H①②注意:@是它区别寄存器寻址的标志。执行①结果A=65H,执行②结果A=26H。特点:只出现在相对转移指令中。五、相对寻址目的地址=指令地址+指令字节数+rel“rel”是一个8位带符号二进制补码数,最大范围是-128~+127。2000

8026H

SJMP

rel;PC←PC+2+rel程序存储器A图3-3指令过程

PC

26H0000H2000H2001H

80H

26H××

××2028H

02H

20H

ALU2002H┆例如

特点:访问ROM,以DPTR或PC基址寄存器和累加器A变址寄存器的内容和为地址,寻址该地址单元,读取数据。常用于查表操作。寻址范围:64KB的ROM六、变址寻址(1)MOVC

A,@A+PC

;A←(A+PC)(2)MOVC

A,@A+DPTR;A←(A+DPTR)执行第一条时先使当前PC值加1,然后把这个加1后的PC值和累加器A中的偏移量相加,作为操作数地址,从该地址中取出操作数送入A中。第二条过程与第一条指令类似。

已知:片外ROM的2006H单元中有一数34H,编写程序用变址寻址方法把这个数送入A中,试进行分析。例3.1

解:根据题目要求,基址可定为2000H,地址偏移量则为06H,程序如下:

MOV

DPTR,#2000H;DPTR←2000HMOV

A,#06H;A←06HMOVC

A,@A+DPTR;A←34H程序存储器A

图3.4

DPTR

00H0000H34H××2006HALU

如图3.4所示,这里A具有双重作用,在指令执行前用来存放地址偏移量,指令执行后为目的操作数。20

06H寻址范围:对片内RAM的位寻址区和11个可位寻址的SFR进行寻址。七、位寻址当把八位二进制数中某一位作为操作数看待时,这个操作数的地址就称为位地址,对位地址寻址简称位寻址。

MOV30H,C

;30H是位寻址位地址

MOVA,30H

30H是直接寻址的字节地址

MOVC,ACC.7;Cy←ACC.7由上面指令可知,位寻址的位地址与直接寻址的字节地址形式完全一样,主要由操作码来区分。例如返回

这类指令的源操作数和目的操作数地址都在单片机内部。

MOV

dest,

src3.3MCS-51单片机指令系统一、数据传送指令1、内部数据传送指令(15条)MOVA,Rn

;ARnMOVA,direct;A(direct)MOVA,@Ri;A(Ri)MOVA,#data;Adata1)以A为目的操作数MOVRn

,A;

RnAMOVRn

,direct;Rn

(direct)MOVRn

,#data;Rndata2)以Rn为目的操作数MOVdirect,A;directAMOVdirect,Rn

;direct

RnMOVdirect1,direct2;direct1

(direct2)MOVdirect,@Ri

;direct(Ri)MOVdirect,#data;directdata3)以直接地址为目的操作数MOV@Ri

,A;(Ri)

AMOV@Ri

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

,#data;(Ri)data4)以寄存器间接寻址为目的操作数

已知:R1=30H,试问执行如下指令后累加器A、R7、30H、31H单元中内容各是什么?

MOV

A,#40HMOV

R7,

#50HMOV

@R1,

#45HMOV31H,#48H例3.2执行后,结果为:A=40H,R7=50H,(30H)=45H,(31H)=48H

已知:R0=20H、(21H)=54H、(22H)=55H、(30H)=56H,试问执行如下指令后,结果A、40H、R2、20H、和P2口中的内容各是什么?

MOVA,21HMOV40H,AMOVR2,22HMOV@R0,21HMOVP2,30H例3.3结果为:A=54H,(40H)=54H,R2=55H,(20H)=54H,P2=56H

已知:(30H)=12H、(31H)=13H、R0=30H、R1=31H,试问执行以下指令后A、30H、31H和32H各是什么?

MOVA,@R0MOV@R1,AMOV@R0,#34HMOV32H,@R1执行后,A=12H,(30H)=34H

,(31H)=12H

,(32H)=12H例3.4内部数据传送指令的小结

图3.5内部指令描述Direct直接寻址@Ri间址

Rn寄存器data立即数累加器A122321223MOV

DPTR,#data16

;DPTR←data16

1)十六位数据传送指令2、外部数据传送指令(7条)MOVC

A,@A+DPTR;A←(A+DPTR)MOVC

A,@A+PC

;PC←PC+1,

;A←(A+PC)2)外部ROM的字节数指令

例3.5

已知片外2008H单元中有一个数为34H,试用以上二条指令各写一个程序,把数送到片内7FH单元中。解:①采用DPTR作为基址寄存器

ORG0000H

LJMP

START ORG0100HSTART: CLRA

;清空A

MOVDPTR,#2008H

;表起始值

MOVCA,@A+DPTR;把A与DPTR相加,

;结果A=34H MOV7FH,A

;结果(7FH)=34H SJMP$

;停止②采用PC作为基址寄存器

ORG

0000H

LJMP

MAIN

ORG

2000H

MAIN:MOV

A,#05H

;偏移量为05H,因为该指令占

;二个字节数

MOVCA,@A+PC

;首先将PC+1,则PC=2003,

;然后加05H,则PC指向2008单元

MOV7FH,A

;结果(7FH)=34H

SJMP$

;停止3)外部RAM的字节传送指令

MOVXA,@Ri;A←(Ri) MOVX@Ri,A;A→(Ri) MOVXA,@DPTR;A←(DPTR) MOVX@DPTR,A;A→(DPTR)

已知外部RAM的60H单元中有一个数为30H,试编程把30H送到片外RAM的2000H单元中。

解:虽都是片外RAM的地址单元,但不能直接传送,必须经过累加器A的转送,才能实现。ORG

1000HMOVR1,#60H;R1=60HMOVXA,@R1;A=30HMOVDPTR

,#2000H;DPTR=2000HMOVX@DPTR,A

;2000H←30HSJMP$;停止例3.63、数据交换指令(5条)

XCHD

A,@Ri

;A3~0

(Ri)3~0SWAPA;A7~4A3~0XCH

A,Rn

;ARnXCHA,direct;A(direct)XCH

A,@Ri

;A(Ri)已知R0=20H,(20H)=75H,A=3FH(1)XCHA,@R0

(2)XCHDA,@R0

(3)SWAPA

例3.7结果:A=75H,(20H)=3FH,R0=20H结果:A=35H,(20H)=7FH,R0=20H结果:A=0F3H

已知:片内20H单元有一个数为30H,片外20H单元有一个数为03H,编程把二个数相互交换。解:例3.8ORG

0100HMOVR0,#20H ;R0←20HMOVXA,@R0 ;A←03HXCHA,@R0;A←30H,(20H)←03HMOVX@R0,A;30H→(20H)(外部RAM)SJMP$ ;停止4、堆栈操作指令(2条)PUSHdirect;SP←SP+1,(SP)←(direct)POPdirect;(SP)→direct,SP←SP-1第一条指令称为压栈指令,用于把direct为地址的操作数传送到堆栈中去。第二条指令称为出栈指令。MOVSP,#70H

;栈底首地址为70HPUSH

30H

;SP←SP+1,71H←XPUSH

40H

;SP←SP+1,72H←YPOP30H

;30H←Y,SP←SP-1=71HPOP

40H

;40H←X,SP←SP-1=70H例3.9

已知:(30H)=X,(40H)=Y,编程用堆栈指令把30H和40H单元中内容相交换。1、加法指令(13条)ADD A,Rn

ADD A,directADD A,@RiADD A,#data二、算术运算指令(24条)1)不带进位位(Cy)加法指令(4条)

试分析执行如下指令后,累加器A和PSW中各标志的变化情况如何?

MOV

A,#5AH ADDA,#6BH

例3.10A=01011010Bdata=01101011B

90107+)111000101B1CS1970CP

1AC图3.6加法指令执行过程ADDCA,

RnADDCA,

#dataADDCA,

directADDCA,

@Ri2)带进位位(Cy)加法指令(4条)

已知:A=8FH、R1=20H、(20H)=12H、(21H)=0FEH和Cy=1,试问CPU依次执行以下指令后累加器A和Cy中的值是多少。

a.ADDCA,R1b.ADDCA,21H c.ADDCA,@R1d.ADDCA,#7FH

例3.11解:操作结果应为:

a.A=0B0H,Cy=0b.A=8DH,Cy=1 c.A=0A2H,Cy=0d.A=0FH,Cy=1INC

A ;A←A+1INC

Rn ;Rn←Rn+1INC

direct ;(direct)←(direct)+1INC

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

DPTR ;DPTR←DPTR+13)加1指令(5条)已知:A=34H、R0=42H、(43H)=23H、DPTR=3020H,试问CPU执行如下程序后A、R4、45H、R0、DPTR中的内容各是什么?

INCA INCR0 INC43H INC@R0

INCDPTR例3.12解:由加1指令的规则,上述指令执行后的的操作结果为:A=35H、R0=43H、(43H)=25H、DPTR=3021H。2、减法指令(8条)SUBBA,Rn

;A←A-Rn-CySUBBA,@Ri

;A←A-(Ri)-CySUBBA,direct ;A←A-(direct)-CySUBBA,#data ;A←A-data-Cy1)带进位位(Cy)减法指令(4条)试分析执行下列指令后,累加器A和PSW中各标志位状态?

CLRC MOVA,#35H SUBBA,#0B6H

解:第一条指令用于清标志位Cy;第二条指令是对被减数送累加器A中;第三条指令是进行减法指令,结果为:A=7FH,PSW为:000

0011CyACF0Rs1Rs0OV━1P例3.13DECA

;A←A-1DECRn

;Rn←Rn-1DECdirect

;direct←(direct)-1DEC@Ri;(Ri)←(Ri)-12)减1指令(4条)

已知:A=10H、R1=3BH、R7=34H、(60H)=00H、(3BH)=0FFH,试分析,执行如下程序后累加器A和PSW中各标志位状态?①DECA

②DEC@R1③DEC60H

④DECR7例3.14解:根据减1指令功能,结果为:①A=0FH,P=1②(3BH)=0FEH,

PSW不变③(60H)=0FFH,PSW不变④R7=33H,

PSW不变3、十进制调整指令(1条)DAA对A中两个压缩BCD数相加之和调整为2位BCD码数。1)只能用在对BCD码数进行ADD或ADDC操

作后使用。2)影响标志位:有进位时C=1。1)BCD加法特点:

试编程实现44H+86H的BCD加法程序,并对其工作原理分析。解:相应BCD加法程序为:

MOVA,#44H ;A←44H

ADD

A,#86H ;A←44+86=0CAH DAA

;A←30H,Cy=1,AC=1 SJMP$

例3.15A=01000100Bdata=10000110B4486+)011010000B11010011000

0B011001010B130

110B低4位>9,加6调整高4位>9,加6调整图3.7BCD加法过程注意:对于BCD减法

MCS-51单片机中没有十进制减法调整指令,因此,BCD减法运算必须采用BCD补码运算法则。4、乘法和除法指令MUL

AB;BA

A×B

C=0积>255OV=1DIV

AB;A…B←

A÷B

C=0除数=0OV=1除数≠0OV=01)乘法指令2)除法指令1、与指令ANLA,RnANLA,@RiANLA,directANLA,#dataANLdirect,AANLdirect,#data;AA∧

Rn;AA∧(Ri);AA∧(direct);AA∧#data;direct(direct)∧A;direct(direct)∧#data三、逻辑运算指令(20条)结果:将P1口锁存器的0、3、4、7位内容屏蔽,而其余位保持原值不变。例如常用ANL指令屏蔽某些不用位或保留某些位ANLP1,#01100110B2、或指令ORLA,Rn ;A←A∨RnORLA,direct ;A←A∨(direct)ORLA,@Ri ;A←A∨(Ri)ORLA,#data ;A←A∨dataORLdirect,A ;direct←(direct)∨AORLdirect,#data;direct←(direct)∨data结果:将P1口锁存器的1、4、5位进行置位,而其余位保持原值不变。常用ORL指令对某些位置位或保留某些位例如ORLP1,#00110010B

ANLA,#00011111B(#1FH)

ANLP1,#11100000B(#0E0H)

ORLP1,A例3.16:将累加器A的内容送P1口的低5位,要求传送时不影响P1口的高3位。MOVR0,AMOVA,R0XRLA,Rn ;A←A⊕RnXRLA,direct ;A←A⊕(direct)XRLA,@Ri ;A←A⊕(Ri)XRLA,#data ;A←A⊕dataXRLdirect,A ;direct←(direct)⊕AXRLdirect,#data;direct←(direct)⊕data3、异或指令结果:将P1口锁存器的0、4、5位内容取反,而其余位保持原值不变。常用XRL指令对某些位取反或保留某些位XRLP1,#00110001B例如CPLACLRA;AA;

A04、累加器清零和取反指令RLA;RRA;ARLCA

;RRCA;5、移位指令(4条)A7A0CyA7A0CyA7A0A7A0AAA

已知:M和M+1单元中有一个16位二进制数(M为低8),编程将其扩大到二倍(注意:该数最大可扩大到65536)。

解:一个16位二进制数扩大到二倍就等于是把它进行一次算术左移。由于MCS-51单元片机的移位指令都是二进制8位的移位指令,因此16位数的移位指令必须用程序来实现。

算法为:

M

M+1

0例3.17ORG

0030HCLR

C ;清进位标志位MOV

R0,#M ;操作数低8位地址送R0MOV

A,@R0 ;A←操作数低8位RLC

A ;低8位操作数左移低位补0MOV@R0,A ;结果送回M单元,Cy中为最高位INC

R0 ;R0指向M+1单元MOV

A,@R0 ;A←操作数高8位RLCA ;高8位操作数左移并加上低位CyMOV@R0,A ;结果送回M+1单元SJMP

$ ;停止LJMP

addr16;PC←addr16AJMPaddr11;PC←PC+2,PC10~0←addr11SJMPrel

;PC←PC+2,PC←PC+relJMP@A+DPTR ;PC←A+DPTR四、控制转移和位操作指令1、控制转移指令(17条)1)无条件转移指令MCS-51系列单片机可以在64KB地址范围内寻址,绝对转移指令的转移范围只在PC当前值所指的2KB地址范围内。①长转移指令LJMPaddr16;PCaddr16三字节指令,不影响标志位,可在64KB地址范围内无条件转移。②绝对转移指令二字节指令,可在2KB地址范围内转移。AJMPaddr11;

PC

PC+2,PC10~0addr11③短转移指令机器码:80H

rel

本指令是一条双字节双周期指令,在PC内容加2所指地址上,以rel:-128~+127为偏移量。SJMPrel;PCPC+2+rel

ORG

1000H1000H7401H

START:MOV

A,#01H ;字位码初值送A1002HF8H

MOVR0,A ;暂存于R01003H90CF01H

LOOP:MOVDPTR,#0CF01H

1017H80rel

SJMP

START

;转入START┋

SJMP

$

例3.18下列程序中,请计算SJMPSTART指令码中的rel,并分析目标地址的转移范围。a)地址偏移量rel的计算:

目标转移地址=源地址+2+rel

rel=目标转移地址-源地址-2

=1000H-1017H-2=-25

rel应采用补码表示,为此rel=[-25]补=E7H解:SJMP指令中地址偏移量是采用START符号表示的,指明指令执行后转入本程序开头重新执行。b)转移地址范围的确定:转移地址通常以SJMP指令始址为参照点,但实际的参照点是对PC+2,因rel的取值范围是-128~+127,故可得到转移地址的实际转移范围为-126~+129。

变址寻址转移指令机器码:73H该类指令是一条单字节双周期无条件转移指令。在64KB地址范围内无条件转移。

JMP@A+DPTR;PCA+DPTRJZrel;

A=0

PCPC+2+rel

A≠0PCPC+2JNZrel;A≠0

PCPC+2+rel

A=0

PCPC+2①累加器A判零转移(2条)2)条件转移指令CJNEA,#data,rel ;不相等转移

;#data=A,PC←PC+3,C←0 ;#data<A,PC←PC+3+rel,C←0 ;#data>A,PC←PC+3+rel,C←1CJNEA,direct,rel;不相等转移

;若A=(direct),则PC←PC+3,C←0;若A>(direct),则PC←PC+3+rel,C←0;若A<(direct),则PC←PC+3+rel,C←1②不相等转移(影响标志位)CJNERn,#data,rel;不相等转移

;若Rn=data,则PC←PC+3,C←0;若Rn>data,则PC←PC+3+rel,C←0;若Rn<data,则PC←PC+3+rel,C←1CJNE@Ri,#data,rel;不相等转移

;若(Ri)=data,则PC←PC+3,C←0;若(Ri)>data,则PC←PC+3+rel,C←0;若(Ri)<data,则PC←PC+3+rel,C←1

ORG2000HCLRA

MOVR0,#30HLOOP0:CJNE@R0,#64H,LOOP1INCALOOP1:INCR0

CJNER0,#3FH,LOOP0SJMP

$例3.19在内部RAM30H~3EH中找出值为100(64H)的单元有多少个?MOVR1,#0FHDJNZR1,LOOP0DJNZdirect,rel;(direct)←(direct)-1;若(direct)≠0,则PC←PC+3+rel;若(direct)=0,则PC←PC+3DJNZRn,rel ;Rn

←Rn-1 ;若Rn=0则PC←PC+2 ;若Rn≠0则PC←PC+2+rel③减一不为零转移

ORG1000HMOVR0,#9CLRALOOP:ADDA,R0DJNZR0,LOOPSJMP$例3.20编程计算的值①调用指令(2条)ACALL

addr11;PC

←PC+2

;SP

←SP+1

;(SP)←PC7~0

;SP

←SP-1

;(SP)←

PC15~8

;PC10~0

addr11

a)短调用指令3)子程序调用和返回指令机器码:a10a9a810001a7a6a5a4a3a2a1a0双字节指令,不影响标志位,在2KB地址范围内寻址,以调用子程序。b)长调用指令LCALLaddr16;PC←PC+3;SP←

SP+1,(SP)←PC7~0;SP←SP+1,(SP)←PC15~8;PC

←addr16三字节指令,在64KB地址范围内调用子程序。②返回指令(2条)PC15~8

←(SP),SP←SP-1PC7~0

←(SP),SP←SP-1a)子程序返回指令

RET调用子程序后必须返回主程序,因此,每种子程序的最后一条指令必须是返回指令RET。返回时完成将调子时压入堆栈的断点地址送回PC以恢复断点功能。堆栈遵循“后进先出”原则。b)中断返回指令RETI中断服务程序的最后一条指令后是中断返回指令RETI。其恢复断点的操作与返回指令RET相同。此条指令前必须将相应的优先级状态触发器清0。PC15~8

←(SP),SP←

温馨提示

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

评论

0/150

提交评论