东北大学数字信号处理课件-第4章 TMS320C54x汇编指令系统_第1页
东北大学数字信号处理课件-第4章 TMS320C54x汇编指令系统_第2页
东北大学数字信号处理课件-第4章 TMS320C54x汇编指令系统_第3页
东北大学数字信号处理课件-第4章 TMS320C54x汇编指令系统_第4页
东北大学数字信号处理课件-第4章 TMS320C54x汇编指令系统_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

第4章TMS320C54x汇编指令系统4.1指令系统中的符号和缩写4.2指令系统4.3举例TMS320C54x的指令系统较普通微控制器的指令系统复杂,有许多特殊的指令及用法,需要加以注意!!!

CISC4.1指令系统中的符号和缩写序号符号含义1A累加器A2ALU算术逻辑运算单元3AR泛指辅助寄存器4ARx指定某一辅助寄存器AR0~AR75ARPST0中的3位辅助寄存器指针位6ASMST1中的5位累加器移位方式位(-16~15)7B累加器B8BRAFST1中的块重复有效标志9BRC块重复计数器10BITC或bit_code用于测试指令,指定数据存储器单元中的哪一位被测试,4位,取指范围:0~154.1指令系统中的符号和缩写序号符号含义11C16ST1中的双16位/双精度算术运算方式位12CST0中的进位位13CC2位条件码(0≤CC≤3)14CMPTST1中的兼容方式位15CPLST1中的编辑方式位16cond表示一种条件的操作数,用于条件执行指令17[d],[D]延迟选项18DABD地址总线19DARDAB地址寄存器20dmad16位立即数数据存储器地址(0~65535)4.1指令系统中的符号和缩写序号符号含义21Dmem数据存储器操作数22DPST0中的9位数据存储器页指针(0≤

DP≤511)23dst目的累加器(A或B)24dst_另一个目的累加器25EABE地址总线26EAREAB地址寄存器27extpmad23位立即数程序存储器地址28FRCTST1中的小数方式位29hi(A)累加器A的高阶位(AH)30HMST1中的保持方式位4.1指令系统中的符号和缩写序号符号含义31IFR中断标志寄存器32INTMST1中的中断屏蔽位33K少于9位的短立即数34k33位立即数(0≤

k3≤7)35k55位立即数(-16≤

k5≤15)36k99位立即数(0≤

k9≤511)37lk16位长立即数38Lmem利用长字寻址的32位单数据存储器操作数39mmr,MMR存储器映像寄存器40MMRx,MMRy存储器映像寄存器,AR0~AR7或SP4.1指令系统中的符号和缩写序号符号含义41nXC指令后面的字数,取1或242N指定状态寄存器,N=0为ST0,N=1为ST143OVAST0中的累加器A溢出标志44OVBST0中的累加器B溢出标志45OVdst目的累加器(A或B)的溢出标志46OVdst_另一个目的累加器的溢出标志47OVsrc源累加器(A或B)的溢出标志48OVMST1中的溢出方式位49PA16位立即数端口地址(0≤

PA≤65535)50PAR程序存储器地址寄存器4.1指令系统中的符号和缩写序号符号含义51PC程序计数器52pmad16位立即数程序存储器地址(0≤

pmad

65535)53Pmem程序存储器操作数54PMST处理器方式状态寄存器55prog程序存储器操作数56[R]舍入选项57rnd舍入58RC重复计数器59RTN快速返回寄存器60REA块重复结束地址寄存器4.1指令系统中的符号和缩写序号符号含义61RSA块重复起始地址寄存器62SBIT指定状态寄存器位的4位地址(0~15)63SHFT4位移位值(0~15)64SHIFT5位移位值(-16~15)65Sind间接寻址的单数据存储器操作数66Smem16位单数据存储器操作数67SP堆栈指针68src源累加器(A或B)69ST0,ST1状态寄存器0,状态寄存器170SXMST1中的符号扩展方式位4.1指令系统中的符号和缩写序号符号含义71T暂存器72TCST0中的测试/控制标志73TOS堆栈顶部74TRN状态转移寄存器75TS由T寄存器的5~0位所规定的移位数(-16~31)76uns无符号数77XFST1中的外部标志位78XPC程序计数器扩展寄存器79Xmem16位双数据存储器操作数,用于双数据操作数指令和某些单数据操作数指令80Ymem16位双数据存储器操作数,用于双数据操作数指令4.1指令系统中的符号和缩写序号符号运算功能求值顺序1+-~一元加法、减法、按位求反

从右至左2*/%乘法、除法、求模从左至右3+-加法、减法从左至右4^指数

从左到右

5<<>>左移、右移从左至右6<≤小于、小于等于从左至右7>≥大于、大于等于从左至右8!=不等于从左至右9&按位与运算从左至右10∧

按位异或运算从左至右11|按位或运算从左至右指令系统的运算符号 C54x的指令系统包含助记符指令和代数指令两种形式助记符指令: 是一种采用助记符号表示的类似于汇编语言的指令代数指令: 是一种比汇编语言更高级,类似于高级语言的代数形式指令,具有接近汇编语言的特点

两种指令形式具有相同的功能4.2指令系统基本指令129条,派生有205条按指令功能分为四类 算术运算 逻辑运算 程序控制 加载和存储4.2指令系统4.2指令系统TMS320C54x的指令表示方法 C54x的助记符指令是由操作码和操作数两部分组成LD#0FFh,A

;将立即数0FFH传送至A

操作码源操作数目的操作数注释4.2指令系统

LDSmem,SHIFT,dst

;dst=Smem<<SHIFT151413121110987654321001101111IAAAAAAA0000110D010SHIFTA:Smem的存储地址

D:目的累加器位D=0dst为累加器AD=1dst为累加器BSHIFT:移位数区移位范围:-16~15I=0:直接寻址,A…A:指令中dma的低7位I=1:间接寻址,3位选择ARx,4位选择MODMOD=15,*(lk),增加一个字4.2指令系统 学习指令应注意的事项:指令功能操作数寻址方式影响指令执行的状态位指令的执行结果指令对状态位的影响指令的长度指令的周期数指令的限制条件指令的使用场合4.2指令系统4.2.1算术运算指令4.2.2逻辑运算指令4.2.3程序控制指令4.2.4加载和存储指令TMS320C54xDSPReferenceSetVolume2:MnemonicInstructionSetLiteratureNumber:SPRU172BJune19984.2.1算术运算指令C54x的算术运算指令 加法指令(ADD) 减法指令(SUB) 乘法指令(MPY) 乘累加指令(MAC) 乘法减法指令(MAS) 双字/双精度运算指令(DADD、DSUB) 专用指令(ABDST、SQDST)序号语法表达式说明1ADDSmem,srcsrc=src+Smem操作数加至累加器2ADDSmem,TS,srcsrc=src+Smem<<TS操作数移位后加至累加器3ADDSmem,16,src[,dst]dst=src+Smem<<16操作数左移16位加至累加器4ADDSmem,[,SHIFT],src[,dst]dst=src+Smem<<SHIFT操作数移位后加至累加器5ADDXmem,SHFT,src

src=src+Xmem<<SHFT操作数移位后加至累加器6ADDXmem,Ymem,dstdst=Xmem<<16+Ymem<<16两操作数分别左移16位后相加至累加器7ADD#lk,[,SHFT],src[,dst]dst=src+#lk<<SHFT长立即数移位后加至累加器8ADD#lk,16,src[,dst]dst=src+#lk<<16长立即数左移16位加至累加器9ADDsrc,[,SHIFT][,dst]dst=dst+src<<SHIFT累加器移位后相加10ADDsrc,ASM[,dst]dst=dst+src<<ASM累加器按ASM移位后相加11ADDCSmem,srcsrc=src+Smem+C操作数带进位加至累加器12ADDM#lk,SmemSmem=Smem+#lk长立即数加至存储器13ADDSSmem,srcsrc=src+uns(Smem)操作数符号位不扩展加至累加器加法指令(ADD)减法指令(SUB)序号语法表达式说明1SUBSmem,srcsrc=src-Smem从累加器中减去操作数2SUBSmem,TS,srcsrc=src-Smem<<TS从累加器中减去移位后的操作数3SUBSmem,16,src[,dst]dst=src-Smem<<16累加器减去左移16位的操作数4SUBSmem,[,SHIFT],src[,dst]dst=src-Smem<<SHIFT操作数移位后与累加器相减5SUBXmem,SHFT,src

src=src-Xmem<<SHFT操作数移位后与累加器相减6SUBXmem,Ymem,dstdst=Xmem<<16-Ymem<<16两操作数分别左移16位后相减送至累加器7SUB#lk,[,SHFT],src[,dst]dst=src-#lk<<SHFT长立即数移位后与累加器相减8SUB#lk,16,src[,dst]dst=src-#lk<<16长立即数左移16位与累加器相减9SUBsrc,[,SHIFT][,dst]dst=dst-src<<SHIFT目标累加器减去移位后的源累加器10SUBsrc,ASM[,dst]dst=dst-src<<ASM源累加器按ASM移位与目标累加器相减11SUBBSmem,srcsrc=src-Smem-C累加器与操作数带借位减操作12SUBCSmem,srcIf(src-Smem<<15)>0,src=(src-Smem<<15)<<1+1Elsesrc=src<<1条件减法操作13SUBSSmem,srcsrc=src-uns(Smem)累加器与符号位不扩展的操作数减操作乘法指令(MPY)序号语法表达式说明1MPYSmem,dstdst=T*SmemT寄存器与操作数相乘2MPYRSmem,dstdst=rnd(T*Smem)T寄存器与操作数带舍入相乘3MPYXmem,Ymem,dst

dst=Xmem*Ymem,T=Xmem两操作数相乘4MPYSmem,#lk,dstdst=Smem*#lk,T=Smem长立即数与操作数相乘5MPY#lk,dstdst=T*#lk长立即数与T寄存器相乘6MPYAdstdst=T*A(32-16)T寄存器与累加器A高位相乘7MPYASmemB=Smem*A(32-16),T=Smem操作数与累加器A高位相乘8MPYUSmem,dstdst=uns(T)*uns(Smem)无符号数相乘9SQURSmem,dstdst=Smem*Smem,T=Smem操作数的平方10SQURA,dstdst=A(32-16)*A(32-16)累加器A高位的平方乘累加指令(MAC)和乘法减法指令(MAS)序号语法表达式说明1MAC

Smem,srcsrc=src+T*Smem操作数与T相乘加到累加器2MACXmem,Ymem,src[,dst]dst=src+Xmem*Ymem,T=Xmem两操作数相乘加到累加器3MAC#lk,src[,dst]dst=src+T*#lk长立即数与T相乘加到累加器4MAC

Smem,#lk,src[,dst]dst=src+Smem*#lk,T=Smem长立即数与操作数相乘加到累加器5MACRSmem,srcsrc=rnd(src+T*Smem)操作数与T相乘加到累加器(带舍入)6MACRXmem,Ymem,src[,dst]dst=rnd(src+Xmem*Ymem),T=Xmem两操作数相乘加到累加器(带舍入)7MACASmem[,B]B=B+Smem*A(32-16),T=Smem操作数与累加器A高位相乘加到累加器B8MACAT,src[,dst]dst=src+T*A(32-16)T与A的高位相乘加到累加器乘累加指令(MAC)和乘法减法指令(MAS)序号语法表达式说明9MACARSmem[,B]B=rnd(B+Smem*A(32-16)),T=Smem操作数与累加器A高位相乘加到累加器B(带舍入)10MACART,src[,dst]dst=rnd(src+T*A(32-16))T与A高位相乘加到累加器(带舍入)11MACDSmem,Pmad,srcsrc=src+Smem*Pmad,T=Smem,(Smem+1)=Smem操作数与程序存储器内容相乘后加到累加器并延迟12MACPSmem,Pmad,srcsrc=src+Smem*Pmad,T=Smem操作数与程序存储器内容相乘后加到累加器13MACSUXmem,Ymem,srcsrc=src+uns(Xmem)*Ymem,T=Xmem无符号操作数与有符号操作数相乘后加到累加器14MAS

Smem,srcsrc=src-T*Smem累加器减去T与操作数的乘积15MASXmem,Ymem,src[,dst]dst=src-Xmem

*Ymem,T=Xmem累加器减去两操作数的乘积乘累加指令(MAC)和乘法减法指令(MAS)序号语法表达式说明16MASRXmem,Ymem,src[,dst]dst=rnd(src-Xmem*Ymem),T=Xmem累加器减去两操作数的乘积(带舍入)17MASRSmem,srcsrc=rnd(src-T*Smem)累加器减去T与操作数的乘积(带舍入)18MASASmem[,B]B=B-Smem*A(32-16),T=Smem累加器B减去操作数与累加器A高位的乘积19MASAT,src[,dst]dst=src-T*A(32-16)累加器减去T与A高位的乘积20MASART,src[,dst]dst=rnd(src-T*A(32-16))累加器减去T与A高位的乘积(带舍入)21SQURASmem,srcsrc=src+Smem*Smem,T=Smem操作数的平方与累加器相加22SQURSSmem,srcsrc=src-Smem*Smem,T=Smem操作数的平方与累加器相减专用指令(ABDST、SQDST)序号语法表达式说明1ABDSTXmem,YmemB=B+|A(32-16)|,A=(Xmem-Ymem)<<16绝对距离2ABSsrc[,dst]dst=|src|累加器求绝对值3CMPLsrc[,dst]dst=~src累加器求反4DELAYSmem(Smem+1)=Smem存储单元延迟5EXPsrcT=带符号数(src)-8求累加器的指数6FIRSXmem,Ymem,PmadB=B–A*Pmad,A=(Xmem+Ymem)<<16对称FIR滤波7LMSXmem,YmemB=B+Xmem*Ymem,A=(A+Xmem<<16)+215求最小均方值专用指令(ABDST、SQDST)序号语法表达式说明8MAXdstdst=max(A,B)求A和B的最大值9MINdstdst=min(A,B)求A和B的最小值10NEGsrc[,dst]dst=-src累加器变负11NORMsrc[,dst]dst=src<<TS,dst=norm(src,T)归一化12POLYSmem

B=Smem<<16,A=rnd(A*T+B)求多项式的值13RNDsrc[,dst]dst=src+215累加器舍入运算14SATsrc

Saturate(src)累加器饱和运算15SQDSTXmem,Ymem

B=B+A(32-16)*A(32-16)A=(Xmem-Ymem)<<16求距离的平方4.2.2逻辑运算指令逻辑指令 与(AND) 或(OR) 异或(XOR)

移位 测试与(AND)序号语法表达式说明1ANDSmem,srcsrc=src&Smem源操作数与累加器与运算2AND#lk[,SHFT],src[,dst]dst=src&#lk<<SHFT长立即数移位后与累加器与运算3AND#lk,16,src[,dst]dst=src&#lk<<16长立即数左移16位与累加器与运算4ANDsrc[,SHIFT][,dst]dst=dst&src<<SHIFT源累加器移位后与目标累加器与运算5ANDM#lk,SmemSmem=Smem&#lk目标操作数与长立即数与运算或(OR)序号语法表达式说明1ORSmem,srcsrc=src|Smem源操作数与累加器或运算2OR#lk[,SHFT],src[,dst]dst=src|#lk<<SHFT长立即数移位后与累加器或运算3OR#lk,16,src[,dst]dst=src|#lk<<16长立即数左移16位与累加器或运算4ORsrc[,SHIFT][,dst]dst=dst|src<<SHIFT源累加器移位后与目标累加器或运算5ORM#lk,SmemSmem=Smem|#lk目标操作数与长立即数或运算异或(XOR)序号语法表达式说明1XORSmem,srcsrc=src

Smem源操作数与累加器异或运算2XOR#lk[,SHFT],src[,dst]dst=src

#lk<<SHFT长立即数移位后与累加器异或运算3XOR#lk,16,src[,dst]dst=src

#lk<<16长立即数左移16位与累加器异或运算4XORsrc[,SHIFT][,dst]dst=dst

src<<SHIFT源累加器移位后与目标累加器异或运算5XORM#lk,SmemSmem=Smem

#lk目标操作数与长立即数异或运算移位指令测试指令4.2.3程序控制指令程序控制指令 分支转移指令 子程序调用指令 中断指令 返回指令 重复指令 堆栈操作指令 混合程序控制指令分支转移指令子程序调用指令中断指令返回指令重复指令序号语法表达式说明1RPTSmem重复单次,RC=Smem重复执行下条指令(Smem)+1次2RPT#K重复单次,RC=#K重复执行下条指令#K+1次3RPT#lk重复单次,RC=#lk重复执行下条指令#lk

+1次4RPTB[D]pmad块重复,RSA=PC+2[4],REA=pmad

重复执行程序块5RPTZdst,#lk重复单次,RC=#lk,dst=0重复执行下条指令#lk

+1次,累加器清零堆栈操作指令混合程序控制指令影响ST0,ST1,不影响PMST4.2.4加载和存储指令加载和存储指令 加载指令 存储指令 条件存储指令 并行加载和存储指令 并行加载和乘法指令 并行存储和加/减法指令 混合加载和存储指令加载指令存储器的内容或立即数赋给目的寄存器(A,B,或ST0,ST1位及位域)存储指令源操作数或立即数存入存储器或寄存器存储器映像寄存器MMR加载指令存储指令条件存储指令并行加载和存储指令并行加载和乘法指令并行存储和加/减法指令混合加载和存储指令(数据块传送指令)4.3举例例1ADD*AR3+,14,AADDSmem[,SHIFT],src[,dst]dst=src+Smem<<SHIFT;(AR3)<<14+A

A,AR3+1AR3运算:1500H<<14=1500H*4000H=0005400000H操作数移位后加到累加器4.3举例例2ADDA,-8,BADDsrc[,SHIFT][,dst]dst=dst+src<<SHIFT;A>>8+B

B运算:0000001200H>>8=0000000012H累加器移位后相加4.3举例例3ADD#4568H,8,A,BADD#lk[,SHFT],src[,dst]dst=src+#lk<<SHFT;#4568H<<8+AB运算:#4568H<<8=00456800H长立即数移位后加到累加器4.3举例例4ADD*AR2+,*AR2-,AADDXmem,Ymem,dstdst=Xmem<<16+Ymem<<16;(AR2)<<16+(AR2)<<16

A如果双操作数指令指向同一辅助寄存器,并且这两个操作数的寻址方式不同,按Xmod域所确定的方式寻址执行前:A=0000001200HAR2=0100H(00FFH)=1300H(0100H)=1400H(0101H)=1500H执行后:A=0028000000HAR2=0101HC=0双操作数分别左移16位后加到累加器4.3举例例5

ADDC*+AR2(5),AADDCSmem,srcsrc=src+Smem+C;AR2+5AR2;(AR2)+A+C

A带进位加4.3举例例6ADDM#0123BH,*AR4+ADDM#lk,SmemSmem=Smem+#lk;#123BH+(AR4)

(AR4);AR4=AR4+1长立即数加至存储器中4.3举例例7

ADDM#0F088H,*AR4+ADDM#lk,SmemSmem=Smem+#lk;#0F088H+(AR4)

(AR4);AR4=AR4+1OVM=0时结果如何?4.3举例例8 ADDS*AR2-,BADDSSmem,srcsrc=src+uns(Smem);B+uns(AR2)

B;AR2=AR2-1符号位不扩展的加法不受SXM位影响0100h0100h4.3举例例9SUB#12345,8,A,BSUB#lk[,SHFT],src[,dst]dst=src-#lk<<SHFT;A-#12345<<8

B运算:A-#12345<<8=0000001200H-3039H<<8=1200H-303900H=FFFFCFD900长立即数移位后与累加器相减4.3举例例10LD#8,DPLD#0006H,ASSBXCSUBB5,ASUBBSmem,srcsrc=src-Smem-/C;A-(@5)-/CA直接寻址执行前:DP=8A=0000000006HC=1@5=8*128+5=1029=0405H(0405H)=0008H执行后:A-(0405H)-0=FFFFFFFFFEH有借位,C=0带借位的减法4.3举例例11

LD#0041H,

BSTM#0100H,AR2STM#0110H,AR3ST#0007H,*AR2RPT#15SUBC*AR2,Bif(src-Smem<<15)>0

src=(src-Smem<<15)<<1+1else

src=src<<1STLB,*AR3+STHB,*AR3执行前:B=0000000041HAR2=0100HAR3=0110H(0100H)=0007H(0110H)=0000H(0111H)=0000H执行后:B=0000020009HAR2=0100HAR3=0111H(0100H)=0007H(0110H)=0009H(0111H)=0002H4.3举例例14整数乘法 LD#0030H,

ASTM#0100H,AR2ST#2000H,*AR2RSBXFRCTLD#2,DPLD0,T;LDSmem,TMPY#-2,AMPY#lk,dstdst=T*#lk执行后:A=2000H*0FFFEH=FFFFFFC000H

直接寻址(0100H)-->TT寄存器与长立即数相乘4.3举例例18 MAC*AR3+,*AR4+,A,BMACXmem,Ymem,src[,dst]dst=src+Xmem*YmemT=Xmem执行前:A=0000001000HB=0000000004HFRCT=1AR3=0100HAR4=0200H(0100H)=5678H(0200H)=1234H执行后:B=000C4C10C0HAR3=0101HAR4=0201HT=5678H两个操作数相乘后加到累加器5678H*1234H=6260060H6260060H<<1=C4C00C0H4.3举例例28 DADD*AR3+,A,BDADDLmem,src,[,dst]ifC16=0

dst=Lmem+srcelse dst(39~16)=Lmem(31~16)+src(31~16) dst(15~0)=Lmem(15~0)+src(15~0)执行前:A=0056788933HB=0000000000HAR3=0100HC16=0(0100H)=1534H(0101H)=9456H执行后B=006BAD1D89HAR3=0102H

双字/双精度位数加到累加器4.3举例例29 DADD*AR3+,A,BDADDLmem,src,[,dst]ifC16=0

dst=Lmem+srcelse dst(39~16)=Lmem(31~16)+src(31~16) dst(15~0)=Lmem(15~0)+src(15~0)执行前:A=0056788933HB=0000000000HAR3=0100HC16=1(0100H)=1534H(0101H)=9456H执行后:B=006BAC1D89HAR3=0102H

4.3举例例30 ABDST*AR3+,*AR4+

ABDSTXmem,YmemB=B+|A(32~16)|A=(Xmem-Ymem)<<164.3举例例31 FIRS*AR3+,*AR4+,COEFFS

FIRSXmem,Ymem,pmadB=B+A(32~16)*pmadA=(Xmem+Ymem)<<16执行前:A=0000770000HB=0000000000HAR3=0100HAR4=0200H(0100H)=0055H(0200H)=00AAH(COEFFS)=1234HFRCT=0执行后:A=0000FF0000H

B=000008762CHAR3=0101HAR4=0201HFRCT=1,结果如何?4.3举例例32 SFTAA,-8,B

SFTAsrc,SHIFT[,dst]

dst=src<<SHIFT ifSHIFT<0then C=src((-SHIFT)-1)

dst=src(39~0)<<SHIFT ......执行前:A=FF87650055HB=0043211234HC=0SXM=1执行后:A=FF87650055HB=FFFF876500HC=A(7)=0SXM=1SXM=0,结果如何?累加器算术移位4.3举例例36 BIT*AR5+,15-12

BITXmem,BITC TC=Xmem(15-BITC)Xmem?4.3举例例37 CMPR2,AR4

CMPRCC,ARx 0≤

CC≤3 CC=0,ARx=AR0(EQ) CC=1,ARx<AR0(LT) CC=2,ARx>AR0(GT) CC=3,ARx!=AR0(NEQ)

If(cond)thenTC=1elseTC=0无符号数比较4.3举例例38LOOP: ADD*AR1+,A BANZLOOP,*AR2-

BANZpmad,Sind if((ARx)!

温馨提示

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

评论

0/150

提交评论