微机原理汇编语言程序设计演示文稿_第1页
微机原理汇编语言程序设计演示文稿_第2页
微机原理汇编语言程序设计演示文稿_第3页
微机原理汇编语言程序设计演示文稿_第4页
微机原理汇编语言程序设计演示文稿_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

微机原理汇编语言程序设计演示文稿现在是1页\一共有62页\编辑于星期五微机原理汇编语言程序设计现在是2页\一共有62页\编辑于星期五本章内容4.1概述4.2汇编语言的格式与语法4.3DOS与BIOS中断调用4.4汇编语言程序设计和上机过程现在是3页\一共有62页\编辑于星期五4.1概述-程序设计语言机器语言:每种CPU都有自己独立的一套指令系统,其能直接理解和执行的是二进制机器码形式,这种二进制编码格式语言称为机器语言。特点是占内存少、执行速度快,但难以记忆、容易出错,实际中很少使用。例:89H,DCH汇编语言:用指令的助记符来表示二进制机器码的语言称为汇编语言,即是机器语言的符号表示。它是一种面向机器的程序设计语言,通常是为特定计算机或计算机系列专门设计的。特点是允许直接调用CPU内部资源,代码精简,占内存少,执行速度快,但通用性差,编写、调试周期长。常用来编制系统软件、实时控制程序、实时通信程序及接口的驱动程序等。例:MOVSP,BX高级语言:是面向过程的语言(如:BASIC语言、C语言等),不依赖于具体的计算机结构和指令系统。特点是通用性强,可移植,但目标程序长,执行速度慢。现在是4页\一共有62页\编辑于星期五4.1概述-汇编程序用汇编语言编写的程序不能由机器直接执行,而必须经汇编程序(Assembler)翻译成机器语言程序常使用的汇编程序是Microsoft公司的宏汇编MASM,它可以将源程序翻译成对应的目标程序,并且:检查语句语法自动分配存储区将其他进制转换为二进制数计算表达式的值展开宏命令现在是5页\一共有62页\编辑于星期五4.2汇编语言的格式与语法4.2.1源程序的结构4.2.2语句的格式与构成元素4.2.3语句的操作数4.2.3.1常量4.2.3.2变量和标号4.2.3.3表达式4.2.4伪指令4.2.5宏指令现在是6页\一共有62页\编辑于星期五4.2.1源程序的结构汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由三种逻辑段组成:数据段、附加段——定义和存放数据、变量堆栈段——堆栈区域代码段——存放程序指令现在是7页\一共有62页\编辑于星期五4.2.1源程序的结构NAME PROGRAM MOVAX,EXTRASTACK SEGMENTSTACK MOVES,AXSTADB100DUP(?) …… STACK ENDS MOVAX,OFFSETSDAT;---------------------------------------------- CALLP1DATA SEGMENT ……SDAT DB1,2,3,4,5 MOVAH,4CHDATA ENDS INT21H;----------------------------------------------- MAIN ENDPEXTRA SEGMENT ;------------------------------------------------DDAT

DB5DUP(?)

P1 PROCEXTRA ENDS ……;------------------------------------------------ RETCODE SEGMENT

P1 ENDP

ASSUMECS:CODE,SS:STACK ;-----------------------------------------------

ASSUMEDS:DATA,ES:EXTRA

CODE ENDSMAIN PROCFAR ;---------------------------------------------- MOVAX,DATA END MAIN MOVDS,AX堆栈段数据段扩展段代码段代码段现在是8页\一共有62页\编辑于星期五4.2.1语句的格式汇编语言的语句有两种:指令性语句:由8086指令构成的语句指示性语句:由伪指令构成的语句指令性语句由CPU执行,每一条指令性语句都有一条机器码指令与其对应,指令性语句汇编时生成机器码。指示性语句由汇编程序执行,它指示汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无机器码指令与其相对应,在汇编时不生成机器码。现在是9页\一共有62页\编辑于星期五标号:指令的符号地址,用来代表指令在存储器中的地址符号:段、过程、变量的名字,用来代表它们在存储器中的地址指令助记符:8086指令助记符、伪指令助记符操作数:即指令的操作对象对指令性语句:0,1,2个对指示性语句:根据需要而定操作数之间以逗号分隔操作数可以由标号、常量、变量、表达式、寄存器操作数和存储器操作数等构成

例如:AX,[DI+BX+10],DATA,200,16*8+TABLE,等等4.2.2语句的构成元素现在是10页\一共有62页\编辑于星期五注释:以分号开头,可放在指令后,也可单独一行。注意注释的写法,要写指令(或程序段)在程序中的作用,而不要写指令的操作。例如:以下为同一条指令写的注释

1)MOVCX,100;传送100到CX2)MOVCX,100;循环计数器置初值显然,第二种写法要比第一种写法要好

4.2.2语句的构成元素现在是11页\一共有62页\编辑于星期五4.2.3语句的操作数4.2.3.1常量4.2.3.2变量和标号4.2.3.3表达式现在是12页\一共有62页\编辑于星期五4.2.3.1常量常量操作数:数值常数:11001000B,0FA21H,329D(329)字符常数:‘ABCD’(41H42H43H44H)例:MOVAX,

0FA21H

VARDB329STRDB‘ABCD’现在是13页\一共有62页\编辑于星期五变量:指存储器存储单元中的数据,数据运行时可改变变量名:是存储单元的符号地址变量在程序中作为存储器操作数被引用变量有三个属性:段地址:变量所在段的段地址偏移地址:变量所在存储单元的偏移地址类型:有BYTE、WORD和DWORD等例:MOVAX,VARPUSHVAR4.2.3.2变量与标号-变量现在是14页\一共有62页\编辑于星期五

标号:指令所在存储单元的符号地址标号的三个属性:段地址:即标号所在段的段地址;偏移量:标号所代表存储单元的段内偏移地址;类型:NEAR或FAR:NEAR:段内转移或段内调用FAR:段间转移或段间调用标号通常作为转移指令的转移地址

JMPlabelJNZnon_zero4.2.3.2变量与标号-标号现在是15页\一共有62页\编辑于星期五组成:A-Z(不分大小写),0-9,?@._$不能以数字开头,句号(.)只能作为首字符长度小于31个字符不能与保留字(指令助记符、伪指令、预定义符号等)重名不能重复定义例如:正确的:LP1,AGAIN,NEXT,_GO,OK_1

错误的:4M,LOOP,AAA,#HELP,+ONE4.2.3.2变量与标号-命名规则现在是16页\一共有62页\编辑于星期五4.2.3.3表达式表达式由标号、常量、变量等加上必要的运算符构成有数字表达式和地址表达式两种汇编时按优先规则对表达式进行计算,计算出具体的数值或地址,运行时不能改变表达式中的运算符包括:算术、逻辑、关系、分析以及属性运算符等现在是17页\一共有62页\编辑于星期五算术运算符包括:加:+,减:-,乘:*,除:/,取模:MOD

例:MOVAX,4*1024汇编后的形式为:MOVAX,4096逻辑运算符包括:与:AND、或:OR、异或:XOR、非:NOT例:MOVCL,36HAND0FH

经汇编后:MOVCL,06H逻辑运算符只能用于数字表达式中。注意,不要把逻辑运算符与逻辑运算指令混淆:例:ANDAX,3FC0HAND0FF00H汇编后源操作数被翻译为:3F00H,所以上述指令与以下指令等价:ANDAX,3F00H4.2.3.3表达式—算术运算符现在是18页\一共有62页\编辑于星期五分析运算符包括:SEG、OFFSETSEG:取变量/标号的段地址OFFSET:取变量/标号的偏移地址例:VARDB12H

MOVBX,OFFSETVAR

;取变量VAR的偏移地址

MOVAX,SEGVAR

;取变量VAR的段地址SEG、OFFSET运算符在汇编过程取相应地址4.2.3.3表达式—分析运算符现在是19页\一共有62页\编辑于星期五4.2.3.3表达式—属性运算符PTR属性运算符PTR用来指定地址操作数的类型格式:<类型>PTR<地址操作数>

类型∈{BYTE,WORD,DWORD,NEAR,FAR}

BYTE、WORD、DWORD

用于描述数据存储单元(变量)地址例:MOVWORD

PTR[BX],03H

NEAR、FAR

用于描述转移、调用的目的地址例:JMPFAR

PTRLABEL1现在是20页\一共有62页\编辑于星期五例:MOV [DI],0;类型不定

MOV BYTEPTR[DI],0;字节类型

MOV WORDPTR[DI],0;字类型4.2.3.3表达式—属性运算符PTRDI48H45H00H45H00H00HBYTEPTRWORDPTRDIDI现在是21页\一共有62页\编辑于星期五4.2.3.3表达式—属性运算符PTRPTR也可用来进行强制类型转换例:VARDW1234H;VAR定义为字类型

MOVAX,VAR1;合法

MOVAL,VAR1;非法

MOVAL,BYTEPTRVAR1;合法现在是22页\一共有62页\编辑于星期五4.2汇编语言的格式与语法4.2.1源程序的结构4.2.2语句的格式与构成元素4.2.3语句的操作数4.2.3.1常量4.2.3.2变量和标号4.2.3.3表达式4.2.4伪指令4.2.5宏指令现在是23页\一共有62页\编辑于星期五4.2.4伪指令伪指令由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有:数据定义伪指令符号定义伪指令段定义伪指令过程定义伪指令程序模块定义伪指令定义模块连接标号和变量的伪指令现在是24页\一共有62页\编辑于星期五4.2.4伪指令—数据定义伪指令用于对程序中使用的变量进行定义通过变量定义指明变量的类型,并为其分配存储单元。数据定义伪指令的格式为:

变量名

数据定义伪指令

操作数,操作数,…VARDW1234H常用的数据定义伪指令有如下几种:

DB

定义字节DW

定义字

DD

定义双字

DQ

定义4字型变量(占8字节存储空间)

DT定义10字节变量(表示BCD码,或用于浮点运算)数据定义伪指令中的操作数可以是常数、变量或表达式现在是25页\一共有62页\编辑于星期五DATA1_BDB10DATA2_BDB5DATA3_BDB10HDATA1_WDW100HDATA2_WDW-4DATA_DDD0FFFBH汇编后的内存分配情况如右图所示。Q05H10H00H01HFCHFFHFBHFFH00H00H0AHDATA_BDATA_WDATA_D10510H100H-40FFFBH数据定义伪指令-例1现在是26页\一共有62页\编辑于星期五操作数可以是字符串,使用DB,DW

例 STR_DBDB‘HELLO’

STR_DWDW‘AB’,‘CD’

汇编后的情况如图:注意下面两个定义的不同之处:

STR_DBDB‘AB’;41H在低字节,42H在高字节

STR_DWDW‘AB’;42H在低字节,41H在高字节STR_DB‘H’‘E’‘L’‘L’‘O’48H45H4CH4CH4FH数据定义伪指令-例2STR_DB‘A’41H42H42H41HSTR_DW‘B’‘B’‘A’现在是27页\一共有62页\编辑于星期五

?

用来分配存储空间,但不置初值例1:RSVDB?

复制操作符DUP:

重复的数据可以使用复制操作符DUP,如上面RSV亦可写成:

例2:STRDB10DUP(‘A’)DATADB10DUP(30H,9DUP(20H))

若操作数中若使用$,则表示的是地址计数器的当前值。

例3

BUFDW0A32H,$,$+3

数据元素的初值:

ADDR+1,

(ADDR+2)+34.2.4伪指令—数据定义伪指令:?、DUP、$现在是28页\一共有62页\编辑于星期五例:TABLEDB10DUP(?)BUFFERDWTABLE,$+3设TABLE的偏移地址为0080H,则汇编后如下图所示:BUFFER0080H80HTABLE008AH008BH008CH008DH...8FH00H00H0089H10Bytes数据定义伪指令-例3现在是29页\一共有62页\编辑于星期五4.2.4伪指令—符号定义伪指令:EQU将一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示类似于C语言中的#define汇编时,符号被符号代表的内容替换

例:COUNTEQUCXTENEQU10

MOVCOUNT,TEN

汇编后:MOVCX,10现在是30页\一共有62页\编辑于星期五4.2.4伪指令—段定义伪指令汇编语言程序是按段来组织程序和数据的,段的划分与存储器的物理段相对应。汇编语言程序中的段称为逻辑段,汇编连接后被映射到相应的物理段中。逻辑段共分为:代码段、堆栈段、数据段和附加段段定义伪指令:SEGMENT、ENDS、ASSUME、ORG定义一个段的基本格式:

段名

SEGMENT[定位类型][组合方式][类别]

<汇编语言语句>

段名ENDS现在是31页\一共有62页\编辑于星期五SEGMENT和ENDS成对出现,二者前面的段名应一致伪指令SEGMENT说明了一个段的开始伪指令ENDS说明了一个段的结束数据段用于对程序中使用的变量进行定义,堆栈段用于对堆栈进行定义,数据段和堆栈段由指示性语句构成;代码段由指令性语句构成。例如:data_segSEGMENT<汇编语句>data_segENDS

4.2.4伪指令—SEGMENT和ENDS现在是32页\一共有62页\编辑于星期五4.2.4伪指令—ASSUME伪指令ASSUME伪指令用于明确段和段寄存器的关系,例如

ASSUMECS:code_seg,DS:data_seg,SS:stack_seg语句中的code_seg、data_seg、stack_seg为段名语句的作用为:CS将指向段名为code_seg的代码段DS和ES将指向段名为data_seg的数据段SS将指向段名为stack_seg的堆栈段现在是33页\一共有62页\编辑于星期五ASSUME伪指令只是告知汇编程序段与段寄存器之间的对应关系,并没有给段寄存器赋予实际的初值,程序中需要通过下面的语句进行赋值:

MOV AX,data_segMOV DS,AXMOV AX,stack_segMOV SS,AX上述语句的作用是将段地址装入段寄存器。代码段段地址不需要程序员装入CS寄存器,而由系统负责装入。上述语句通常放置在代码段主程序的开始处。4.2.4伪指令—ASSUME伪指令现在是34页\一共有62页\编辑于星期五伪指令ORG规定了段内的指令或数据存放的开始地址(偏移地址的初值),其格式为:

ORG<表达式>

表达式的值即为开始地址,从此地址起连续存放程序或数据。例:ABCSEGMENT

ORG100Hbegin:……ABCENDS

语句“ORG100H”表明段中第一个变量或第一条语句相对于段地址的偏移量为100H。4.2.4伪指令—ORG伪指令指令从100H开始存放现在是35页\一共有62页\编辑于星期五段定义伪指令-例DATASSEGMENTSTRDB‘HELLO’VARDW10HDATASENDSSTACKSSEGMENT‘STACK’STADB100DUP(?)TOPDW$STACKSENDSCODESSEGMENT

ASSUMECS:CODES,DS:DATAS,SS:STACKS

ORG100HSTART:MOVAX,DATASMOVDS,AXMOVAX,STACKSMOVSS,AXMOVSP,TOP……….CODESENDS

ENDSTART现在是36页\一共有62页\编辑于星期五过程定义伪指令的格式为格式:过程名PROC[类型]

RET

过程名ENDP说明:PROC表示过程的开始,ENDP表示过程的结束在过程中至少要有一个RET指令使其返回主程序每个过程要有一个过程名,通过该名其他程序可以调用该过程过程中有类型说明[FAR]或[NEAR]说明该过程是远过程还是近过程调用一个过程的格式为:CALL过程名4.2.4伪指令—过程定义伪指令现在是37页\一共有62页\编辑于星期五4.2.4伪指令—过程定义伪指令MY_ADDPROC

FARPUSHAXPUSHBXMOVAX,[BP-TYPEWORD]MOVBX,[BP-2*TYPEWORD]ADDAX,BXMOVBX,[BP-3*TYPEWORD]MOV[BX],AXPOPBXPOPAX

RET6

MY_ADDENDP现在是38页\一共有62页\编辑于星期五4.2.4伪指令—定义程序模块伪指令功能:定义程序模块格式:NAME模块名

……END表达式模块名:由程序员命名,最多6个字符表达式:通常就是程序第一条指令的标号,指示程序的启动地址(要执行的第一条指令的地址)。现在是39页\一共有62页\编辑于星期五4.2.4伪指令—定义程序模块伪指令伪指令END表示源程序到此结束,并可指出程序的启动地址。格式如下:

END[标号/过程名]模块结束语句放在源程序最后一行,表示程序到此结束,一个程序中必须有一个END语句,其中的标号或过程名给出了程序开始执行的启动单元地址,只有主模块才可有此选项当连接的多个模块中都没有给出启动地址,将从代码段的第一个字节处开始执行当有多个模块都指定了启动地址,将从最后一条带标号的END语句指定的启动地址单元开始执行以上情况都可能导致程序的错误执行,编程时应予避免现在是40页\一共有62页\编辑于星期五本章内容4.1概述4.2汇编语言的格式与语法4.3DOS与BIOS中断调用4.4汇编语言程序设计和上机过程现在是41页\一共有62页\编辑于星期五4.3DOS与BIOS中断调用8086微机系统开机过程:BIOS---->DOSBIOS(BasicInputOutputSystem):

装于从地址0FE00H开始的8kROM中,提供了硬件系统的加电自检,操作系统的引导装入,主要I/O设备的处理程序及接口控制等功能模块。使用BIOS中断调用,使程序员不必了解硬件I/O的具体接口特性,可直接通过入口参数来调用,给编程带来方便。DOS(DiskOperationSystem):DOS操作系统存放于硬盘等外存储器中,启动机器后被装入内存,DOS中断对应于一组中断处理程序,这些子程序分别实现外设管理、文件读/写和管理、目录管理等功能。DOS中断通过调用BIOS中断来实现对外设硬件的控制。DOS中断比BIOS中断更容易使用,应列为首选;BIOS调用速度快,适用于访问高速外设。现在是42页\一共有62页\编辑于星期五DOS中断调用与BIOS中断调用的使用方法类似:设置入口参数设置功能号,通过设置AH寄存器通过INTn指令调用不同的中断服务程序BIOS中断调用:n=05H~1FHDOS中断调用:n=20H~3FH,其中INT21H为最常用的DOS中断调用例:屏幕输出字符‘@’MOVDL,‘@’;设置入口参数,输出字符送DLMOVAH,02H;设置中断调用功能号=02HINT21H;调用INT21H中断输出字符

4.3DOS与BIOS中断调用现在是43页\一共有62页\编辑于星期五DOSINT21H软中断有90多种功能,完成设备、目录和文件管理键盘输入并显示,功能号=01H

MOVAH,01H

;设置INT21H中断调用功能号=01H

INT21H

;调用INT21H中断,输入字符存入AL中屏幕输出一个字符,功能号=02H

MOVDL,‘A’

;待输出字符送DL

MOVAH,02H

;设置INT21H中断调用功能号=02H

INT21H

;调用INT21H中断,屏幕输出字符4.3DOS中断调用INT21H现在是44页\一共有62页\编辑于星期五直接控制台输入输出,功能号=06H直接输入:DL=0FFH,表示从键盘输入字符ZF=1,表示无键盘输入ZF=0,表示有键盘输入,输入字符存放于AL中中断调用不等待键盘输入例:CHECK:MOVDL,0FFHMOVAH,06HINT21HJZCHECK;判断有无键盘输入直接输出:DL≠0FFH,表示向屏幕输出显示字符,DL中存放的是待显示的字符:

MOVDL,‘A’MOVAH,06HINT21H

4.3DOS中断调用INT21H现在是45页\一共有62页\编辑于星期五屏幕输出显示字符串(以$结束),功能号=09HSTRINGDB‘HELLO’,0AH,0DH,‘$’;0AH:ASCII码换行

;0DH:ASCII码回车

;'$'字符串结束标志MOVDX,OFFSETSTRING;字符串首地址送DX

MOVAH,09H;设置中断调用功能号=09H

INT21H;屏幕输出显示字符串键盘输入字符串,功能号=0AHSTRINGDB30,31DUP(?);串中第1个元素规定允许最多输入的字符数,此

;处最多可输入30个字符(含回车),;串中第2个元素保留,保存输入字符的个数

;从第3个元素起为输入字符的缓冲区

MOVDX,OFFSETSTRING;字符串首地址送DX

MOVAH,0AH;设置中断调用功能号=0AH

INT21H;键盘输入字符串4.3DOS中断调用INT21H现在是46页\一共有62页\编辑于星期五4.3DOS中断调用INT21H打印机打印一个字符,功能号=05HMOVDL,‘A’;待打印字符送DLMOVAH,05H;设置INT21H中断调用功能号

INT21H;打印输出字符返回DOS系统,功能号=4CH

MOVAH,4CH;设置INT21H中断调用功能号

INT21H;返回DOS系统现在是47页\一共有62页\编辑于星期五BIOS中断完成键盘、显示、磁盘和打印机等常用I/O的驱动。键盘输入,INT16H,例:

MOVAH,0;输入字符存入AL中

INT16H MOVAH,1;查询键盘缓冲区,置标志ZFINT16HMOVAH,2;功能键状态存入AL中

INT16H

屏幕显示,INT10H,例:定位光标

MOVDH,4;行数

MOVDL,5;列数

MOVAH,2;光标控制功能号

INT10H;定位光标

4.3BIOS中断调用现在是48页\一共有62页\编辑于星期五本章内容4.1概述4.2汇编语言的格式与语法4.3DOS与BIOS中断调用4.4汇编语言程序设计与上机过程现在是49页\一共有62页\编辑于星期五模块化编程方法:将一个较复杂的任务划分成多个独立的程序模块,然后分别编制、调试形成目标文件,最后将多个目标文件连接起来形成一个完整的可执行文件模块内程序的基本结构:顺序结构:完全按照程序指令编排的顺序依次执行分支结构:程序按逻辑条件进行判断,作出不同的处理循环结构:程序按所设置的条件,多次重复执行主-子程序结构:将一些通用性的程序作为子程序,供其它程序反复调用4.5汇编语言程序设计方法现在是50页\一共有62页\编辑于星期五4.5汇编语言程序设计方法—分支结构C语言chara,b,resulta=4;b=5;if(0==a-b){a=a+b;}else{a=b;}result=a汇编语言

MOVAL,4MOVBL,5

CMPAL,BL

JNZUE

ADDAL,BLJMPNEXTUE:

MOVAL,BLNEXT:

MOVresult,AL汇编语言条件转移

JCCNEXT…………NEXT:

……类似于:

if()

{

}NEXT:

…….现在是51页\一共有62页\编辑于星期五4.5汇编语言程序设计方法—分支结构实现条件转移的近转移或段间转移

JZNEARPTRLAB方式1:

JZSHORTJ1

JMPNEXTJ1:

JMPNEARPTRLAB

NEXT:………………LAB:…………

方式2:

JNZNEXT

JMPNEARPTRLAB

NEXT:………………LAB:…………

现在是52页\一共有62页\编辑于星期五4.5汇编语言程序设计方法—循环结构

双重for循环

NEQU30

ADDRDBNDUP(?)……MOVCX,NDECCXLOOP1:MOVDI,CXMOVBX,0LOOP2: MOVAX,ADDR[BX]CMPAX,ADDR[BX+1]JGECONTINUEXCHGAX,ADDR[BX+1]MOVADDR[BX],AXCONTINUE:INCBX

LOOPLOOP2

MOVCX,DI

LOOPLOOP1WHILE循环

CYC:CMP

JCCNEXT……JMPCYCNEXT:……….DO_WHILE循环

CYC:…………JCCCYC

现在是53页\一共有62页\编辑于星期五4.5汇编语言程序设计方法—子程序设计寄存器内容的保护和回复

SUBPPROCFARPUSHAXPUSHBXPUSHCXPUSHDX……PUSHDXPOPCXPOPBXPOPAXRETSUBPENDP现在是54页\一共有62页\编辑于星期五主过程与子过程间的参数转递通过CPU内部寄存器通过堆栈传递,RETn通过内存变量传递的可以是参数本身或参数的地址(指针)4.5汇编语言程序设计方法—子程序设计现在是55页\一共有62页\编辑于星期五4.5汇编语言程序设计方法—子程序设计MY_ADDPROC

FARPUSHAXPUSHBXMOVAX,[BP-TYPEWORD]MOVBX,

温馨提示

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

评论

0/150

提交评论