书签 分享 收藏 举报 版权申诉 / 36
上传文档赚钱

类型[工学]zz-ARM汇编伪指令课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3571420
  • 上传时间:2022-09-19
  • 格式:PPT
  • 页数:36
  • 大小:246.04KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《[工学]zz-ARM汇编伪指令课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    工学 zz ARM 汇编 指令 课件
    资源描述:

    1、zhaiQYARM伪指令ARM汇编语言的伪操作ARM汇编语言的宏指令ARM汇编语言的伪指令ARM汇编语言程序设计主要内容两种常见的ARM编译开发环境ADS/SDT、RealView MDK等等ARM公公司推出的开发工具司推出的开发工具lADS由由ARM公司推出公司推出,使用了使用了CodeWarrior公司的编译器。针对公司的编译器。针对ARM资源配置为用户提供资源配置为用户提供了在了在 CodeWarrior IDE 集成环境下配置各集成环境下配置各种种ARM 开发工具的能力。开发工具的能力。l 以以ARM为目标平台的工程创建向导,可以使为目标平台的工程创建向导,可以使用户以此为基础,快速创

    2、建用户以此为基础,快速创建ARM和和Thumb工工程。程。两种常见的ARM编译开发环境ADS/SDT、RealView MDK等等ARM公公司推出的开发工具司推出的开发工具ARM 将将Keil 公司收购之后公司收购之后,正式推出了针对正式推出了针对ARM 微控制器的开发工具微控制器的开发工具Real View MDK 或者或者MDK,它将,它将ARM 开发工具开发工具RealView Development Suite(简称简称RVDS)的编译的编译器器RVCT 与与Keil的工程管理、调试仿真工具集的工程管理、调试仿真工具集成在一起,是一款非常强大的成在一起,是一款非常强大的ARM 微控制器

    3、微控制器开发工具。开发工具。两种常见的ARM编译开发环境GNU ARM开发工具开发工具lGNU是是“GNUs Not Unix”的递归缩写。的递归缩写。在在1983年年9月月27日由日由Richard Stallman公公开发起开发起GNU计划,它的目标是创建一套完全自计划,它的目标是创建一套完全自由的操作系统。由的操作系统。lGNU格式格式ARM汇编语言程序主要是面对在汇编语言程序主要是面对在ARM平台上移植嵌入式平台上移植嵌入式Linux操作系统,操作系统,GNU组织开发的基于组织开发的基于ARM平台的编译工具有平台的编译工具有主要由主要由GNU的汇编器的汇编器as,交叉汇编器交叉汇编器g

    4、cc和连和连接器接器ld组成。组成。ADS编译环境下的伪操作和宏指令 ADS编译环境下的伪操作可分为以下几类:l符号定义(Symbol Definition)伪操作 l数据定义(Data Definition)伪操作 l汇编控制(Assembly Control)伪操作 l信息报告(Reporting)伪操作 l其他(Miscellaneous)伪操作 符号定义伪操作 伪操作伪操作语法格式语法格式作作 用用GBLAGBLA Variable声明一个全局的算术变量,并将其初始化成声明一个全局的算术变量,并将其初始化成0。GBLLGBLL Variable声明一个全局的逻辑变量,并将其初始化成声明

    5、一个全局的逻辑变量,并将其初始化成FALSE。GBLSGBLS Variable声明一个全局的字符串变量,并将其初始化成空串声明一个全局的字符串变量,并将其初始化成空串“”“”。LCLALCLA Variable声明一个局部的算术变量,并将其初始化成声明一个局部的算术变量,并将其初始化成0。LCLLLCLL Variable声明一个局部的逻辑变量,并将其初始化成声明一个局部的逻辑变量,并将其初始化成FALSE。LCLSLCLS Variable声明一个局部的串变量,并将其初始化成空串声明一个局部的串变量,并将其初始化成空串“”“”。SETASETA Variable expr给一个全局或局部算

    6、术变量赋值。给一个全局或局部算术变量赋值。SETLSETL Variable expr给一个全局或局部逻辑变量赋值。给一个全局或局部逻辑变量赋值。SETSSETS Variable expr给一个全局或局部字符串变量赋值。给一个全局或局部字符串变量赋值。RLISTn a m e L I S T l i s t o f registers为一个通用寄存器列表定义名称。为一个通用寄存器列表定义名称。CNname CN expr为一个协处理器的寄存器定义名称。为一个协处理器的寄存器定义名称。CPname CP expr为一个协处理器定义名称。为一个协处理器定义名称。DN/SNname DN/SN e

    7、xprDN/SN为一个双精度为一个双精度/单精度的单精度的VFP寄存器定义名称。寄存器定义名称。FNname FN expr为一个为一个FPA浮点寄存器定义名称。浮点寄存器定义名称。数据定义伪操作 伪操作伪操作语法格式语法格式作作 用用LTORGLTORG声明一个数据缓冲池(也称为文字池)的开始。声明一个数据缓冲池(也称为文字池)的开始。MAPMAP expr,base-register定义一个结构化的内存表(定义一个结构化的内存表(Storage Map)的首地址。)的首地址。FIELDlabel FIELD expr定义一个结构化内存表中的数据域。定义一个结构化内存表中的数据域。SPACE

    8、label SPACE expr分配一块连续内存单元,并用分配一块连续内存单元,并用0初始化。初始化。DCBlabel DCB expr,expr分配一段字节内存单元,并用分配一段字节内存单元,并用expr初始化。初始化。D C D/DCDUlabel DCD expr,expr分配一段字内存单元。分配一段字内存单元。DCDOlabel DCDO expr,expr分配一段字对齐的字内存单元。分配一段字对齐的字内存单元。D C F D/DCFDUlabel DCFD Ufpliteral,fpliteral为双精度的浮点数分配字对齐的内存单元。为双精度的浮点数分配字对齐的内存单元。D C F

    9、S/DCFSUlabel DCFS U fpliteral,fpliteral为单精度的浮点数分配字对齐的内存单元。为单精度的浮点数分配字对齐的内存单元。DCIlabel DCI expr,expr在在ARM代码中分配一段字对齐的内存单元代码中分配一段字对齐的内存单元;在在Thumb代代码中,分配一段半字对齐的半字内存单元。码中,分配一段半字对齐的半字内存单元。D C Q/DCQUlabel DCQUl i t e r a l ,literal分配一段以双字(分配一段以双字(8个字节)为单位的内存个字节)为单位的内存D C W/DCWUlabel DCWUexpr,exprDCW用于分配一段半

    10、字对齐的半字内存单元。用于分配一段半字对齐的半字内存单元。汇编控制伪操作 伪操作伪操作语法格式语法格式作作 用用IF,ELSE及及ENDIFIF logical expressionELSEENDIF能够根据条件把一段源代码包能够根据条件把一段源代码包括在汇编语言程序内或者将其括在汇编语言程序内或者将其排除在程序之外。排除在程序之外。WHILE及及WENDWHILE logical expressionWEND能够根据条件重复汇编相同的能够根据条件重复汇编相同的一段源代码。一段源代码。MACRO、M E N D 及及MEXITMACRO$label macroname$parameter,$p

    11、arameter;宏代码;宏代码MENDMACRO标识宏定义的开始,标识宏定义的开始,MEND标识宏定义的结束。标识宏定义的结束。MERIT用于从用于从宏中跳转出去。用宏中跳转出去。用MACRO和和MEND定义的一段代码,称为宏定义体。定义的一段代码,称为宏定义体。通过宏名称来调用宏。通过宏名称来调用宏。信息报告伪操作 伪操作伪操作语法格式语法格式作作 用用ASSERTA S S E R T l o g i c a l expression对汇编程序的第二遍扫描中,如果其中对汇编程序的第二遍扫描中,如果其中ASSERT中条件不成立,中条件不成立,ASSERT伪操作将报告该错误信伪操作将报告该错

    12、误信息。息。INFOI N F O n u m e r i c-expression,string-expression在汇编处理过程的第一遍扫描或者第二遍扫描时在汇编处理过程的第一遍扫描或者第二遍扫描时INFO伪操作报告诊断信息。伪操作报告诊断信息。OPTOPT n通过通过OPT伪操作可以在源程序中设置列表选项。伪操作可以在源程序中设置列表选项。TTL TTL title在列表文件的每一页的开头插入一个标题。在列表文件的每一页的开头插入一个标题。SUBTSUBT subtitle在列表文件的每一页的开头插入一个子标题。在列表文件的每一页的开头插入一个子标题。伪操作伪操作语法格式语法格式作作

    13、用用CODE16CODE16说明后面的指令序列为说明后面的指令序列为16位的位的Thumb指令指令CODE32CODE32说明说明后面的指令序列为后面的指令序列为32位的位的ARM指令。指令。EQUname EQU expr,type定义一个字符名称定义一个字符名称,类似于类似于C语言中的语言中的define宏定义。宏定义。AREAAREA sectionname,attr,attr定义一个代码段或者数据段。定义一个代码段或者数据段。ENTRYENTRY指定程序的入口点。指定程序的入口点。ENDEND说明到了源程序结尾。说明到了源程序结尾。ALIGNALIGN expr,offset通过添加补

    14、丁字节使当前位置满足一定的对齐方式。通过添加补丁字节使当前位置满足一定的对齐方式。EXPORT/GLOBALEXPORT symbol WEAK声明一个符号可以被其他文件引用声明一个符号可以被其他文件引用.IMPORTIMPORT symbol WEAK说明说明当前的符号不是在本源文件中定义的,而是在其他源文件中定当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。义的,在本源文件中可能引用该符号。EXTERNEXTERN symbol WEAK说明说明当前的符号不是在本源文件中定义的,而是在其他源文件中定当前的符号不是在本源文件中定义的,而是在其他源文件中

    15、定义的,在本源文件中可能引用该符号。义的,在本源文件中可能引用该符号。GET/INCLUDEGET filename 将一个源文件包含到当前源文件中,并将被包含的文件在其当前位将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。置进行汇编处理。INCBININCBIN filename将一个文件包含到当前源文件中,被包含的文件不进行汇编处理。将一个文件包含到当前源文件中,被包含的文件不进行汇编处理。KEEPKEEPsymbol说明说明将局部符号包含在目标文件的符号表中。将局部符号包含在目标文件的符号表中。NOFPNOFP禁止源程序中包含浮点运算指令。禁止源程序中包含浮点运

    16、算指令。REQUIREREQUIRE lable指定段之间的相互依赖关系。指定段之间的相互依赖关系。RNname RN expr为一个特定的寄存器定义名称。为一个特定的寄存器定义名称。ROUTname ROUT定义局部变量的有效范围。定义局部变量的有效范围。其他伪操作GNUGNU编译环境下的伪操作和宏指令 GNU编译环境下的伪操作可分为以下几类:l常量编译控制伪操作l汇编程序代码控制伪操作l宏及条件编译控制伪操作l其他伪操作常量编译控制伪操作伪操作伪操作语法格式语法格式作作 用用.byte.byte expr,expr 分配一段字节内存单元,并用分配一段字节内存单元,并用expr初始化。初始化

    17、。.hword/.short.h w o r d e x p r ,expr 分配一段半字内存单元,并用分配一段半字内存单元,并用expr初始化。初始化。.ascii.ascii expr,expr 定义字符串定义字符串expr(非零结束符)。(非零结束符)。.asciz/.string.asciz expr,expr 定义字符串定义字符串expr(以(以/0为结束符)。为结束符)。.float/.single.float expr,expr 定义一个定义一个32bit IEEE 浮点数浮点数expr。.double.double expr,expr 定义定义64bit IEEE浮点数浮点数e

    18、xpr。word/.long/.int.w o r d e x p r ,expr 分配一段字内存单元,并用分配一段字内存单元,并用expr初始化。初始化。.fill.fill repeat,size,value分配一段字节内存单元,用分配一段字节内存单元,用size长度长度value填充填充repeat次。次。.zero.zero size分配一段字节内存单元,并用分配一段字节内存单元,并用0填充内存。填充内存。.space/.skip.space size,value分配一段内存单元,用分配一段内存单元,用value将内存单元初始化。将内存单元初始化。汇编程序代码控制伪操作 伪操作伪操作语

    19、法格式语法格式作作 用用.section.section expr定义域中包含的段。定义域中包含的段。.text.text subsection将操作符开始的代码编译到代码段或代码段子段。将操作符开始的代码编译到代码段或代码段子段。.data.data subsection将操作符开始的数据编译到数据段或数据段子段。将操作符开始的数据编译到数据段或数据段子段。.bss.bss subsection将变量存放到将变量存放到.bss段或段或.bss段的子段。段的子段。.code 16/.thumb.code 16.thumb表明当前汇编指令的指令集选择表明当前汇编指令的指令集选择Thumb指令集。

    20、指令集。.code 32/.arm.code 32.arm表明当前汇编指令的指令集选择表明当前汇编指令的指令集选择ARM指令集。指令集。.end.end标记汇编文件的结束行,即标号后的代码不作处理。标记汇编文件的结束行,即标号后的代码不作处理。.include.include “filename”将一个源文件包含到当前源文件中。将一个源文件包含到当前源文件中。.align/.balign.align alignment ,fill ,max通过添加填充字节使当前位置满足一定的对齐方式。通过添加填充字节使当前位置满足一定的对齐方式。宏及条件编译控制伪操作 伪操作伪操作语法格式语法格式作作 用用.

    21、macro、.e x i t m及及.endm.macro acronameparameter,parameter.endm.m a c r o 伪 操 作 标 识 宏 定 义 的 开伪 操 作 标 识 宏 定 义 的 开始,始,.e n d m 标 识 宏 定 义 的 结 束。标 识 宏 定 义 的 结 束。用用.macro及及.endm定义一段代码,称为定义一段代码,称为宏定义体。宏定义体。.exitm伪操作用于提前退出伪操作用于提前退出宏。宏。.ifdef,.else及及.endif.ifdef condition.else.endif当满足某条件时对一组语句进行编译,当满足某条件时对一

    22、组语句进行编译,而当条件不满足时则编译另一组语句。而当条件不满足时则编译另一组语句。其中其中else可以缺省。可以缺省。其他伪操作 伪操作语法格式作 用.eject.eject在汇编符号列表文件中插入一分页符。.list.list产生汇编列表(从.list 到.nolist)。.nolist.nolist表示汇编列表结束处。.title.title “heading”使用“heading”作为标题。.sbttl.sbttl “heading”使用“heading”作为子标题。.ltorg.ltorg在当前段的当前地址(字对齐)产生一个文字池。.req.req name,expr为一个特定的寄存

    23、器定义名称。.err.err使编译时产生错误报告。.print.print string打印信息到标准输出。.fail.fail expr编译汇编文件时产生警告。汇编语言伪指令汇编语言伪指令伪指令是伪指令是ARM处理器支持的汇编语言程序处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间里的特殊助记符,它不在处理器运行期间由机器执行由机器执行,只是在汇编时将被合适的机器只是在汇编时将被合适的机器指令代替成指令代替成ARM或或Thumb指令指令,从而实现从而实现真正的指令操作。真正的指令操作。ARM汇编语言语句格式 ARM汇编语言语句格式如下所示:symbol instruction|d

    24、irective|pseudo-instruction ;comment 其中:instructioninstruction为指令。directivedirective为伪操作。pseudo-instructionpseudo-instruction为伪指令。symbolsymbol为符号。commentcomment为语句的注释。ARM汇编语言的伪指令 伪指令伪指令语法格式语法格式作作 用用ADRA D R c o n d register,expr将基于将基于PC或基于寄存器的地址值读取到或基于寄存器的地址值读取到寄存器中。小范围的地址读取。寄存器中。小范围的地址读取。ADRLADRL c

    25、ond register,expr将基于将基于PC或基于寄存器的地址值读取到或基于寄存器的地址值读取到寄存器中。中等范围的地址读取。寄存器中。中等范围的地址读取。LDRL D R c o n d register,=expr|label-expr将一个将一个32位的立即数或者一个地址值读位的立即数或者一个地址值读取到寄存器中。大范围的地址读取。取到寄存器中。大范围的地址读取。NOPNOP在汇编时将被替换成在汇编时将被替换成ARM中的空操作。中的空操作。ARM汇编语言伪指令汇编语言伪指令 1大范围地址读取伪指令大范围地址读取伪指令LDRLDR伪指令将一个伪指令将一个32位的常数或者一个地位的常数

    26、或者一个地址值读取到寄存器中,可以看作是加载寄址值读取到寄存器中,可以看作是加载寄存器的内容。存器的内容。LDRcond register,=expression 如果加载的常数符合如果加载的常数符合MOV或或MVN指令立指令立即数的要求,则用即数的要求,则用MOV或或MVN指令替代指令替代LDR伪指令。伪指令。如果加载的常数不符合如果加载的常数不符合MOV或或MVN指令指令立即数的要求,汇编器将常量放入内存文立即数的要求,汇编器将常量放入内存文字池,并使用一条程序相对偏移的字池,并使用一条程序相对偏移的LDR指指令从内存文字池读出常量。令从内存文字池读出常量。伪指令语句:伪指令语句:LDRR

    27、0,=0 x0AA00;R00 x0AA00汇编后:汇编后:MOV R0,#435202中等范围地址读取伪指令中等范围地址读取伪指令ADRL它将基于它将基于PC相对偏移的地址值或基于寄存相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。器相对偏移的地址值读取到寄存器中。ADRLcond register,=expression汇编器在处理源程序时,汇编器在处理源程序时,ADRL伪指令被伪指令被两条具有两条具有ADRL等同功能的等同功能的ARM指令指令(通通常用常用ADD或或SUB指令指令)替代。替代。如果不能用两条指令实现如果不能用两条指令实现ADRL伪指令的伪指令的功能,则编译器报

    28、告错误,编译失败。功能,则编译器报告错误,编译失败。以下指令存放在以下指令存放在0 x8000起始的地址单元,分析汇编后的结果。起始的地址单元,分析汇编后的结果。.global _start.text_start:MOVR0,#0 x0FADRL R0,_start.end解:汇编后的结果为:解:汇编后的结果为:0 x00008000MOV R0,#0 x0F0 x00008004SUB R0,PC,#120 x00008008NOP (MOV R0,R0)3小范围地址读取伪指令小范围地址读取伪指令ADR它将基于它将基于PC相对偏移的地址值或基于寄存相对偏移的地址值或基于寄存器相对偏移的地址值

    29、读取到寄存器中。当器相对偏移的地址值读取到寄存器中。当地址是字节对齐时,取值范围为地址是字节对齐时,取值范围为-255+255 ADRcond register,=expression下列指令存放在下列指令存放在0 x8000起始的地址单元,分析汇编后的结果。起始的地址单元,分析汇编后的结果。.global _start.text_start:MOVR0,#0 x0FADRR0,_start.end解:汇编后的结果为:解:汇编后的结果为:0 x00008000MOV R0,#0 x0F0 x00008004SUB R0,PC,#124空操作伪指令空操作伪指令NOPNOP是空操作伪指令,在汇编时

    30、将会被替是空操作伪指令,在汇编时将会被替代成代成ARM中的空操作中的空操作.Thumb汇编语言伪指令汇编语言伪指令 1大范围地址读取伪指令大范围地址读取伪指令LDRLDR伪指令将一个伪指令将一个32位的常数或者一个地位的常数或者一个地址值读取到寄存器中,可以看作是加载寄址值读取到寄存器中,可以看作是加载寄存器的内容。其语法格式如下:存器的内容。其语法格式如下:LDR register,=expression2小范围地址读取伪指令小范围地址读取伪指令ADRADR为小范围地址读取伪指令,它将基于为小范围地址读取伪指令,它将基于PC相对偏移的地址值读取到寄存器中。偏相对偏移的地址值读取到寄存器中。偏

    31、移量必须是正数并小于移量必须是正数并小于1KB。ADR register,=expression相当于相当于PC寄存器或其它寄存器的长转移。寄存器或其它寄存器的长转移。汇编器在处理源程序时,汇编器在处理源程序时,ADR伪指令一条伪指令一条具有具有ADR等同功能的等同功能的thumb指令指令(通常用通常用ADD或或SUB指令指令)替代。替代。如果不能用一条指令实现如果不能用一条指令实现ADR伪指令的功伪指令的功能,则编译器报告错误,编译失败。能,则编译器报告错误,编译失败。3空操作伪指令空操作伪指令NOP NOP是空操作伪指令,在汇编时将会被替是空操作伪指令,在汇编时将会被替代成代成ARM中的空

    32、操作(也就是什么也没做)中的空操作(也就是什么也没做)指令,例如可能为:指令,例如可能为:“MOVR0,R0”NOP空操作伪指令可用于延时操作。空操作伪指令可用于延时操作。ARM汇编语言程序格式 ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。源程序的基本结构举例AREA EXAMPLE,CODE,READONLYENTRYstartMOV r0,#10MOV r1,#

    33、3ADD r0,r0,r1END本程序的程序体部分实现了一个简单的加法运算。源程序的基本结构举例/*Memory Setup stuff-taken from blob memsetup.S*/#include#include#define BWSCON0 x48000000/*BWSCON*/#define DW8(0 x0)#define DW16(0 x1)_TEXT_BASE:.wordTEXT_BASE.globl lowlevel_initlowlevel_init:/*memory control configuration*/*make r0 relative the curr

    34、ent location so that it*/*reads SMRDATA out of FLASH rather than memory!*/ldr r0,=SMRDATAldrr1,=lowlevel_initsubr0,r0,r1adrr3,lowlevel_init/*r3-current position of code */add r0,r0,r3ldrr1,=BWSCON/*Bus Width Status Controller*/add r2,r0,#13*4源程序的基本结构举例0:ldr r3,r0,#4str r3,r1,#4cmp r2,r0bne 0b/*everything is fine now*/movpc,lr.ltorg/*the literal pools origin*/SMRDATA:.word(0+(B1_BWSCON4)+(B2_BWSCON8)+(B3_BWSCON12)+(B4_BWSCON16)+(B5_BWSCON20)+(B6_BWSCON24)+(B7_BWSCON28).word 0 x30 .word 0 x30

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:[工学]zz-ARM汇编伪指令课件.ppt
    链接地址:https://www.163wenku.com/p-3571420.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库