ARM汇编语言程序设计_第1页
ARM汇编语言程序设计_第2页
ARM汇编语言程序设计_第3页
ARM汇编语言程序设计_第4页
ARM汇编语言程序设计_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、ARM汇编语言程序设计伪指令与与伪操作作定义:在ARM汇编语语言程序序里,有有一些特特殊指令令助记符符,这些些助记符符与指令令系统的的助记符符不同,没有相相对应的的操作码码,通常常称这些些特殊指指令助记记符为伪伪指令,他们所所完成的的操作称称为伪操操作。 ARM汇汇编语言言程序设设计ARM汇编语言言程序设设计作用:伪指令在在源程序序中的作作用是为为完成汇汇编程序序作各种种准备工工作的,这些伪伪指令仅仅在汇编编过程中中起作用用,一旦旦汇编结结束,伪伪指令的的使命就就完成ARM汇编语言言程序设设计伪指令的的分类符号定义义伪指令令数据定义义伪指令令汇编控制制伪指令令和宏指指令其他伪指指令。ARM汇汇

2、编语言言程序设设计符号定义义(SymbolDefinition)伪指令令: 符号定义义伪指令令用于定定义ARM汇编程序序中的变变量、对对变量赋赋值以及及定义寄寄存器的的别名等等操作。常见的的符号定定义伪指指令有如如下几种种:用于定义义全局变变量的GBLA、GBLL和GBLS。用于定义义局部变变量的LCLA、LCLL和LCLS。用于对变变量赋值值的SETA、SETL、SETS。为通用寄寄存器列列表定义义名称的的RLIST。ARM汇汇编语言言程序设设计1、GBLA、GBLL和和GBLS语法格式式:GBLA(GBLL或或GBLS)全全局变变量名作用:GBLA、GBLL和和GBLS伪指指令用于于定义一

3、一个ARM程序序中的全全局变量量,并将将其初始始化。其其中:GBLA伪指令令用于定定义一个个全局的的数字变变量,并并初始化化为0;GBLL伪指令令用于定定义一个个全局的的逻辑变变量,并并初始化化为F(假);GBLS伪指令令用于定定义一个个全局的的字符串串变量,并初始始化为空空; 由于以上上三条伪伪指令用用于定义义全局变变量,因因此在整整个程序序范围内内变量名名必须唯唯一。ARM汇汇编语言言程序设设计1、GBLA、GBLL和和GBLS示例:GBLATest1;定义一一个全局局的数字字变量,变量名名为Test1Test1SETA 0 xaa;将该该变量赋赋值为0 xaaGBLLTest2;定义一一

4、个全局局的逻辑辑变量,变量名名为Test2Test2SETL TRUE;将该变变量赋值值为真GBLSTest3;定义一一个全局局的字符符串变量量,变量量名为Test3Test3 SETS“Testing” ;将将该变量量赋值为为“Testing”ARM汇汇编语言言程序设设计2.LCLA、LCLL和和LCLS语法格式式:LCLA(LCLL或或LCLS)局局部变变量名作用:LCLA、LCLL和和LCLS伪指指令用于于定义一一个ARM程序序中的局局部变量量,并将将其初始始化。其其中:LCLA伪指令令用于定定义一个个局部的的数字变变量,并并初始化化为0;LCLL伪指令令用于定定义一个个局部的的逻辑变变

5、量,并并初始化化为F(假);LCLS伪指令令用于定定义一个个局部的的字符串串变量,并初始始化为空空; 以上三条条伪指令令用于声声明局部部变量,在其作作用范围围内变量量名必须须唯一。ARM汇汇编语言言程序设设计2、LCLA、LCLL和和LCLS示例:LCLATest4;声明一一个局部部的数字字变量,变量名名为Test4Test4SETA 0 xaa;将该该变量赋赋值为0 xaaLCLLTest5;声明一一个局部部的逻辑辑变量,变量名名为Test5Test5SETL TRUE;将该变变量赋值值为真LCLSTest6;定义一一个局部部的字符符串变量量,变量量名为Test6Test6SETS “Tes

6、ting”;将该变变量赋值值为“Testing”ARM汇汇编语言言程序设设计3、SETA、SETL和和SETS语法格式式:变量名SETA(SETL或SETS) 表达达式作用:伪指令SETA、SETL、SETS用于于给一个个已经定定义的全全局变量量或局部部变量赋赋值。SETA伪指令令用于给给一个数数学变量量赋值;SETL伪指令令用于给给一个逻逻辑变量量赋值;SETS伪指令令用于给给一个字字符串变变量赋值值;其中,变变量名为为已经定定义过的的全局变变量或局局部变量量,表达达式为将将要赋给给变量的的值。ARM汇汇编语言言程序设设计3、SETA、SETL和和SETS示例:LCLATest3;声明一一个

7、局部部的数字字变量,变量名名为Test3Test3SETA 0 xaa;将该该变量赋赋值为0 xaaLCLLTest4;声明一一个局部部的逻辑辑变量,变量名名为Test4Test4SETL TRUE;将该变变量赋值值为真ARM汇汇编语言言程序设设计4、RLIST语法格式式:名称RLIST寄存器器列表作用:RLIST伪指指令可用用于对一一个通用用寄存器器列表定定义名称称,使用用该伪指指令定义义的名称称可在ARM指指令LDM/STM中中使用。在LDM/STM指指令中,列表中中的寄存存器访问问次序为为根据寄寄存器的的编号由由低到高高,而与与列表中中的寄存存器排列列次序无无关。使用示例例:RegLis

8、t RLIST R0-R5,R8,R10 ;将将寄存器器列表名名称定义义为RegList,可在ARM指指令LDM/STM中中通过该该名称访访问寄存存器列表表。ARM汇汇编语言言程序设设计符号定义义伪指令令数据定义义伪指令令汇编控制制伪指令令和宏指指令其他伪指指令。ARM汇汇编语言言程序设设计数据定义义(Data Definition)伪指令令: 数据定义义伪指令令一般用用于为特特定的数数据分配配存储单单元,同同时可完完成已分分配存储储单元的的初始化化。常见见的数据据定义伪伪指令有有如下几几种:DCB用用于于分配一一片连续续的字节节存储单单元并用用指定的的数据初初始化。DCW(DCWU)用用于分

9、分配一片片连续的的半字存存储单元元并用指指定的数数据初始始化。DCD(DCDU)用用于分配配一片连连续的字字存储单单元并用用指定的的数据初初始化。DCFD(DCFDU)用于于为双精精度的浮浮点数分分配一片片连续的的字存储储单元并并用指定定 的数数据初始始化。DCFS(DCFSU)用用于为单单精度的的浮点数数分配一一片连续续的字存存储单元元并用指指定的的数据初初始化。DCQ(DCQU)用用于分分配一片片以8字字节为单单位的连连续的存存储单元元并用指指定的数数据初始始化。SPACE用用于于分配一一片连续续的存储储单元MAP用用于定定义一个个结构化化的内存存表首地地址FIELD用用于定定义一个个结构

10、化化的内存存表的数数据域ARM汇汇编语言言程序设设计1、DCB语法格式式:标号DCB表表达式式作用:DCB伪伪指令用用于分配配一片连连续的字字节存储储单元并并用伪指指令中指指定的表表达式初初始化。其中,表达式式可以为为0255的的数字或或字符串串。DCB也可可用“=”代替替。使用示例例:StrDCB “This is atest!” ;分分配一片片连续的的字节存存储单元元并初始始化。ARM汇汇编语言言程序设设计2、DCW(或DCWU)语法格式式:标号DCW(或DCWU) 表达达式作用:DCW(或DCWU)伪指令令用于分分配一片片连续的的半字存存储单元元并用伪伪指令中中指定的的表达式式初始化化。

11、其中中,表达达式可以以为程序序标号或或数字表表达式。用DCW分配的字字存储单单元是半半字对齐齐的,而而用DCWU分配的字字存储单单元并不不严格半半字对齐齐。使用示例例:DataTestDCW1,2,3;分配一一片连续续的半字字存储单单元并初初始化。ARM汇汇编语言言程序设设计3、DCD(或DCDU)语法格式式:标号DCD(或DCDU) 表达达式作用:DCD(或DCDU)伪指令令用于分分配一片片连续的的字存储储单元并并用伪指指令中指指定的表表达式初初始化。其中,表达式式可以为为程序标标号或数数字表达达式。DCD也也可用“&”代代替。用DCD分配的的字存储储单元是是字对齐齐的,而而用DCDU分分配

12、的字字存储单单元并不不严格字字对齐。使用示例例:DataTestDCD4,5,6;分配配一片连连续的字字存储单单元并初初始化。ARM汇汇编语言言程序设设计4、DCFD(或DCFDU)语法格式式:标号DCFD(或DCFDU)表表达式式作用:DCFD(或DCFDU)伪伪指令用用于为双双精度的的浮点数数分配一一片连续续的字存存储单元元并用伪伪指令中中指定的的表达式式初始化化。每个个双精度度的浮点点数占据据两个字字单元。用DCFD分配配的字存存储单元元是字对对齐的,而用DCFDU分配配的字存存储单元元并不严严格字对对齐。使用示例例:FDataTestDCFD2E115,-5E7 ;分分配一片片连续的的

13、字存储储单元并并初始化化为指定定的双精精度数。ARM汇汇编语言言程序设设计5、DCFS(或DCFSU)语法格式式:标号DCFS(或DCFSU)表表达式式作用:DCFS(或DCFSU)伪伪指令用用于为单单精度的的浮点数数分配一一片连续续的字存存储单元元并用伪伪指令中中指定的的表达式式初始化化。每个个单精度度的浮点点数占据据一个字字单元。用DCFS分配配的字存存储单元元是字对对齐的,而用DCFSU分配配的字存存储单元元并不严严格字对对齐。使用示例例:FDataTestDCFS2E5,-5E7;分配配一片连连续的字字存储单单元并初初始化为为指定的的单精度度数。ARM汇汇编语言言程序设设计6、DCQ(

14、或DCQU)语法格式式:标号DCQ(或DCQU) 表达达式作用:DCQ(或DCQU)伪指令令用于分分配一片片以8个个字节为为单位的的连续存存储区域域并用伪伪指令中中指定的的表达式式初始化化。用DCQ分配的的存储单单元是字字对齐的的,而用用DCQU分配配的存储储单元并并不严格格字对齐齐。使用示例例:DataTestDCQ100 ;分分配一片片连续的的存储单单元并初初始化为为指定的的值。ARM汇汇编语言言程序设设计7、SPACE语法格式式:标号SPACE表表达式作用:SPACE伪指指令用于于分配一一片连续续的存储储区域并初始化化为0。其中,表达式式为要分分配的字字节数。SPACE也也可用“”代代替

15、。使用示例例:DataSpaceSPACE100 ;分分配连续续100字节的的存储单单元并初初始化为为0。ARM汇汇编语言言程序设设计8、MAP语法格式式:MAP表表达式式,基基址寄存存器作用:MAP伪伪指令用用于定义义一个结结构化的的内存表表的首地地址。MAP也也可用“”代代替。表达式可可以为程程序中的的标号或或数学表表达式,基址寄寄存器为为可选项项,当基基址寄存存器选项项不存在在时,表表达式的的值即为为内存表表的首地地址,当当该选项项存在时时,内存存表的首首地址为为表达式式的值与与基址寄寄存器的的和。MAP伪伪指令通通常与FIELD伪指指令配合合使用来来定义结结构化的的内存表表。使用示例例

16、:MAP0 x100,R0;定义义结构化化内存表表首地址址的值为为0 x100R0。ARM汇汇编语言言程序设设计9、FILED语法格式式:标号FIELD表表达式作用:FIELD伪指指令用于于定义一一个结构构化内存存表中的的数据域域。FILED也可用用“#”代替。表达式的的值为当当前数据据域在内内存表中中所占的的字节数数。FIELD伪指指令常与与MAP伪指令令配合使使用来定定义结构构化的内内存表。MAP伪伪指令定定义内存存表的首首地址,FIELD伪伪指令定定义内存存表中的的各个数数据域,并可以以为每个个数据域域指定一一个标号号供其他他的指令令引用。注意MAP和FIELD伪指指令仅用用于定义义数据

17、结结构,并并不实际际分配存存储单元元。ARM汇汇编语言言程序设设计9、FILED使用示例例:MAP0 x100;定义结构构化内存存表首地地址的值值为0 x100。A FIELD 16 ;定义A的的长度为为16字字节,位位置为0 x100B FIELD 32 ;定义B的的长度为为32字字节,位位置为0 x110S FIELD 256;定义S的长度度为256字节节,位置置为0 x130ARM汇汇编语言言程序设设计ARM汇汇编语言言程序设设计ARM汇汇编语言言程序设设计符号定义义伪指令令数据定义义伪指令令汇编控制制伪指令令和宏指指令其他伪指指令。ARM汇汇编语言言程序设设计汇编控制制(Assembl

18、y Control)伪指令令汇编控制制伪指令令用于控控制汇编编程序的的执行流流程,常常用的汇汇编控制制伪指令令包括以以下几条条: IF、ELSE、ENDIF WHILE、WEND MACRO、MEND MEXITARM汇汇编语言言程序设设计1、IF、ELSE、ENDIF语法格式式:IF逻逻辑表达达式指令序列列1ELSE指令序列列2ENDIF作用:IF、ELSE、ENDIF伪指令令能根据据条件的的成立与与否决定定是否执执行某个个指令序序列。当当IF后后面的逻逻辑表达达式为真真,则执执行指令令序列1,否则则执行指指令序列列2。其其中,ELSE及指令令序列2可以没没有,此此时,当当IF后后面的逻逻辑

19、表达达式为真真,则执执行指令令序列1,否则则继续执执行后面面的指令令。IF、ELSE、ENDIF伪指令令可以嵌嵌套使用用。ARM汇汇编语言言程序设设计1、IF、ELSE、ENDIF使用示例例:GBLL Test;声明一个个全局的的逻辑变变量,变变量名为为Test IFTest =TRUE指令序列列1ELSE指令序列列2ENDIFARM汇汇编语言言程序设设计2、WHILE、WEND语法格式式:WHILE逻逻辑表达达式指令序列列WEND作用:WHILE、WEND伪指令令能根据据条件的的成立与与否决定定是否循循环执行行某个指指令序列列。当WHILE后面面的逻辑辑表达式式为真,则执行行指令序序列,该该

20、指令序序列执行行完毕后后,再判判断逻辑辑表达式式的值,若为真真则继续续执行,一直到到逻辑表表达式的的值为假假。WHILE、WEND伪指令令可以嵌嵌套使用用。ARM汇汇编语言言程序设设计2、WHILE、WEND使用示例例:GBLA Counter;声明一个个全局的的数学变变量,变变量名为为CounterCounter SETA3;由变量量Counter控制制循环次次数 WHILECounter 10指令序列列WENDARM汇汇编语言言程序设设计3、MACRO、MEND语法格式式:$标号宏宏名$参数数1,$参数2,指令序列列MEND作用:MACRO、MEND伪指令令可以将将一段代代码定义义为一个个

21、整体,称为宏宏指令,然后就就可以在在程序中中通过宏宏指令多多次调用用该段代代码。其其中,$标号在在宏指令令被展开开时,标标号会被被替换为为用户定定义的符符号,宏指令可可以使用用一个或或多个参参数,当当宏指令令被展开开时,这这些参数数被相应应的值替替换。宏指令的的使用方方式和功功能与子子程序有有些相似似,子程序可可以提供供模块化化的程序序设计、节省存存储空间间并提高高运行速速度。但但在使用用子程序序结构时时需要保保护现场场,从而而增加了了系统的的开销,因此,在代码较较短且需需要传递递的参数数较多时时,可以以使用宏宏指令代代替子程程序。包含在MACRO和MEND之间的的指令序序列称为为宏定义义体,

22、在在宏定义义体的第第一行应应声明宏宏的原型型(包含含宏名、所需的的参数),然后后就可以以在汇编编程序中中通过宏宏名来调调用该指指令序列列。在源源程序被被编译时时,汇编编器将宏宏调用展展开,用用宏定义义中的指指令序列列代替程程序中的的宏调用用,并将将实际参参数的值值传递给给宏定义义中的形形式参数数。MACRO、MEND伪指令令可以嵌嵌套使用用。ARM汇汇编语言言程序设设计ARM汇汇编语言言程序设设计ARM汇汇编语言言程序设设计4、MEXIT语法格式式:MEXIT作用:MEXIT用于于从宏定定义中跳跳转出去去。ARM汇汇编语言言程序设设计符号定义义伪指令令数据定义义伪指令令汇编控制制伪指令令和宏指

23、指令其他伪指指令主要内容容:其他常用用的伪指指令还有一些些其他的的伪指令令,在汇汇编程序序中经常常会被使使用,包包括以下下几条: AREA ALIGN CODE16、CODE32 ENTRY END EQU EXPORT(或GLOBAL) IMPORT EXTERN GET(或INCLUDE) INCBIN RN ROUTARM汇汇编语言言程序设设计1、AREA语法格式式:AREA 段名名 属性性1,属属性2,作用:AREA伪指令令用于定定义一个个代码段段或数据据段。其其中,段段名若以以数字开开头,则则该段名名需用“|”括括起来,如|1_test|。属性字段段表示该该代码段段(或数数据段)的相

24、关关属性,多个属属性用逗逗号分隔隔。常用用的属性性如下: CODE属属性:用用于定义义代码段段,默认认为READONLY。 DATA属属性:用用于定义义数据段段,默认认为READWRITE。 READONLY属性:指定本本段为只只读,代代码段默默认为READONLY。 READWRITE属性性:指定定本段为为可读可可写,数数据段的的默认属属性为READWRITE。 ALIGN属性:使用方方式为ALIGN表表达式。在默认认时,ELF(可执行行连接文文件)的的代码段和和数据段段是按字字对齐的的,表达达式的取取值范围围为031,相应的的对齐方方式为2表达式式次方。 COMMON属性性:该属属性定义义

25、一个通通用的段段,不包包含任何何的用户户代码和和数据。各源文文件中同同名的COMMON段段共享同同一段存存储单元元。一个汇编编语言程程序至少少要包含含一个段段,当程程序太长长时,也也可以将将程序分分为多个个代码段段和数据据段。ARM汇汇编语言言程序设设计使用示例例:AREA Init,CODE,READONLY指令序列列;该伪指指令定义义了一个个代码段段,段名名为Init,属性为为只读ARM汇汇编语言言程序设设计2、ALIGN语法格式式:ALIGN表达式式,偏偏移量作用:ALIGN伪指指令可通通过添加加填充字字节的方方式,使使当前位位置满足足一定的的对其方方式|。其中,表达式式的值用用于指定定

26、对齐方方式,可可能的取取值为2的幂,如1、2、4、8、16等等。若未未指定表表达式,则将当当前位置置对齐到到下一个个字的位位置。偏偏移量也也为一个个数字表表达式,若使用用该字段段,则当当前位置置的对齐齐方式为为:2的的表达式式次幂偏移量量。使用示例例:AREA Init,CODE,READONLY,ALIEN3;指定后后面的指指令为8字节对齐。指令序列列ENDARM汇汇编语言言程序设设计3、CODE16、CODE32语法格式式:CODE16(或CODE32)作用:CODE16伪伪指令通通知编译译器,其其后的指指令序列列为16位的Thumb指令令。CODE32伪伪指令通通知编译译器,其其后的指指

27、令序列列为32位的ARM指指令。若在汇编编源程序序中同时时包含ARM指指令和Thumb指令令时,可可用CODE16伪指指令通知知编译器器其后的的指令序序列为16位的的Thumb指指令,CODE32伪伪指令通通知编译译器其后后的指令令序列为为32位位的ARM指令令。因此此,在使使用ARM指令令和Thumb指令混混合编程程的代码码里,可可用这两两条伪指指令进行行切换,但注意意他们只只通知编编译器其其后指令令的类型型,并不不能对处处理器进进行状态态的切换换。ARM汇汇编语言言程序设设计使用示例例:AREA Init,CODE,READONLY CODE32;通知知编译器器其后的的指令为为32位位的A

28、RM指令令LDRR0,NEXT1;将跳转转地址放放入寄存存器R0BXR0;程序跳跳转到新新的位置置执行,并将处处理器切切换到Thumb工作作状态 CODE16;通知知编译器器其后的的指令为为16位位的Thumb指令NEXT LDRR3,0 x3FF END;程序序结束ARM汇汇编语言言程序设设计4、ENTRY语法格式式:ENTRY作用:ENTRY伪指指令用于于指定汇汇编程序序的入口口点。在在一个完完整的汇汇编程序序中至少少要有一一个ENTRY(也可可以有多多个,当当有多个个ENTRY时时,程序序的真正正入口点点由链接接器指定定),但但在一个个源文件件里最多多只能有有一个ENTRY(可可以没有有

29、)。使用示例例:AREA Init,CODE,READONLYENTRY;指定应应用程序序的入口口点 ARM汇汇编语言言程序设设计5、END语法格式式:END作用:END伪伪指令用用于通知知编译器器已经到到了源程程序的结结尾。使用示例例:AREA Init,CODE,READONLY END;指定定应用程程序的结结尾ARM汇汇编语言言程序设设计6、EQU语法格式式:名称EQU表表达式式,类类型作用:EQU伪伪指令用用于为程程序中的的常量、标号等等定义一一个等效效的字符符名称,类似于于C语言言中的define。其中中EQU可用“*”代代替。名称为EQU伪伪指令定定义的字字符名称称,当表表达式为为

30、32位位的常量量时,可可以指定定表达式式的数据据类型,可以有有以下三三种类型型:CODE16、CODE32和DATA使用示例例:Test EQU50;定义标标号Test的的值为50Addr EQU0 x55,CODE32;定义Addr的值为为0 x55,且且该处为为32位位的ARM指令令。ARM汇汇编语言言程序设设计7、EXPORT(或GLOBAL)语法格式式:EXPORT标标号WEAK作用:EXPORT伪伪指令用用于在程程序中声声明一个个全局的的标号,该标号号可在其其他的文文件中引引用。EXPORT可可用GLOBAL代替替。标号号在程序序中区分分大小写写,WEAK选项项声明其其他的同同名标号

31、号优先于于该标号号被引用用。使用示例例:AREA Init,CODE,READONLYEXPORTStest;声明明一个可可全局引引用的标标号Stest ENDARM汇汇编语言言程序设设计8、IMPORT语法格式式:IMPORT标标号WEAK作用:IMPORT伪伪指令用用于通知知编译器器要使用用的标号号在其他他的源文文件中定定义,但但要在当当前源文文件中引引用,而而且无论论当前源源文件是是否引用用该标号号,该标标号均会会被加入入到当前前源文件件的符号号表中。标号在程程序中区区分大小小写,WEAK选选项表示示当所有有的源文文件都没没有定义义这样一一个标号号时,编编译器也也不给出出错误信信息,在在

32、多数情情况下将将该标号号置为0,若该该标号为为B或BL指令令引用,则将B或BL指令置置为NOP操作作。使用示例例:AREA Init,CODE,READONLYIMPORTMain;通知编编译器当当前文件件要引用用标号Main,但Main在其他他源文件件中定义义 ENDARM汇汇编语言言程序设设计9、EXTERN语法格式式:EXTERN标标号WEAK作用:EXTERN伪伪指令用用于通知知编译器器要使用用的标号号在其他他的源文文件中定定义,但但要在当当前源文文件中引引用,如如果当前前源文件件实际并并未引用用该标号号,该标标号就不不会被加加入到当当前源文文件的符符号表中中。标号在程程序中区区分大小小写,WEAK选选项表示示当所有有的源文文件都没没有定义义这样一一个标号号时,编编译器也也不给出出错误信信息,在在多数情情况下将将该标号号置为0,若该该标号为为B或BL指令令引用,则将B或BL指令置置为NO

温馨提示

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

最新文档

评论

0/150

提交评论