汇编语言程序设计的环境及步骤.DOC

上传人:天*** 文档编号:958500 上传时间:2018-11-09 格式:DOC 页数:161 大小:1.85MB
下载 相关 举报
汇编语言程序设计的环境及步骤.DOC_第1页
第1页 / 共161页
汇编语言程序设计的环境及步骤.DOC_第2页
第2页 / 共161页
汇编语言程序设计的环境及步骤.DOC_第3页
第3页 / 共161页
汇编语言程序设计的环境及步骤.DOC_第4页
第4页 / 共161页
汇编语言程序设计的环境及步骤.DOC_第5页
第5页 / 共161页
点击查看更多>>
资源描述

1、第一章 汇编语言程序设计的实验环境及实验步骤/ 你所查看的文档由 东北大学 20093660 提供 仅供参考 知识提要:本章主要进行汇编语言实验环境及实验步骤,涉及到的知识点包括:1、汇编语言源程序编写好以后, 必须经过下列几个步骤才能在机器上运行:(1) 编辑源程序(生成.ASM 文件)(2) 汇编源程序(.ASM .OBJ)(3) 连接目标程序(.OBJ .EXE )(4) 调试可执行程序(使用调试程序 Debug 调试生成的.EXE 文件)(5) 运行程序输出结果。2、 Windows 环境下的汇编语言集成编程环境的使用实验一 DOS 环境下的汇编语言编程环境使用(基础与验证型)一、实验

2、要求和目的1、掌握汇编语言程序设计的基本方法和技能;2、熟练掌握使用全屏幕编辑程序 EDIT 编辑汇编语言源程序;3、熟练掌握宏汇编程序 MASM 的使用;4、熟练掌握连接程序 LINK 的使用。二、软硬件环境1、硬件环境:微机 CPU 486 以上,500MB 以上硬盘,32M 以上内存;2、软件环境:装有 MASM 5.0、DEBUG、LINK、EDIT 、CREF.EXE 和 EXR2BIN.EXE 等应用程序。三、实验涉及的主要知识单元1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以 ASCII

3、 码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立 3 个文件:扩展名为 .OBJ 的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。目标文件是必须建立的,它包含了程序中所有的机器码指令和伪指令指出的各种有关信息,但该文件中的操作数地址还不是内存的绝对地址,只是一个可浮动的相对地址。列表文件(.LST)中包含了源程序的全部信息(包括注释)和汇编后的目标程序,列表文件可以打印输出,可供调试检查用。交叉索引文件(.CRF)是用来了解源程序中各符号的定义和引用情况的。.LST 和.CRF 两个文件不是必须建立的,可有有无,可以

4、通过汇编时的命令加以选择。在对源程序文件(ASM 文件)汇编时,汇编程序将对 ASM 文件进行两遍扫描,若程序文件中有语法错误,则结束汇编,汇编程序将指出源程序中存在的错误,这时应返回编辑环境修改源程序中的错误,再经过汇编,直到最后得到无错误的目标程序,即 OBJ 文件。因此,汇编程序的主要功能可以概括为以下三点: (1) 检查源程序中的语法错误,并给出错误信息; (2) 产生目标程序文件(OBJ 文件),并可给出列表文件(.LST 文件);(3) 展开宏指令。汇编程序是系统提供的用于汇编的系统软件,目前常用的汇编程序有 Microsoft 公司推出的宏汇编程 MASM(MACRO ASSEM

5、BLER)和 BORLAND 公司推出的 TASM(TURBO ASSEMBLER)两种。Microsoft 公司推出有宏汇编程序 MASM 和小汇编程序 ASM 两种,二者的区别在于:MASM 有宏处理功能,而 ASM 没有宏处理功能,因此,MASM 比 ASM 的功能强大,但 MASM 需要占据较大的内存空间,当内存空间较小时(如64 KB),只能使用 ASM。 2、目标程序的连接过程汇编后产生的目标程序(OBJ 文件)并不是可执行程序文件 (EXE 文件),还不能直接运行,它必须通过连接程序(LINK)连接成一个可执行程序后才能运行。连接程序进行连接时,其输入有两个部分:一是目标文件(.

6、OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以是高级语言(例如 C 语言)经编译后产生的目标文件;另一是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。连接后输出两个文件,一是扩展名为 .EXE 的可执行文件,另一个是扩展名为 .MAP 的内存分配文件,它是连接程序的列表文件,又称为连接映像(Link Map),它给出每个段在存储器中的分配情况,该文件可有可无。连接程序给出的“无堆栈段的警告性错误”并不影响程序的运行。所以,到此为止,连接过程已经结束,可以在操作系统下执行该.EXE 程序了。3、汇编语言和 DOS 操作系统的接口编写

7、的汇编语言源程序是在 DOS 环境下运行时,必须了解汇编语言是如何同 DOS 操作系统接口的。用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,用连接程序对其进行连接和定位时,操作系统为每一个用户程序建立了一个程序段前缀区 PSP,其长度为 256 个字节,主要用于存放所要执行程序的有关信息,同时也提供了程序和操作系统的接口。操作系统在程序段前缀的开始处(偏移地址 0000H)安排了一条 INT 20H 软中断指令。INT 20H 中断服务程序由 DOS 提供,执行该服务程序后,控制就转移到 DOS,即返回到 DOS 管理的状态。因此,用户在组织程序时,必须使程序执行完后能去执行存

8、放于 PSP 开始处的 INT 20H 指令,这样便返回到 DOS,否则就无法继续键入命令和程序。 DOS 在建立了程序段前缀区 PSP 之后,将要执行的程序从磁盘装入内存。在定位程序时,DOS 将代码段置于 PSP 下方,代码段之后是数据段,最后放置堆栈段。内存分配好之后, DOS 就设置段寄存器DS 和 ES 的值,以使它们指向 PSP 的开始处,即 INT 20H 的存放地址,同时将 CS 设置为 PSP 后面代码段的段地址,IP 设置为指向代码段中第一条要执行的指令位置,把 SS 设置为指向堆栈的段地址,让 SP指向堆栈段的栈底,然后系统开始执行用户程序。为了保证用户程序执行完后能返回

9、到 DOS 状态,可使用如下两种方法。 (一)标准方法首先将用户程序的主程序定义成一个 FAR 过程,其最后一条指令为 RET。然后在代码段的主程序(即 FAR 过程) 的开始部分用如下三条指令将 PSP 中 INT 20H 指令的段地址及偏移地址压入堆栈:PUSH DS ;保护 PSP 段地址MOV AX,0 ;保护偏移地址 0PUSH AX 这样,当程序执行到主程序的最后一条指令 RET 时,由于该过程具有 FAR 属性,故存在堆栈内的两个字就分别弹出到 CS 和 IP,从而执行 INT 20H 指令,使控制返回到 DOS 状态。返回 DOS 的标志就是程序运行完后出现一个 DOS 的标识

10、符,如 C:。 (二)非标准方法也可在用户的程序中不定义过程段,只在代码段结束之前(即 CODE ENDS 之前)增加两条语句:MOV AH,4CHINT 21H则程序执行完后也会自动返回 DOS 状态。 此外,由于开始执行用户程序时,DS 并不设置在用户的数据段的起始处,ES 同样也不设置在用户的附加段起始处,因而在程序开始处使用以下方法重新装填 DS 和 ES 的值使其指向用户的数据段:MOV AX,段名MOV 段寄存器名,AX ;段寄存器名可以是 DS、ES、SS 之一 四、实验内容与步骤1、实验内容编写程序,判断一个年份是否是闰年。2、实验步骤汇编语言程序设计上机过程如图 1.1 所示

11、。图 1.1 汇编语言程序上机过程(一)用编辑程序 EDIT 建立汇编语言源程序文件(ASM 文件)例如,编写程序,判断一个年份是否是闰年的汇编语言源程序,可以在 DOS 模式下用编辑程序EDIT.EXE 建立汇编语言源程序文件 ABC.ASM,注意文件名的扩展名必须是 .ASM。也可以在 Windows 2000 或者在 Windows XP 环境下鼠标单击 “开始”“运行 ”,在“运行”中输入“CMD”进入 DOS 模式,运行 EDIT 软件,例如:C EDIT ABC.ASM进入 EDIT 的程序编辑画面时,输入汇编语言源程序如下: DATA SEGMENTINFON DB 0DH,0A

12、H,Please input a year: $Y DB 0DH,0AH,This is a leap year! $N DB 0DH,0AH,This is not a leap year! $W DW 0BUF DB 8DB ?DB 8 DUP(?)DATA ENDSSTACK SEGMENT stackDB 200 DUP(0)(.ASM)EDIT(.OBJ)(.EX)LINK-STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA DX,INFONMOV AH,9INT 21

13、HLEA DX,BUFMOV AH,10INT 21HMOV CL, BUF+1LEA DI,BUF+2CALL DATACATECALL IFYEARSJC A1LEA DX,NMOV AH,9INT 21HJMP EXITA1: LEA DX,YMOV AH,9INT 21HEXIT: MOV AH,4CHINT 21HDATACATE PROC NEARLEA SI,BUF+2MOV BX,0X3:MOV AL ,SISUB AL ,30HMOV AH,0XCHG AX,BXMOV DX,10DMUL DXXCHG AX,BXADD BX,AXINC SILOOP X3MOV W,BXR

14、ETDATACATE ENDPIFYEARS PROC NEARPUSH BXPUSH CXPUSH DXMOV AX,WMOV CX,AXMOV DX,0MOV BX,4DIV BXCMP DX,0JNZ LAB1MOV AX,CXMOV BX,100DIV BXCMP DX,0JNZ LAB2MOV AX,CXMOV BX,400DIV BXCMP DX,0JZ LAB2LAB1: CLCJMP LAB3LAB2: STCLAB3: POP DXPOP CXPOP BXRETIFYEARS ENDPCODE ENDSEND START(二)用汇编程序 MASM 将 ASM 文件汇编成目标程

15、序文件(OBJ 文件)当源程序建立以后,仍以 ABC.ASM 程序为例,我们用汇编程序 MASM 对 ABC.ASM 源程序文件进行汇编,以便产生机器码的目标程序文件 ABC.OBJ,其操作步骤如下: CMASM ABCMicrosoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 19811985,1987. All rights reserved. Object filename ABC.OBJ:Source listing NUL.LST:ABCCross-reference NUL.CRF:ABC50674

16、+ 450574 Bytes symbol space free0 Warning Errors0 Severe Errors 由此可知,汇编程序调入后,首先显示版本号,然后出现三个提示行。第一个提示行为:Object filename ABC.OBJ:这是询问目标程序文件名,方括号内为机器规定的默认的文件名,通常直接按回车键,表示采用默认的文件名(如上所示),这是我们汇编的主要目的。 第二个提示行为: Source listing NUL.LST:这是询问是否建立列表文件。若不建立,直接回车;若要建立,可以输入文件名 ABC 再回车,表示要建立名为 ABC 的列表文件。列表文件中同时列出源程

17、序和机器语言程序清单,并给出符号表,有利于程序调试。 第三个提示行为:Cross-reference NUL.CRF:这是询问是否要建立交叉索引文件。若不建立,则直接回车;若要建立,可以输入文件名 ABC,表示要建立 ABC.CRF 文件。由于 .CRF 是非文本文件,为了建立交叉索引文件,还必须调用 CREF.EXE 程序,即输入: CCREF ABCMicrosoft (R) Cross-Reference Utility Version 5.00Copyright (C) Microsoft Corp 19811985,1987. All rights reserved.listing

18、ABC.REF:17 Symbols 这时首先显示版本号,然后出现一个提示行:Listing ABC.REF:这是询问交叉索引文件名。这时可用回车承认方括号内机器默认的文件名,如上所示。这样就建立了 ABC.REF 文件。其内容是用户定义的所有符号 (包括变量 ),并给出每个符号定义所在的行号(附以)以及引用的行号。如下是 ABC.REF 文件的内容:Microsoft Cross-Reference Version 5.00 Sat Dec 01 18:49:42 2007Symbol Cross-Reference (# definition, + modification) Cref-1

19、A1 . . . . . . . . . . . . . . . 42 47# BUF. . . . . . . . . . . . . . . 15# 35 38 39 55 CODE . . . . . . . . . . . . . . 28# 29 111 DATA . . . . . . . . . . . . . . 1# 21 29 30 DATACATE . . . . . . . . . . . . 40 53# 80 EXIT . . . . . . . . . . . . . . 46 50# IFYEARS. . . . . . . . . . . . . 41 82#

20、 110 INFON. . . . . . . . . . . . . . 2# 32 LAB1 . . . . . . . . . . . . . . 92 103# LAB2 . . . . . . . . . . . . . . 97 102 105# LAB3 . . . . . . . . . . . . . . 104 106# N. . . . . . . . . . . . . . . . 10# 43 STACK. . . . . . . . . . . . . . 22# 22 27 29 START. . . . . . . . . . . . . . 30# 112 W

21、. . . . . . . . . . . . . . . . 14# 76+ 86 X3 . . . . . . . . . . . . . . . 60# 73 Y. . . . . . . . . . . . . . . . 6# 47 17 Symbols调入汇编程序,当我们回答了上述各提示行的询问之后,汇编程序就对源程序进行汇编。若汇编过程中发现源程序有语法错误,则列出有错误的语句和错误的代码。错误分警告错误(Wraning Errors) 和严重错误(Severe Errors)。警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数

22、及行号、错误的性质等。这时,就要对错误进行分析,找出问题和原因,然后再调用编辑程序加以修改,修改后重新汇编,直到汇编后无错误为止。 (三) 用连接程序 LINK 生成可执行程序文件(EXE 文件)经汇编后产生的二进制的目标程序文件(OBJ 文件)并不是可执行程序文件 (EXE 文件),必须经连接以后,才能成为可执行文件。连接程序并不是专为汇编语言程序设计的。如果一个程序是由若干个模块组成的,也可通过连接程序 LINK 把它们连接在一起。这些模块可以是汇编程序产生的目标文件,也可以是高级语言编译程序产生的目标文件。 连接过程如下:CLINK ABCMicrosoft (R) Overlay Li

23、nker Version 3.60Copyright (C) Microsoft Corp 1983-1987. All rights reserved.Run File ABC.EXE:List File NUL.MAP:ABCLibraries .LIB: 在连接程序调入后,首先显示版本号,然后出现三个提示行。第一个提示行为:Run File ABC.EXE:这是询问要产生的可执行文件的文件名。一般直接回车采用方括号内规定的隐含文件名。第二个提示行为:List File NUL.MAP:这是询问是否要建立连接映象文件。若不建立,则直接回车;若要建立,则输入文件名再回车。如果要建立该文件,可

24、以输入文件名 ABC。 第三个提示行为:Libraries .LIB:这是询问是否用到库文件。若无特殊需要,则直接回车即可。上述提示行回答后,连接程序开始连接。若连接过程中有错,则显示错误信息,错误分析清楚后,要重新调入编辑程序进行修改,然后重新汇编,再经过连接,直至无错为止。连接以后,便产生了可执行程序文件(EXE 文件)。 (四) 程序的执行当我们建立了可执行文件 ABC.EXE 后,就可直接在 DOS 下执行该程序:CABC根据程序提示,输入一个年份,计算机会输出是否闰年的结果。五、实验要求与提示1、实验要求(1)掌握汇编语言程序设计上机过程;(2)回答思考问题;(3)记录实验结果。2、

25、实验提示按照图 1.1 的上机过程进行实验。六、思考与练习以及测评标准(1)汇编过程中 MASM ABC 和 MASM ABC.ASM 的结果是否一致。(2)连接过程中 LINK ABC 和 LINK ABC.OBJ 的结果是否一致。(3) 使用 Word 如何录入汇编语言源程序。实验二 Debug 的使用(基础与验证型)一、实验要求和目的熟练掌握动态调试程序 DEBUG 的使用;二、软硬件环境1、硬件环境:微机 CPU 486 以上,500MB 以上硬盘,32M 以上内存;2、软件环境:装有 MASM 5.0、Debug、LINK、EDIT、 CREF.EXE 和 EXR2BIN.EXE 等

26、应用程序。三、实验涉及的主要知识单元通过编辑、汇编和连接后的程序是可以执行的程序。但是,一个程序特别是比较复杂的程序不能保证没有一点错误。因此,在投入正式运行前必须进行调试,以检查程序的正确性。调试程序 Debug 就是用来调试汇编语言程序的一种工具。Debug 的主要功能有显示和修改寄存器及内存单元的内容;按指定地址启动并运行程序;设置断点使程序分段运行,以便检查程序运行过程中的中间结果或确定程序出错的位置;反汇编被调试程序,它将一个可执行文件中的指令机器码反汇编成助记符指令并同时给出指令所在的内存地址;单条追踪或多条追踪被调试程序,它可以逐条指令执行或几条指令执行被调试程序,每执行一条(或

27、几条)指令后,Debug 程序将中断程序的运行并提供有关结果信息;汇编一段程序,在Debug 的汇编命令下可以直接输入助记符指令,并将其汇编成可运行程序段。此外,Debug 还可以将磁盘指定区的内容或一个文件装入到内存或将内存的信息写到磁盘上等等。启动 Debug 程序:在 DOS 状态下可以用下面的命令启动 Debug 程序:DEBUG 路径文件名.扩展名Debug 后面的文件名及路径是指被调试程序的文件名及路径,Debug 后面的文件必须是程序的可执行文件,其扩展名可以是.EXE 或.COM。在此命令后,DOS 将调试程序 Debug 调入内存,Debug 接着将被调程序送入内存。比如:D

28、EBUG 123.EXE 调试程序 Debug 的主要命令如下:(一)显示内存单元内容的命令 D格式(1):-D 地址从指定地址开始,显示 128 个字节的内容,每一行的左边显示段内偏移地址,接着显示 16 个单元的内容,最右边区域则显示这一行的 16 个单元所对应的可显示的字符。若无可显示的字符,则用圆点(小数点)填充。 D 命令中的地址可为段内偏移量,也可为段基址和段内偏移量两部分,中间用冒号隔开,如1680:0110,即指段基址为 1680H,段内偏移量为 0110H。Debug 中所显示的数据均为十六进制数,且省去了后面的 H 标志。 格式(2):-D 范围将显示指定地址范围内的内存单

29、元的内容,起始地址可由段基址及段内偏移量两个部分组成,中间用冒号“:”隔开,也可以只指出段内偏移量,而此时的段基址在 DS 中。这里所说的范围包含起始地址和结束地址。比如 D DS:1000 1020 将显示数据段偏移地址为 1000H 到 1020H 的内容。 (二)修改内存单元内容的命令 E格式(1):-E 地址 内容表它的功能是用给定的内容表去代替所指定的内存单元的内容。 例如:E DS:0110 41 CLOSE 41该命令执行后,将用列表中的 7 个字符填入从 DS:0110 到 DS:0116 的 7 个存储单元中。格式(2):E 地址它的功能是可以连续地逐个修改内存单元的内容。当

30、屏幕上显示指定单元的地址和内容之后,可采取下列办法:若指定单元的内容需要修改,则将新的内容的十六进制数输入,再按空格键,修改便告完成,然后显示下一个存储单元的地址及内容,若需要修改,可进行同样的操作。若某一个单元的内容不需要修改,而操作又要进行下去,则可直接按空格键。 若需要显示前一个单元的地址和内容,则输入连接号-,若要修改,则输入新的内容;若显示前一个单元的地址和内容仍要修改,则可进行同样的操作;若显示的内容不需要修改,则可直接按-键,使该操作由高地址向低地址单元连续不断地进行。按键,结束 E 命令。 (三)检查和修改寄存器内容的命令 R格式(1):R此时将显示所有寄存器的内容和全部标志位

31、的状态,以及现行 CS:IP 所指的机器指令代码和反汇编符号。 格式(2):R 寄存器名该格式可用于检查和修改指定寄存器的内容。若不修改其内容,可按键,若需要修改其内容,可以输入 1-4 个十六进制数,再按 键。 格式(3):RF该格式可用于显示标志和修改标志位状态。 当系统给出标志位状态后,可采取下列办法:若不需要修改任一标志位,可按键。 若需要修改一个或多个标志位,可输入其相反的值。各标志位之间可以无空格且与顺序无关,修改后按键。 由于标志位状态显示时,是用下列特殊符号表示的,因而修改时,只要输入规定的符号即可。下面是标志名和状态符号的对照表:标志名置 位符号复 位符号溢出标志 OF(是/

32、否) OV NV方向标志 DF(减/增) DN UP中断标志 IF(允许/禁止) EI DI符号标志 SF(负 /正) NG PL零标志 ZF(是/否) ZR NZ辅助进位标志 AF(是/否) AC NA奇偶校验标志 PF(偶/奇) PE PO进位标志 CF(是/ 否) CY NC只有追踪标志 TF,不能用指令直接修改。 例如:输入 RF 命令,系统可能作出如下响应:OV DN EI NG ZR AC PE CY -若现在要修改奇偶、零、中断和溢出标志位,可在光标处输入:PO NZ DI NV(四)运行程序命令 G格式:G =地址地址地址该命令可以在程序运行中设置断点。它是 Debug 程序进

33、行程序调试的主要命令之一。示例:-g 001a 则执行从当前 cs:ip 至 001a 的指令,注意:地址设置必须从指令的第一字节设起。 第一个参数“=地址”规定了程序执行的起始地址,以 CS 内容作段地址,等号后面的地址只需给出地址偏移量。此时,命令 G 与地址之间的等号不能省去。 如果在 G 命令执行前,已经设置了 CS 值和 IP 值,则也可以直接用 G 命令,从指定地址执行程序。 格式中后面给出的地址是指断点地址,最多可设置 10 个断点。当程序执行到一个断点时,就停下来,显示 CPU 各寄存器的内容和标志位的状态,以及下一条待执行的指令,被调试程序的所有断点全部被取消,并返回 Deb

34、ug。 地址参数所指的单元,必须包含有有效的 8088 指令的第一个字节,否则将产生不可预料的结果。 堆栈必须至少包含有 6 个可用字节,否则也将产生不可预料的结果。 若断点地址只包括地址偏移量,则认为段地址在 CS 寄存器中。 (五)追踪命令 T格式(1):T = 地址该命令可以在指令执行中进行追踪,若略去地址,则从 CS:IP 现行值执行。每一次 T 命令都执行一条指令。 格式(2):T = 地址值此时,它可对多条指令进行追踪,即在执行了由值所指定的若干条指令之后,停止执行并显示各寄存器的内容和各标志位,还指出下一条待执行的指令。 (六)汇编命令 A若在调试目标程序的过程中,要求改写或增添

35、一段目标程序,则可以用 A 命令直接在 Debug 下实现。格式:A 地址该命令可以从指定地址开始,将输入的汇编语言语句立即汇编成机器代码,连续存放在内存单元中。在程序输入完毕后,最后一行不输入内容,直接按回车键,即可返回 DEBUG 程序,还可用反汇编命令U 对刚输入的内容进行反汇编,以验证输入的程序是否正确。 使用 A 命令应遵守以下规则: 所有输入数值,均为十六进制数。 前缀助记符,必须在相关指令的前面输入,可以在同一行,也可以在不同行输入。 段超越助记符为 CS:、 DS:、 ES:、 SS:。 远调用时的返回指令助记符用 RETF。 使用串操作指令时,助记符中必须注明是字节还是字传送。 汇编语言能自动汇编短、近和远的转移及近和远的调用,也能由 NEAR 和 FAR 前缀来超越。 例如:0110:0600 JMP 602;短转移0110:0602 JMP NEAR 605;近转移0110:0605 JMP FAR 60A;远转移第一条 JMP 指令中含有一个字节偏移量。 第二条 JMP 指令中含有两个字节偏移量。 第三条 JMP 指令中含有两个字节的偏移量及两个字节的段地址。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。