微型计算机技术:第4章 汇编语言程序设计_第1页
微型计算机技术:第4章 汇编语言程序设计_第2页
微型计算机技术:第4章 汇编语言程序设计_第3页
微型计算机技术:第4章 汇编语言程序设计_第4页
微型计算机技术:第4章 汇编语言程序设计_第5页
已阅读5页,还剩70页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1

微型计算机技术

第4章汇编语言程序设计2第一节汇编语言上机过程第二节汇编语言程序结构第三节指示性语句第四节汇编语言程序举例第五节汇编语言程序设计3上机环境硬件系统软件

应用软件

操作系统:DOS系统编辑器:

EDIT.exe汇编编译程序:MASM.exe连接程序:LINK.exe调试程序:DEBUG.exe用户开发的程序:ABC.exe等CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备4第一节汇编语言上机过程D:>EDITABC.asmD:>MASMABC;

有语法错,回EDIT下改该程序D:>LINKABC;

有错,回在EDIT下改程序D:>ABC

运行结果错,回EDIT下改程序或在DEBUG下调试,找原因。D:>DEBUGABC.exe编辑源程序

EDITABC.ASM汇编源程序

MASM

ABC.ASM形成目标程序ABC.OBJ连接目标程序

LINKABC.OBJ有连接错误信息?形成可执行程序

ABC.EXE装入可执行程序到内存,并执行D:\>sub>ABC下一程序用DEBUG调试可执行程序D:\>sub>DEBUG

ABC.EXE找到原因YNYNNYN有汇编错误信息?Y运行结果正确?用DEBUG调试程序查错?5第二节汇编语言程序结构一、程序结构二、语句结构6一、程序结构程序由数条语句构成,每条语句占一行。指令性语句(指令语句)

指示性语句(伪指令语句)

分段结构程序按段编写,与8088内存分段编址相对应。每段由伪操作SEGMENT开始、由ENDS结束。程序最后为END结束语句,后跟一启动地址。启动地址指示程序开始执行的第一条语句。程序中设有返回DOS的功能。使程序执行完后返回DOS系统的命令接受状态。

程序中用到内存操作数时,

应按操作数的寻址方式,给相应的段寄存器赋值;汇编语言程序结构例一movs.asm;实现数据传送功能aaSEGMENT

;数据段1str1DB'Hello!’aaENDSbbSEGMENT

;数据段2str2DB6dup(?)bbENDSccSEGMENT

;代码段

ASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSB

MOVAH,4CHINT21H

;返回DOSccENDS

ENDstart;指示程序结束程序可由多个段构成,至少有一个代码段!7二、语句结构

dataSEGMENT;数据段varDB?dataENDScodeSEGMENT;代码段

ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回DOScodeENDS

ENDstart例:81.名字项

据语句功能的不同,

名字项可用来表示段名、变量名、标号、过程名以及常量名等。dataSEGMENT;数据段varDB?dataENDScodeSEGMENT;代码段

ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回DOScodeENDS

ENDstart9

名字项用一个符号表示。

对符号的规定:①

由字符A~Z,a~z,0~9及符号@、$、下划线_等组成,最长31个字符,超出部分忽略。②不能用数字打头,以免与十六进制数相混。③不使用汇编程序中的保留字。(如指令的助记符等)④

对定义的符号不区分大小写。102.助记符项助记符可以是指令、伪操作中的助记符。对于指令,汇编程序将其翻译成机器语言指令。

MOVAX,100→B80001对于伪操作,汇编程序根据其要求的功能进行处理。

dataSEGMENT

→data与一段值对应

stringDB‘Tsinghua’→string与一内存地址对应113.操作数项操作数给出参与操作的数或数所在的地方。操作数多于一个时,用逗号分开。操作数可以是常数、寄存器、存储器操作数、标号名、过程名或表达式等。12常数给出具体的数据。可以是数字常量或字符常量。◢◢

数字默认十进制,也可加D表示十进制数。如

1234D,1234◢

数字后加B表示二进制数。如

1010B◢

数字后加H表示十六进制数。如1234H◢

字符常量,用单引号表示。如‘1234’

汇编时,用字符对应的ASCII表示。如

31H,32H,33H,34H例

data1DB12,34,56;十进制

data2DB12H,34H,56H;十六进制

MOVAL,‘G’;字符

stringDB‘1234’;字符串13A、B、C、D、E、F开头的十六进制数前面加0,与H结尾的标识符区别。如寄存器名AH、BH、CH、

DH

变量名abcdH等例

movAL,0AHmovAL,AHmovBX,0abcdH144.注释项由分号引出,用来说明语句或程序的功能。汇编程序对分号后的内容不做处理。作用:①注释程序,增强程序可读性。

②可放在语句最前,暂时注释某语句,调试程序用。例

、、、

;MOVAH,2;显示提示信息

;MOVDL,’A’

;INT21H

、、、15第三节指示性语句一、程序开始和结束二、段定义三、变量定义四、ASSUME语句五、表达式及表达式中的操作符六、过程定义七、等值定义16指示性语句与指令性语句:指令性语句是用指令系统中的指令构成的语句。

MOVAX,BX指示性语句是指示汇编程序进行汇编的操作。

MOVAX,4+8中的+codeSEGMENT中的SEGMENTMOVBX,OFFSETstring中的OFFSET17指示性语句与指令性语句区别一个程序经汇编,连接和装入内存后,在执行程序之前:

◢指示性语句的功能已经完成,故又称伪操作。

◢而指令性语句的功能尚未完成,需控制CPU去执行,才能完成。18常用伪操作介绍一、程序开始和结束二、段定义三、变量定义四、ASSUME语句五、表达式中的操作符六、过程定义七、等值定义19一、模块定义和程序结束伪操作1.NAME和TITLE伪操作

格式

NAME

模块名

格式

TITLE

模块名在源程序开始可用NAME或TITLE为模块命名,

模块名的作用是指示给连接程序进行连接用。源程序中可无模块定义,此时源文件名作为模块名。

202.END伪操作

格式

END启动地址作用是指示源程序到此结束。汇编程序对END之后的语句不进行处理。程序中所有有效语句应放在END语句之前。源程序中必须有END结束语句。汇编程序对无END语句的源程序不进行处理,

只给出无END语句错误信息。21假设TEST.asm是一个无END语句的汇编语言源程序。其汇编结果如下:D:\MASMTEST;↙Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.EndoffileencounteredoninputfileEndoffileencounteredoninputfile49968+421181Bytessymbolspacefree

0WarningErrors

0SevereErrorsD:\由于没有END语句,汇编程序根本没对源程序进行汇编,此时显示警告性错误总数为0,严重性错误总数为0,用户不要被此值误导。22启动地址可是一个标号或过程名,指示程序的入口。程序装入内存后,系统跳转到入口处,开始执行程序。aaSEGMENT;数据段1

str1DB'Hello!’aaENDSbbSEGMENT;数据段2

str2DB6dup(?)bbENDSccSEGMENT;代码段

ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aa

MOVDS,AXLEASI,str1

MOVAX,SEGstr2

MOVES,AXMOVDI,OFFSETstr2

MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartD:\masm>DEBUGhello.exe-U:查看代码段129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、-D129d:0l10;查看数据段1的内容129D:000048656C6C6F210000-0000000000000000Hello!..........-D129e:0l10;查看数据段2的内容129E:00000000000000000000-0000000000000000................-23二、段定义伪操作

格式

段名SEGMENT

、、、、、、段名ENDS

段定义由伪操作SEGMENT开始、ENDS结束。其中:SEGMENT和ENDS必须成对出现,且语句前必须有段名,段名必须相同。

SEGMENT和ENDS语句之间可以有指令和其他伪操作,

表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理程序中可以定义多个段。程序经汇编、连接及装入内存后,段名为一具体的段值。24三、变量定义伪操作

格式

变量名类型助记符操作数[,操作数,...]

用来定义程序中所用的内存操作数。其中变量名指示内存操作数的地址(符号地址)

类型助记符指示内存操作数的类型(字节、字、双字等)

操作数指示内存操作数的内容汇编程序将定义的操作数,按其类型分配内存单元数,

顺序存入变量名指向的内存单元中。常用的类型助记符有:DB

指示其后的操作数为字节类型DW

指示其后的操作数为字类型DD

指示其后的操作数为双字类型25例1:定义赋初值的变量

dataSEGMENT

xxDB1,-1,0fcH

yyDW1,-1,0fcH

zzDD1,-1,0fcHdataENDS26例2:定义字符串变量(只能用DB定义)dataSEGMENT

str1DB'TsingHua'

str2DB'INPUT:',0dH,0aH,'$'dataENDS注意:3个及其以上的字符,只能用DB定义str1DW‘abcd’str2DD‘abcd’str1str25473696e67487561494e5055543a0d0a24‘T’‘s’‘i’‘n’‘g’‘H’‘u’‘a’‘I’‘N’‘P’‘U’‘T’‘:’0dH0aH‘$’27操作数可以是用常量、表达式和?表示。常量和表达式表示内存操作数的初始值,

其值应在其定义的类型范围内,否则汇编出错。例

aaDB270bbDW80000

用?

表示不置初始值的内存操作数。

ccDB?

可用DUP复制操作符定义相同的操作数,其格式为

重复次数DUP(操作数)

eeDB3DUP(4)

等价于eeDB4,4,428dataSEGMENTxxDB1,-1,0FCHyyDW1,-1,0FCHzzDD1,-1,0FCHstrDB'TsingHua'bufDB4,?,4DUP(?)DB‘dataend’dataENDScodeSEGMENTASSUMECS:codeASSUMEDS:datastart:MOVAX,dataMOVDS,AXLEABX,xxLEASI,yyLEADI,zzMOVAH,4CHINT21HcodeENDSENDstart例4:

在DEBUG下查看变量存放情况。29四、ASSUME伪操作

格式

ASSUME段寄存器:段名[,段寄存器:段名,…]

其中段寄存器为CS、DS、ES、SS中的一个

段名为用伪操作SEGMENT定义过的段名例

ASSUMECS:cc,DS:aaASSUME伪操作的作用指示汇编程序指令中用到的标号、过程及变量所在的段。其中对标号、过程必须用CS段寄存器指示

对变量可用CS、DS、ES、SS段寄存器指示30

若未用ASSUME语句指示指令中用到的标号、过程和变量所在的段,汇编程序将给出错误信息。

ASSUME语句只起指示作用,并无实际的操作。在程序中引用定义的变量做内存操作数时,需按寻址方式用传送指令(如MOV)给相应的段寄存器赋值。31例

用程序实现1234H+5678H

dataSEGMENTvalueDW1234H,5678HresultDW?

dataENDS

codeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;给DS赋值

MOVDS,AXMOVAX,value;取数

ADDAX,value+2;两数相加

MOVresult,AX;保存结果

MOVAH,4CH;返回DOSINT21H

codeENDSENDstart32注释掉ASSUME语句,其汇编结果:

dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENT;ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVAX,value

ADDAX,value+2

MOVresult,AXMOVAH,4CHINT

21HcodeENDSENDstartD:\MASM>MASMassume;Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.assume.ASM(8):MissingorunreachableCSassume.ASM(10):Cannotaddresswithsegmentregisterassume.ASM(11):Cannotaddresswithsegmentregisterassume.ASM(12):Cannotaddresswithsegmentregister49872+421341Bytessymbolspacefree0WarningErrors

4SevereErrorsD:\MASM>33结论:1.ASSUME语句只起指示作用,没有赋值作用2.

程序中用到内存操作数时,应按操作数的寻址方式,给相应的段寄存器赋值。34第四节汇编语言程序举例汇编语言程序举例一35例将BL寄存器的内容按二进制形式显示出来(BL)

MOVCX,8;显示字符个数为8next:SHLBL,1;将显示位移至CF中

JCone;CF=1?

MOVDL,30H

;CF=0,将0的ASCII放在DL中

JMPexitone:MOVDL,31H

;CF=1,将1的ASCII放在DL中exit:MOVAH,2INT21H;调用DOS功能显示

DECCX;循环次数减1

JNZnext;判断是否结束、、、313031303031313036codeSEGMENTASSUMECS:codestart:

............codeENDS

ENDstartMOVCX,8;显示字符个数为8next:SHLBL,1;将显示位移至CF中

JCone;CF=1?

MOVDL,30H

;CF=0,将0的ASCII放在DL中

JMPexitone:MOVDL,31H

;CF=1,将1的ASCII放在DL中exit:MOVAH,2INT21H;调用DOS功能显示

DECCX;循环次数减1

JNZnext;判断是否结束37data1SEGMENT;数据段1,(可据需要设定,也可无)……;变量定义data1ENDSdata2SEGMENT;数据段2(可据需要设定,也可无)……data2ENDScodeSEGMENT;程序段

ASSUMECS:code,DS:data1,ES:data2start:

、、、;程序主体部分、、、、、、、、、

MOVAH,4CH

;返回DOS

INT21HcodeENDS

ENDstart完整汇编语言程序框架:38五、表达式及表达式中的操作符

表达式由常量、标号、变量和一些操作符构成。汇编程序对表达式进行运算后,得到一个确定的数值,再把这个数值汇编到指令中。据表达式所表示的内容,分数字表达式、地址表达式。表达式是指令或伪操作的操作数;

表达式中的操作符由汇编程序完成例

MOVAX,12-4;MOVAX,8;数字表达式

LEABX,[string+4];地址表达式

39表达式中的操作符有以下几类:1.算术运算符(+、-、*、/、MOD)2.逻辑运算符(AND、OR、NOT、XOR)3.关系运算符(EQ、NE、GT、GE、LT、LE)

真:FFFFH;假:04.分析运算符(SEG、OFFSET)5.组合运算符(PTR)40例:

1.算术运算符(+、-、*、/、MOD(取余数))MOVAX,6*8←MOVAX,482.逻辑运算符(AND、OR、NOT、XOR)MOVAX,80hOR70h←MOVAX,0F0h3.关系运算符(EQ、NE、GT、GE、LT、LE)

真:FFFFH;假:0MOVAX,1GE2←MOVAX,041

4.分析运算符(SEG、OFFSET)SEG取符号地址的段地址例MOVAX,SEGyyOFFSET取符号地址的偏移地址例MOVBX,OFFSETyybb SEGMENT

yy DB6dup(?)bb ENDScc SEGMENT ASSUMECS:cc,DS:aa,ES:bbstart

: CLD MOVAX,SEGyy MOVES,AX MOVDI,OFFSETyy

MOVCX,6 …….

cc ENDS

ENDstart42aa SEGMENTxx DB'Hello!’aa ENDSbb SEGMENT

yy DB6dup(?)bb ENDScc SEGMENT ASSUMECS:cc,DS:aa,ES:bbstart

: CLD MOVAX,aa MOVDS,AX LEASI,xx MOVAX,SEGyy MOVES,AX MOVDI,OFFSETyy

MOVCX,6 REPMOVSB MOVAH,4CH INT21H

cc ENDS

ENDstartD:\>DEBUGhello1.exe-U

;查看程序代码

129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、、、、MOVAX,bbLEADI,yy43注意:SEG、OFFSET只能对符号地址操作MOVAX,SEG[BX]MOVBX,OFFSET[SI]44汇编语言程序举例二

编写完整汇编语言程序,完成内存数据块传送功能。将某段中的字符串“Hello!”传送到另一段中。45例一编写完整汇编语言程序,完成内存数据块传送功能。将某段中的字符串“Hello!”传送到另一段中。利用变量定义字符串和缓冲区46aa SEGMENT;数据段1xx DB'Hello!’;定义源串aa ENDSbb SEGMENT;数据段2yy DB6dup(?);定义目的缓冲区bb ENDScc SEGMENT;代码段

ASSUMECS:cc,DS:aa,ES:bb;指示指令中标号,变量所在段start

: CLD;设置传送方向

MOVAX,aa;DS:SI←

源串首地址

MOVDS,AX

LEASI,xx

MOVAX,SEGyy;ES:DI←

目的首地址

MOVES,AX MOVDI,OFFSETyy

MOVCX,6;CX←

串的长度

REPMOVSB;串传送

MOVAH,4CH;调用4CH系统功能,返回DOS INT21Hcc ENDS

ENDstart

;指示程序结束和程序入口47D:\>EDIThello.asm;编写源程序D:\>MASMhello;;汇编源程序

Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.49860+421241Bytessymbolspacefree0WarningErrors0SevereErrorsD:\>LINKhello;;连接程序Microsoft(R)OverlayLinkerVersion3.61Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.LINK:warningL4021:nostacksegmentD:\>hello;执行程序

D:\>48D:\>DEBUGhello.exe

;利用DEBUG查看结果-U

;查看程序代码

129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、、、、-D129D:0L20

;执行程序前,查看源串内容129D:000048656C6C6F210000-0000000000000000Hello!..........129D:00100000000000000000-0000000000000000................-D129E:0L20

;执行程序前,查看目的串129E:00000000000000000000-0000000000000000................129E:0010FCB89D128ED88D36-0000B89E128EC0BF.......6........-CLDMOVAX,aaMOVDS,AXLEASI,xx

MOVAX,SEGyyMOVES,AXMOVDI,OFFSETyy

MOVCX,6REPMOVSBMOVAH,4CHINT21H49-G

;执行程序Programterminatednormally-D129E:0L20

;查看目的串129E:000048656C6C6F210000-0000000000000000Hello!..........129E:0010FCB89D128ED88D36-0000B89E128EC0BF.......6........-D

129D:0L20

;从源串重新查看

129D:000048656C6C6F210000-0000000000000000

Hello!..........129D:00100000000000000000-0000000000000000

.................129D:0020FCB89D128ED88D36-0000B89E128EC0BF.......6........129D:00300000B90600F3A4B4-4CCD2109E8080003........L.!.....50-U

;查看程序代码

129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、、、、aa SEGMENTxx DB'Hello!’aa ENDSbb SEGMENT

yy DB6dup(?)bb ENDScc SEGMENTASSUMECS:cc,DS:aa,ES:bbstart

: CLD MOVAX,aa MOVDS,AX LEASI,xx MOVAX,SEGyy MOVES,AX MOVDI,OFFSETyy

MOVCX,6 REPMOVSB MOVAH,4CH INT21H

cc ENDS

ENDstart51data1SEGMENT;数据段1,(可据需要设定,也可无)……;变量定义data1ENDSdata2SEGMENT;数据段2(可据需要设定,也可无)……data2ENDScodeSEGMENT;程序段

ASSUMECS:code,DS:data1,ES:data2start:

、、、;程序主体部分、、、、、、、、、

MOVAH,4CH

;返回DOS

INT21HcodeENDS

ENDstart完整汇编语言程序框架:52六、过程定义伪操作

格式

过程名PROC类型、、、过程名ENDP

过程定义由伪操作PROC开始、ENDP结束。其中:PROC和ENDP必须成对出现,

且语句前必须有过程名,过程名必须相同。

PROC和ENDP语句之间为子程的指令序列。程序中可以定义多个过程。程序经汇编、连接及装入内存后,

过程名为一具体的内存地址,指示子程入口。53过程名常用作CALL调用指令的操作数,

子程的最后安排RET返回指令,使执行完子程后能返回调用处。过程有两种类型:NEAR和FAR

无类型项时,默认为NEAR类型。当过程与调用指令不在同一段时,应将过程定义为FAR类型。过程类型决定子程中RET的返回类型54例1displayPROC

、、、、C3H

、、

RET;NEAR属性的过程对应段内返回

displayENDP例2displayPROCFAR

、、、、CBH

、、

RET;FAR属性的过程对应段间返回

displayENDP55七、等值定义伪操作

格式

符号名EQU需等值的表达式作用是用符号名等值指定的表达式其中表达式可以是任何有效的操作数汇编时用语句中的表达式代替程序中符号所在的地方。应用:1.定义符号常量,方便修改程序。2.某表达式多次出现时,用等值伪操作可以方便编程。56八、其他分析运算符:TYPE,LENGTH,SIZE把一些特征或存贮器地址的一部分作为数值回送。·TYPE格式:TYPEvariable变量则回送该变量的以字节数表示的类型(DB为1,DW为2,DD为4,DQ为8,DT为10)或label标号回送标号类型数值(NEAR为-1,FAR为-2)例:ARRAYDW1,2,3ADDSI,TYPEARRAY汇编程序其形式:

ADDSI,257·LENGTH格式:LENGTHvariable

对于变量中使用DUP汇编回送分配给变量单元数,其他情况回送1。例:FESSDW100DUP(0) 对于MOVCX,LENGTHFEES

汇编程序将其形式:MOVCX,100

其他情况例:ARRAYDW1,2,3

对于指令MOVCX,LENGTHARRAY

汇编程序将使其形式为:MOVCX,1例:TABLEDB‘ABCD’

对于指令MOVCX,LENGTHTABLE汇编程序使其形式为:MOVCX,158·SIZE格式:SIZEvariable

回送分配给该变量的字节数LENGTH*TYPE例:FEESDW100DUP(0)

MOVCX,SIZEFEES

将形成:MOVCX,200例:TABLEDB‘ABCD’

MOVCX,SIZETABLE

将形成MOVCX,1例:ARRAYDW1,2,3

MOVCX,SIZEARRAY

形式MOVCX,2 LENGTH*TYPE=259总结:

TYPE变量的返回值是类型的字节数: DB为1,DW为2,DD为4,DQ为8,DT为10

温馨提示

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

评论

0/150

提交评论