四、ARM汇编语言伪指令_第1页
四、ARM汇编语言伪指令_第2页
四、ARM汇编语言伪指令_第3页
四、ARM汇编语言伪指令_第4页
四、ARM汇编语言伪指令_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、1TMARM汇编语言伪指令汇编语言伪指令nARM汇编语言程序里,除了指令集,还有一些汇编语言程序里,除了指令集,还有一些特殊的指令助记符,称作特殊的指令助记符,称作伪指令伪指令;伪指令所完;伪指令所完成的操作称作成的操作称作伪操作伪操作;其作用主要是为完成汇;其作用主要是为完成汇编程序做各种准备工作(定义数据、分配存储编程序做各种准备工作(定义数据、分配存储区,中断向量表,程序初始化等)区,中断向量表,程序初始化等),对源程序运对源程序运行汇编程序处理行汇编程序处理,而不是在计算机运行期间由处而不是在计算机运行期间由处理器执行。理器执行。(区别)(区别)n伪操作只是汇编过程中起作用伪操作只是汇

2、编过程中起作用,一旦汇编结束一旦汇编结束,伪操作也就随之消失。伪操作也就随之消失。2TMn目前常用的编译环境有目前常用的编译环境有2种:种:n1.ADS/SDT、RealViewMDK等等ARM公公司推出的开发工具司推出的开发工具n2.GNUARM开发工具开发工具3TMn1.ADS/SDT、RealViewMDK等等ARM公司推出公司推出的开发工具的开发工具nADS由由ARM公司推出公司推出,使用了使用了CodeWarrior公司的公司的编译器。针对编译器。针对ARM资源配置为用户提供了在资源配置为用户提供了在CodeWarriorIDE集成环境下配置各种集成环境下配置各种ARM开发开发工具的

3、能力。工具的能力。n以以ARM为目标平台的工程创建向导,可以使用户为目标平台的工程创建向导,可以使用户以此为基础,快速创建以此为基础,快速创建ARM和和Thumb工程。工程。4TMnARM将将Keil公司收购之后公司收购之后,正式推出了针对正式推出了针对ARM微控制器的开发工具微控制器的开发工具RealViewMicrocontrollerDevelopmentKit(简称简称RealViewMDK或者或者MDK),它将,它将ARM开发工具开发工具RealViewDevelopmentSuite(简称简称RVDS)的编译器的编译器RVCT与与Keil的工程管理、调试仿真工具集成在一起,是的工程

4、管理、调试仿真工具集成在一起,是一款非常强大的一款非常强大的ARM微控制器开发工具。微控制器开发工具。5TMn2.GNUARM开发工具开发工具nGNU是是“GNUsNotUnix”的递归缩写。在的递归缩写。在1983年年9月月27日由日由RichardStallman公开发起公开发起GNU计划,计划,它的目标是创建一套完全自由的操作系统。它的目标是创建一套完全自由的操作系统。nGNU格式格式ARM汇编语言程序汇编语言程序主要是主要是面对在面对在ARM平平台上移植嵌入式台上移植嵌入式Linux操作系统操作系统,GNU组织开发的组织开发的基于基于ARM平台的编译工具有主要由平台的编译工具有主要由G

5、NU的汇编器的汇编器as,交叉汇编器交叉汇编器gcc和连接器和连接器ld组成。组成。6TM7TM示例解析示例解析n.global_startn.textn.equaa,0 xAABBCCDD ;将将0 xAABBCCDD定义成符号定义成符号aan.equbb,_start;将程序标号将程序标号_start定义成符号定义成符号bbn_start:nMOVR0,#0 x0FnADDR0,R0,#1n示例解析示例解析GNU8TMnGLOBLStartnCODE32naaEQU0 xAABBCCDD;将将0 xAABBCCDD定义成符号定义成符号aanbbEQU Start;将程序标号将程序标号_st

6、art定义成符号定义成符号bbnStartnMOVR0,#0 x0FnADDR0,R0,#1n示例解析示例解析ARM标准汇编标准汇编9TMARM汇编语言伪指令汇编语言伪指令n指导性伪指令(指示符)指导性伪指令(指示符)n数据定义伪指令数据定义伪指令n输出报告型伪指令输出报告型伪指令n符号定义伪指令符号定义伪指令n汇编语言控制伪指令汇编语言控制伪指令n与与ARM汇编语言组合的伪指令汇编语言组合的伪指令10TMn该类伪指令是该类伪指令是ARM处理器处理器支持的汇编语言程支持的汇编语言程序里的特殊助记符,它不在处理器运行期间序里的特殊助记符,它不在处理器运行期间由机器执行由机器执行,只是在汇编时将被

7、合适的机器指只是在汇编时将被合适的机器指令代替成令代替成ARM或或Thumb指令指令,从而实现真正从而实现真正的指令操作。的指令操作。(与编译器无关)(与编译器无关)与与ARM汇编语言组合的伪指令汇编语言组合的伪指令11TM指导性伪指令指导性伪指令(1)AREA功能功能:指示汇编器:指示汇编器汇编一段新的代码或数据区。汇编一段新的代码或数据区。在汇编时,必须至少有一个在汇编时,必须至少有一个ARME指示符。指示符。格式格式:AREAname,attr,其中:其中:name给出的特定段名。以数字打头,必须加竖线给出的特定段名。以数字打头,必须加竖线否则,将报错。否则,将报错。例如:例如:|1-D

8、ata-Area|12TM指导性伪指令指导性伪指令(1)AREAattr段名属性段名属性下列属性是有效的:下列属性是有效的:ALIGN=expression缺省状态下,段将按缺省状态下,段将按4个字节对个字节对准,准,expression可以是可以是2-31之间的整数,该段之间的整数,该段2expression字节对准。例如,字节对准。例如,expression等于等于10,该段将按,该段将按1KB对对准。准。CODE代码段,缺省为代码段,缺省为READONLYCOMDEF通用段定义。该段可包括代码和数据,在多通用段定义。该段可包括代码和数据,在多个源文件中同名的个源文件中同名的COMDEF段

9、必须相同段必须相同COMMON通用数据段,不能定义任何代码和数据,通用数据段,不能定义任何代码和数据,通常由链接器初始化为零通常由链接器初始化为零13TM指导性伪指令指导性伪指令(1)AREADATA包含数据,但不包含指令,缺省包含数据,但不包含指令,缺省READWRIT。INTERWORK表明代码段可以适用表明代码段可以适用ARM/Thumbinterworking功能。功能。NOINIT表明数据段初始化为零,只为指示符保留空间表明数据段初始化为零,只为指示符保留空间READONLY表明该段只读。表明该段只读。READWRITE表明该段可读可写。表明该段可读可写。例:例:AREAExampl

10、e,CODE,READONLY14TM指导性伪指令指导性伪指令(2)END功能功能:表示源程序的结束。所有汇编语言源文:表示源程序的结束。所有汇编语言源文件必须以件必须以END结束结束。格式格式:END(3)ENTRY功能功能:指向汇编程序的入口点,至少一个:指向汇编程序的入口点,至少一个一个源文件中只能有一个一个源文件中只能有一个ENTRY格式格式:ENTRY例:例:AREAARMex,CODE,RAEDONLYENTRY15TM指导性伪指令指导性伪指令(2)CODE16功能功能:指示汇编器将随后的指令作为:指示汇编器将随后的指令作为16位位的的Thumb指令解释执行。指令解释执行。格式格式

11、:CODE16例例:AREAThumbEX,CODE,READONLY;ARM代码的开始代码的开始ADRR0,Start+1BXR0;设置转移设置转移/交换指令交换指令CODE16;以下指令为;以下指令为Thumb指令指令StartMOVR1,#10;Thumb指令指令16TM指导性伪指令指导性伪指令(3)CODE32功能功能:指示汇编器将随后的指令作为:指示汇编器将随后的指令作为32位位ARM指令解释执行指令解释执行格式格式:CODE32例例:CODE16;Thumb指令的开始指令的开始AREAThumbEx,CODE,READONLYMOVR1,#10;Thumb指令指令ADRR0,Gua

12、rmBXR0;设置转移设置转移/交换指令交换指令CODE32;以下为以下为ARM指令指令GuarmMOVR4,#15;ARM指令指令17TM数据定义伪指令数据定义伪指令(1)DATA定义此标号是程序内的数据区定义此标号是程序内的数据区例:例:AREAexample,CODEThumb-fn;MOVpc,lrThumb-DataDATADCB1,3,418TM数据定义伪指令数据定义伪指令(2)DCB或或“=”功能功能:分配一个或多个字节分配一个或多个字节.(3)DCD或或“&”功能功能:分配一个或多个字分配一个或多个字,从从4个字节边界开始个字节边界开始.(4)DCW功能功能:分配一个或

13、多个半字以半字边界开始的内存分配一个或多个半字以半字边界开始的内存区域区域.19TMn分配字节存储单元分配字节存储单元DCBn语法格式语法格式nlabelDCB expr,exprn其中:其中:nlabel可选的程序标号可选的程序标号;nexpr是是-128255之间的数字或字符串。之间的数字或字符串。20TMn分配半字存储单元分配半字存储单元DCW及及DCWUn语法格式语法格式nlabel DCWexpr,exprnlabel DCWUexpr,exprn其中:其中:nlabel可选的程序标号可选的程序标号;nexpr是是-3276865535之间的数字表达式之间的数字表达式。21TMn分配

14、字存储单元分配字存储单元DCD及及DCDUn语法格式语法格式nlabelDCD expr,exprnlabel DCDUexpr,exprn其中:其中:nlabel可选的程序标号可选的程序标号;nexpr表达式。表达式。22TMStrDCB“Thisisatest!”C_stringDCB“C_string”,0DataTestDCW1,2,3DataTESTDCD4,5,6DataDCW2*number23TM数据定义伪指令数据定义伪指令(5)SPACE或或“%”功能功能:分配一片连续的存储区域并初始化为分配一片连续的存储区域并初始化为0.DataSpaceSPACE100AREAMydat

15、a,DATA,READWRITEdata1SPACE25524TMn分配存储空间分配存储空间SPACEn语法格式语法格式nlabelSPACEexprn其中:其中:nlabel可选的程序标号可选的程序标号;nexpr分配的字节数。分配的字节数。25TM数据定义伪指令数据定义伪指令(6)ALIGN功能功能:通过添加填充字节的方式,使当前位置满足通过添加填充字节的方式,使当前位置满足一定的对齐方式一定的对齐方式.ALIGN=4与与ALIGN16等价等价16B边界对齐边界对齐P7626TM数据定义伪指令数据定义伪指令AREAoffsetExample,CODEDCB1;第一个字节第一个字节ALIGN

16、4,3;字对齐;字对齐DCB1;第四个字节;第四个字节将两个字节数据放在同一个字的第一个字节和第四个将两个字节数据放在同一个字的第一个字节和第四个字节字节,带带offset的的ALIGN对齐对齐ALIGNexpr,offset:offset+n*expr27TM数据定义伪指令数据定义伪指令(7)DCFD功能功能:用于为双精度的浮点数分配字对齐的内存单用于为双精度的浮点数分配字对齐的内存单元。每个双精度浮点数占两个字单元元。每个双精度浮点数占两个字单元DCFD1E308,-4E-100(8)DCFS功能功能:用于为用于为单单精度的浮点数分配字对齐的内存单精度的浮点数分配字对齐的内存单元。每个元。

17、每个单单精度浮点数占精度浮点数占1个字单元个字单元DCFS1E3,-4E-928TMn分配单精度浮点数存储单元分配单精度浮点数存储单元DCFS及及DCFSUn语法格式语法格式nlabel DCFSfpliteral,fpliteralnlabel DCFSUfpliteral,fpliteraln其中:其中:nlabel可选的程序标号可选的程序标号;nfpliteral单精度浮点表达式,取值范围:单精度浮点表达式,取值范围:1.17549435e-383.4028234e+38。29TMn分配双精度浮点数存储单元分配双精度浮点数存储单元DCFD及及DCFDUnlabel DCFDfpliter

18、al,fpliteralnlabel DCFDUfpliteral,fpliteraln其中:其中:nlabel可选的程序标号可选的程序标号;nfpliteral双精度浮点表达式,取值范围:双精度浮点表达式,取值范围:2.22507385850720138e-3081.7976931348623157e+308。30TM数据定义伪指令数据定义伪指令(9)MAP或或功能功能:定义一个结构化的内存表首地址定义一个结构化的内存表首地址(10)FIELD或或#功能功能:定义一个结构化的内存表的数据域定义一个结构化的内存表的数据域MAP0,r9FIELD4LabFIELD4LDRr0,LabLDRr0,

19、r9,#431TMn定义结构化内存表首地址定义结构化内存表首地址MAPn语法格式语法格式nMAPexpr,base_registern其中:其中:n结构化内存表的首地址为结构化内存表的首地址为expr与与base_register之和。之和。32TMn定义结构化内存表数据域定义结构化内存表数据域FIELDn语法格式语法格式nlabelFIELDexprn其中:其中:nlabel可选的程序标号,当指定这一选项时,可选的程序标号,当指定这一选项时,label的值为当前内存表的位置计数器的值;的值为当前内存表的位置计数器的值;nexprFIELD指定的域所占内存单元字节数。指定的域所占内存单元字节数

20、。33TMn栈八字节对齐栈八字节对齐REQUIRE8和和PRESERVE8n语法格式语法格式:nREQUIRE8boolnPRESERVE8boolnbool是一个可选布尔常数,取值为是一个可选布尔常数,取值为TRUE或或FALSE。nREQUIRE8指令指定当前文件要求堆栈八字节对齐指令指定当前文件要求堆栈八字节对齐PRESERVE8指令指定当前文件保持堆栈八字节对齐指令指定当前文件保持堆栈八字节对齐34TM输出报告型伪指令输出报告型伪指令(1)ASSERT功能功能:可在编译的第二遍扫描输出一条错误信息可在编译的第二遍扫描输出一条错误信息ASSERTlogical-expressionASS

21、ERTlabel1=label2;不满足条件,报告错误类型,并终止汇编不满足条件,报告错误类型,并终止汇编信息报告伪操作用于程序汇编指示,主要是在程序调试阶段使用。信息报告伪操作用于程序汇编指示,主要是在程序调试阶段使用。35TM输出报告型伪指令输出报告型伪指令(2)INFO或!或!功能功能:在汇编处理过程中第一遍扫描或第二遍扫描在汇编处理过程中第一遍扫描或第二遍扫描时报告诊断信息时报告诊断信息INFOnumeric-expression, string-expression,severity如果如果numeric-expression为为0,则在汇编处理中,则在汇编处理中,第二遍扫描时,伪操

22、作打印,第二遍扫描时,伪操作打印string-expression;如果;如果numeric-expression不为不为0,则在汇编处理中,第一遍扫描时,伪操作打,则在汇编处理中,第一遍扫描时,伪操作打印印string-expression,并终止汇编,并终止汇编36TM输出报告型伪指令输出报告型伪指令(2)INFO或!或!INFO0,“Version1.0”;IFendofdata=label1INFO4,Dataoverrunatlabel1ENDIF第二遍扫描报告版本第二遍扫描报告版本如果如果endofdata=label1成立,在第一遍扫描时成立,在第一遍扫描时报告错误信息,并终止汇

23、编报告错误信息,并终止汇编37TM37符号定义伪指令符号定义伪指令n局部变量定义局部变量定义LCLA、LCLL及及LCLSn语法格式语法格式nLCLA variable(数字变量,初始化(数字变量,初始化0)nLCLLvariable(逻辑变量,初始化(逻辑变量,初始化F)nLCLSvariable(字符串变量,初始化空)(字符串变量,初始化空)n其中:其中:nvariable所说明的局部变量名称。所说明的局部变量名称。38TM38n全局变量定义全局变量定义GCLA、GCLL及及GCLSn语法格式语法格式nGCLA variable数字变量数字变量nGCLL variable逻辑变量逻辑变量n

24、GCLS variable字符串变量字符串变量n其中:其中:nvariable所说明的全局变量名称。在整个程所说明的全局变量名称。在整个程序范围内变量名必须唯一序范围内变量名必须唯一39TM39n变量赋值伪操作变量赋值伪操作SETA、SETL及及SETSn语法格式语法格式nvariable_aSETAexpr_a数字变量数字变量nvariable_lSETLexpr_l逻辑变量逻辑变量nvariable_sSETSexpr_s字符串变字符串变量量例例P78-7940TM40n给通用寄存器列表定义名称给通用寄存器列表定义名称RLISTn语法格式语法格式nnameRLISTregisters_li

25、stn其中:其中:nname 寄存器列表的名称;寄存器列表的名称;nregisters_list通用寄存器列表。通用寄存器列表。41TM41nRegListRLISTR0-R5,R8,R10nContextRLISTR0-R6,R10-R12,R15寄存器编号按升序排列寄存器编号按升序排列可在可在ARM指令指令LDM/STM中通过该名称访问中通过该名称访问寄存器列表寄存器列表42TM42定义常量或标号名称定义常量或标号名称EQU或或“*”功能功能:对一个数字常量赋予一个符号名:对一个数字常量赋予一个符号名格式格式:nameEQUexpression其中:其中:name符号名符号名express

26、ion寄存器相关或者程序相关的固寄存器相关或者程序相关的固定值定值例:例:numEQU2;数字数字2赋予符号赋予符号num43TM43n声明全局标号声明全局标号EXPORT或或GLOBAL(同义词同义词)nEXPORT指令声明一个全局的符号,可由链指令声明一个全局的符号,可由链接器用于解析不同的对象和库文件中的符号接器用于解析不同的对象和库文件中的符号引用。引用。GLOBAL是是EXPORT的同义词。的同义词。n语法格式语法格式:nEXPORTsymbolWEAK,attrnGLOBALsymbolWEAK,attr44TM44AREAOSCtxSW_CODE32,CODE,READONLYE

27、XPORTOSCtxSwOSCtxSwstmfdsp!,lrstmfdsp!,r0-r12,lrmrsr4,cpsrstmfdsp!,r4mrsr4,spsrstmfdsp!,r4END45TM45nWEAK:声明其他的同名标号优于该标号被引用。声明其他的同名标号优于该标号被引用。nattr:(在其他文件中引用和定义情况):(在其他文件中引用和定义情况)DYNAMIC(默认、引用、定义)、(默认、引用、定义)、HIDDEN(无引(无引用)、用)、PROTECTED(引用,无定义)(引用,无定义)nWEAK属性可与任何符号可见性属性一起使用。属性可与任何符号可见性属性一起使用。EXPORTSym

28、AWEAK;Exportasweak-hiddenEXPORTSymADYNAMIC;SymAbecomesnon-weakdynamic.46TM46n外部符号声明外部符号声明IMPORT和和EXTERNn语法格式语法格式:nIMPORTsymbolattrnIMPORTsymbolWEAK,attrnEXTERNsymbolattrnEXTERNsymbolWEAK,attr47TM47n用于通知编译器要使用的标号已在其他的源用于通知编译器要使用的标号已在其他的源文件中定义,标号在程序中区分大小写文件中定义,标号在程序中区分大小写AREAInit,CODE,READONLYIMPORTMa

29、in;通知编译器当前文件要引用通知编译器当前文件要引用Main,但,但Main在其他源文件中定义在其他源文件中定义.END48TM48汇编代码控制伪指令汇编代码控制伪指令n汇编器在对程序代码进行编译时,会根据汇汇编器在对程序代码进行编译时,会根据汇编控制伪操作的定义情况对程序进行编译,编控制伪操作的定义情况对程序进行编译,常用的有条件编译、重复汇编和宏定义常用的有条件编译、重复汇编和宏定义49TM49nIF条件编译伪操作条件编译伪操作n语法格式:语法格式:nIFlogical_expressionn程序代码段程序代码段AnELSEn程序代码段程序代码段BnnENDIFP8350TM50nWHI

30、LE条件编译伪操作条件编译伪操作n语法格式:语法格式:nWHILElogical_expressionn程序代码段程序代码段nWENDP8451TM51nMACRO宏定义伪操作宏定义伪操作n语法格式:语法格式:nMACROn$labelmacroname$parameter,$parametern程序代码段程序代码段nMEND52TM52n带参数的宏定义带参数的宏定义$IRQ_LabelHANDLER$IRQ_Exception_FunctionEXPORT$IRQ_Label;输出的标号输出的标号IMPORT$IRQ_Exception_Function;引用的外部标号引用的外部标号$IRQ

31、_Label.BL$IRQ_Exception_FunctionMENDIRQ_Handler0HANDLERIRQ_Exception0IRQ_Handler1HANDLERIRQ_Exception1IRQ_Handler2HANDLERIRQ_Exception253TM53n文件包含文件包含GET或或INCLUDEn语法格式语法格式:nGETfilenamenINCLUDEfilenamenfilename是要在汇编中包含的文件名称。汇编程序是要在汇编中包含的文件名称。汇编程序接受接受UNIX或或MS-DOS格式的路径名。格式的路径名。n将一文件包含汇编语言中,与汇编语言一起被编译将一

32、文件包含汇编语言中,与汇编语言一起被编译P8754TM54n文件原样包含文件原样包含INCBINn语法格式语法格式:nINCBINfilenamenfilename是要在汇编中包含的文件名称。是要在汇编中包含的文件名称。汇汇编程序接受编程序接受UNIX或或MS-DOS格式的路径名格式的路径名n将一文件包含汇编语言中,但不会被编译将一文件包含汇编语言中,但不会被编译55TM55n伪指令是伪指令是ARM处理器支持的汇编语言程序里处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间由机的特殊助记符,它不在处理器运行期间由机器执行器执行,只是在汇编时将被合适的机器指令代只是在汇编时将被合适的机

33、器指令代替成替成ARM或或Thumb指令指令,从而实现真正的指从而实现真正的指令操作。令操作。56TM56与与ARM汇编语言组合的伪指令汇编语言组合的伪指令n1大范围地址读取伪指令大范围地址读取伪指令LDRnLDR伪指令将一个伪指令将一个32位的常数或者一个地址位的常数或者一个地址值读取到寄存器中,可以看作是加载寄存器值读取到寄存器中,可以看作是加载寄存器的内容。的内容。nLDRcond register,=expression57TM57n如果加载的常数符合如果加载的常数符合MOV或或MVN指令立即数指令立即数的要求,则用的要求,则用MOV或或MVN指令替代指令替代LDR伪指伪指令。令。n如

34、果加载的常数不符合如果加载的常数不符合MOV或或MVN指令立即指令立即数的要求,汇编器将常量放入内存文字池,数的要求,汇编器将常量放入内存文字池,并使用一条程序相对偏移的并使用一条程序相对偏移的LDR指令从内存指令从内存文字池读出常量。文字池读出常量。58TM58n伪指令语句:伪指令语句:nLDRR0, =0 x0AA00;R00 x0AA00n汇编后:汇编后:nMOV R0, #4352059TM59n2中等范围地址读取伪指令中等范围地址读取伪指令ADRLn它将基于它将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。相对偏移的地址值读取到寄存器

35、中。nADRLcondregister,=expression60TM60n汇编器在处理源程序时,汇编器在处理源程序时,ADRL伪指令被两伪指令被两条具有条具有ADRL等同功能的等同功能的ARM指令指令(通常用通常用ADD或或SUB指令指令)替代。替代。n如果不能用两条指令实现如果不能用两条指令实现ADRL伪指令的功伪指令的功能,则编译器报告错误,编译失败。能,则编译器报告错误,编译失败。61TM61n以下指令存放在以下指令存放在0 x8000起始的地址单元,分析汇编后的结果。起始的地址单元,分析汇编后的结果。n.global_startn.textn_start:nMOVR0,#0 x0FnADRLR0,_startn.endn解:汇编后的结果为:解:汇编后的结果为:n0 x00008000MOVR0

温馨提示

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

评论

0/150

提交评论