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

下载本文档

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

文档简介

汇编语言程序设计第一页,共六十三页,编辑于2023年,星期日1.设计步骤:根据实际问题抽象出数学模型确定算法画程序流程图分配内存工作单元和寄存器程序编码调试第二页,共六十三页,编辑于2023年,星期日2.绘制程序流程图(1)用方框表示工作框(2)用菱形框表示判断框

NY?(4)各框之间用直线连起来表示程序走向。(3)用

框表示调用子程序或过程。3.源程序的基本结构:顺序、分支、循环、子程序第三页,共六十三页,编辑于2023年,星期日程序流程图符号起始:功能:判断:子过程:第四页,共六十三页,编辑于2023年,星期日顺序程序设计,又叫直接程序设计。它是相对于分支程序和循环程序设计而言的。因此,可以说顺序程序是既不包含分支,又不包含循环的程序,顺序程序是从第一条指令开始,按其自然顺序,一条指令一条指令地执行,在运行期间,CPU既不跳过某些指令,也不重复执行某些指令,一直执行到最后一条指令为止。4.1顺序结构程序第五页,共六十三页,编辑于2023年,星期日例:将某段中的字符串“Hello!”传送到另一段中(内存数据块的传送)。开始建立传送方向DS:SI←

源串首地址

ES:DI

←目的串首地址CX

串长度串传送返回DOS4.1顺序结构程序(顺序执行,无转移、无循环)第六页,共六十三页,编辑于2023年,星期日aa 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,yy

;ES:DI←

目的串首地址

MOVES,AX MOVDI,OFFSETyy

MOVCX,6;CX←

串的长度

REPMOVSB;串传送

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

ENDstart

;程序结束第七页,共六十三页,编辑于2023年,星期日

4.1顺序程序设计

例4.1.1

把在字节存储单元AA和BB中的两个压缩BCD数相加,结果存到字节单元CC中。分析:实现BCD码相加,要通过二进制数加法指令实现。然后再用十进制调整指令进行调整,以获得正确的BCD结果。因为是单字节相加,只用一条二进制加法指令即可。如果考虑相加结果有进位,则可以将表示进位的CF标志位存入单元CC+1中。为此,在存储单元CC处留有两个字节,用来存放相加的结果。第八页,共六十三页,编辑于2023年,星期日程序:DATASEGMENTAADB23H;被加数BBDB18H;加数CCDB2DUP(?);结果单元DATAENDSBCDADDSEGMENTASSUMECS:BCDADD,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,AA;取被加数

ADDAL,BB;二数相加

DAA;调整为十进制结果

MOVCC,ALLAHF;取标志位

ANDAH,01;取CF位

MOVCC+1,AH;存进位到C+1单元

MOVAH,4CHINT21HBCDADDENDSENDSTART第九页,共六十三页,编辑于2023年,星期日

例4.1.4

在内存地址SQREA起有0~15的平方数表。在ABB单元任给---个小于等于15的整数,求其平方值。分析:因为平方表已顺序排放在内存中。又已知首地址为SQREA,只要把给定单元的内容作位移量与表首址相加,就指向了表中要求值的地址,取其内容即为该数的平方值。第十页,共六十三页,编辑于2023年,星期日源程序:DATA SEGMENTSQREADB0,1,4,9,16,25,36,49,64,81DB100,121,144,169,196,225ABBDB8DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROC FARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVBL,ABB;取给定单元中数

MOVBH,0MOVSI,OFFSETSQREA;平方表首地址指针

MOVAL,[SI+BX];取给定数的平方值

MOVABB,AL;存回原单元

RETFSTARTENDPCODEENDSENDSTART第十一页,共六十三页,编辑于2023年,星期日条件满足?处理P1处理P2标号1:标号2:NY1.简单分支结构4.2分支程序分支结构程序设计的关键在于准确地知道操作结果影响的标志位状态和正确地使用条件转移指令。根据对条件的判断而选择不同的处理方法是人的基本智能体现。第十二页,共六十三页,编辑于2023年,星期日2.多种分支结构标号1:条件1成立?P1NY条件2成立?条件n成立?…Pn+1标号2:标号n:标号n+1:P2PnNNYY第十三页,共六十三页,编辑于2023年,星期日

①用比较指令

CMPDEST,SRCJEEQUL……EQUL:②用测试指令

TESTDEST,SRCJNZNEXT……NEXT:③用逻辑指令

SHRDEST,CLJCNEXT……NEXT:第十四页,共六十三页,编辑于2023年,星期日例:编程实现下列函数的功能,其中X、Y为无符号字节数。(AL)=X(BL)=Y开始(AL)=(BL)?Z=0YZ=1Y(AL)>(BL)?NZ=-1N结束第十五页,共六十三页,编辑于2023年,星期日程序;--数据段定义----------------------------------

DAT

SEGMENT X DB 242 Y DB 67 Z DB ?

DAT

ENDS;--代码段定义----------------------------------

COD SEGMENT ASSUMEDS:DAT,CS:COD START:MOVAX,DAT

MOVDS,AX

;初始化DS

MOVAL,X MOVBL,Y第十六页,共六十三页,编辑于2023年,星期日;-------------------------------------------------------------------------------- CMP AL,BL

JE

C1

;(AL)=(BL)则跳转至C1

JA

C2

;(AL)>(BL)则跳转至C2 MOV AL,-1

JMPEXT

C1: MOV AL,0

JMP EXTC2: MOV AL,1EXT:MOVZ,ALMOV AH,4CH INT21H ;返回DOS;------------------------------------------------------------------------------------ COD ENDS

END START第十七页,共六十三页,编辑于2023年,星期日

4.2

分支程序设计例4.2.1

设在A、B两个存贮单元各有一个无符号数,比较两个无符号数的大小,并根据判断结果,在屏幕显示A>B或B>A或A=B。分析:两个无符号数比较大小,使用比较指令CMP,产生标志位,然后根据标志位,使用无符号条件转移指令实现转移。源程序:DATASEGMENTADB3BHBDB8EHASTRDB‘A>B$’BSTRDB‘B>A$’CSTRDB‘A=B$’DATAENDS

第十八页,共六十三页,编辑于2023年,星期日CODESEGMENTASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXMOVAL,A;取A中数

CMPB,AL;A与B比较

JAEBGA;B≥A,转BGAMOVDX,OFFSETASTR;显示A>BMOVAH,9INT21HJMPCOMBGA:JZAEBMOVDX,OFFSETBSTR;显示B>AMOVAH,9INT21HJMPCOMAEB:MOVDX,OFFSETCSTR;显示A=BMOVAH,9INT21HCOM:MOVAH,4CHINT21HCODEENDS

第十九页,共六十三页,编辑于2023年,星期日例4.2.2

在一个字符串中,找出其ASCII码值最大的字符,并显示在屏幕上。分析:可以把每个字符的ASCII码,看做是一个无符号数。这样,就转化为在一组数中查找一个最大数的操作。通常使用逐个比较法,即把第一个数作比较标准,与其后的数比较。如标准数大,则再与下一个数比较。如标准数小,则将大数做为新的标准数,再与下一个数比较。依此类推,逐个比较,直到最后一个标准的数,就是要找的最大数,即值为最大的字符。第二十页,共六十三页,编辑于2023年,星期日源程序:

DATASEGMENTBLOKDB‘Searchacharactertohave';字符串

DB‘thelargestvalue$'COUNTEQU$-BLOK;串长

DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBLOKMOVCX,COUNT-1MOVAL,[SI];取一个字符,

INCSI;调整指针COMP:CMPAL,[SI];字符比较

JANEXT;若AL值大,转NEXT第二十一页,共六十三页,编辑于2023年,星期日

MOVAL,[SI];否则,取大值到ALNEXT:INCSI;调整指针

LOOPCOMP;循环查找

MOVDL,AL;显示所找到的最大字符

MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART第二十二页,共六十三页,编辑于2023年,星期日循环程序的组成:循环程序是在满足某些条件时对一段程序的重复执行,一般由四部分组成。

4.3循环程序(1)循环初值部分:这是为了保证循环程序能正常进行循环操作而必须做的准备工作。循环初值分两类:一类是循环工作部分的初值,别一类是控制循环结束条件的初值。(2)工作部分:即需要重复执行的程序段。这是循环的中心,称之为循环体。(3)修改部分:按一定规律修改操作数地址及控制变量,以便每次执行循环体时得到新的数据。(4)控制部分:用来保证循环程序按规定的次数或特写条件正常循环。第二十三页,共六十三页,编辑于2023年,星期日循环体循环控制继续循环?初始化YN(2)先判断后执行循环体可能一次都不执行初始化循环体循环控制继续循环?YN2.基本结构形式(1)先执行后判断(do—while)至少执行一次循环体第二十四页,共六十三页,编辑于2023年,星期日

①MOVCX,COUNTAGAIN:……LOOPAGAIN②MOVCX,COUNTAGAIN:……DECCXJNZAGAIN③MOVCX,COUNTAGAIN:JCXZNEXT……DECCXJMPAGAINNEXT:第二十五页,共六十三页,编辑于2023年,星期日2、循环程序设计(1)循环的控制方法下面介绍最常见的两种控制方法:计数控制和条件控制。①计数控制当循环次数已知时,通常使用计数控制法。假设循环次数为n,常常用以下三种方法实现计数控制和条件控制先将循环次数n送入循环体计数器中,然后,每循环一次,计数器减1,直至循环计数器中的内容为0时结束循环。如:

MOVCX,n

;循环初值部分LOOPA:…

;工作部分

;修改部分

DECCX;控制部分

JNZLOOPA:第二十六页,共六十三页,编辑于2023年,星期日其中工作部分、修改部分被重复执行n次,即当(CX)=n,n-1,…,1时,重复执行循环体,当(CX)=0时,结束循环。先将循环次数的负值送入循环计数器中,然后每循环一次,计数器加1,直至计数器中的内容为零时结束循环。例如:

MOV

CX,-n

;循环初值部分LOOPA:…

;工作部分

;修改部分

INC

CX;控制部分

JNZLOOPA其中工作部分、修改部分被重复执行n次,即当(CX)=-n,-(n-1),…,-1时重复执行,当(CX)=0时结束循环。第二十七页,共六十三页,编辑于2023年,星期日先将0送入循环计数器中,然后每循环一次,计数器加1,直到循环计数器的内容与循环次数n相等时退出循环。例如:

MOVCX,0

;循环初值部分

LOOPA:…

;工作部分

;修改部分

INCCX;修改部分

CMPCX,nJNELOOPA其中工作部分、修改部分重复执行n次,即当(CX)=0,1,…,n-1时重复执行,当(CX)=n时结束循环。第二十八页,共六十三页,编辑于2023年,星期日②条件控制有些情况下,循环次数事先无法确定,但它与问题的某些条件有关。这些条件可以通过指令来测试。若测试比较的结果表明满足循环条件,则继续循环,否则结束循环。

[例]:统计AX寄存器中1的个数,并将结果存放在CL寄存器中。…MOVCL,0L:ANDAX,AXJZEXITSALAX,1;将AX中的最高位移入CF中

JNCL;如果CF=0,转LINCCL;如果CF=1,则(CL)+1→CLJMPL;转L处继续循环

EXIT:…第二十九页,共六十三页,编辑于2023年,星期日2、单重循环程序设计所谓单重循环指循环体内不再包含循环结构。下面分循环次数已知和未知两种情况讨论其程序设计方法。(1)循环次数已知的循环程序设计对于循环次数已知的情况,通常采用计数控制方法来实现循环。(2)最大循环次数未知的循程序设计对于循环次数未知的情况,常用条件来控制循环。3、多重循环程序设计多重循环即循环体内套有循环。设计多重循环程序时,可以从外层循环到内层循环一层一层地进行。

第三十页,共六十三页,编辑于2023年,星期日

4.3循环程序设计例4.3.1

在BUFFER开始的地址处,有一组有符号数。要求统计其中负数的个数。程序:DATASEGMENTBUFFERDB2,-3,18,-24,87,-98NEQU$-BUFFERRESLTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROC FARPUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AX第三十一页,共六十三页,编辑于2023年,星期日MOVBX,OFFSETBUFFERMOVCX,NMOVDL,0LOP:MOVAL,[BX]ANDAL,ALJNSNEXTINCDLNEXT:INCBXLOOPLOPMOVRESLT,DLADDDL,30HMOVAH,2INT21HRETSTARTENDPCODEENDSENDSTART第三十二页,共六十三页,编辑于2023年,星期日例4.3.2 在地址ADDR开始处,存放有100个无序的无符号数。要求按降序排列(大数在前、小数在后),结果仍存放到原地址区。分析:在前面的例子中,已讨论过求最大值的问题,现在要求是在找到最大值后再找次大数,且置于最大数后,以此类推,直到将所有的数都按降序排列完为止。所以,这是一个重复寻找最大数问题。每找一个最大数,要逐个与数列比较,将其作为内循环处理。当找到一个最大数后,还要在数列中找下一个次大的数,要重复使用循环程序,用控制重复执行内循环的程序部分作为外循环程序,这是一个二重循环程序。

第三十三页,共六十三页,编辑于2023年,星期日源程序:DATASEGMENTADDRDB4AH,63H,27H,48H,22H,39H,…DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARPUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AXMOVCX,100-1;置计数器初值

MOVSI,OFFSETADDR;取数据序列首指针

LP1:MOVDX,CX;置内循环计数器

MOVDI,SI;置内循环地址指针

MOVAL,[DI];取数

第三十四页,共六十三页,编辑于2023年,星期日

LP2:INCDI;指向下一个数地址

CMPAL,[DI];判大小

JAENEXT;AL大,转NEXTMOVBL,AL;否则,交换数据

MOVAL,[DI]MOV[DI],BLNEXT:DECDX;本遍比较完?JNZLP2;未完,转LP2MOV[SI],AL;完,存最大数

INCSI;调整外循环地址指针

LOOPLP1;未排完队列,转LP1RET;排完,返回

CODEENDSENDSTART第三十五页,共六十三页,编辑于2023年,星期日子程序:重复使用的程序段或具有通用性便于共享的程序段1.调用子程序用CALL指令,返回调用程序用RET指令2.现场的保护和恢复现场:指转向子程序执行时主程序的状态,包括当时标志寄存器、段寄存器、通用寄存器的内容主程序和子程序的设计是分开进行的,为保证主、子程序所使用的寄存器不会发生冲突,进入子程序时要保护主程序的运行状态和使用的寄存器内容(保护现场),退出子程序前要恢复现场。现场的保护和恢复分别用PUSH和POP指令实现4.4子程序设计第三十六页,共六十三页,编辑于2023年,星期日

调用前要预先确定子程序中要使用哪些寄存器,并定义入口参数和出口参数。参数传递的方法:(1)使用约定的寄存器传递(2)使用约定的存储单元传递(3)使用堆栈传递(要用BP寻址)第三十七页,共六十三页,编辑于2023年,星期日4.4子程序例4.4.2

对存于ADD1地址起的20个非压缩的十进制数,要求用十进制数转ASCII码的子程序完成代码转换,并存于ADD2地址起的单元中,转换后的字符在屏幕上进行显示。十进制数转ASCII码子程序使用段间调用。第三十八页,共六十三页,编辑于2023年,星期日源程序:NAMESUBPROGEXTRNADD1:BYTECODE2SEGMENTPARAPUBLIC‘CODE’SPRGPROCFARASSUMECS:CODE2PUBLICSPRGSTT:MOVAL,ADD1[SI]ADDAL,30HRETSPRGENDPCODE2ENDSENDNAMEEXDATASEGMENTADD1DB04H,05H,06H,02H,07H,05H,02H,03H,05H,08HDB08H,07H,09H,04H,09H,08H,05H,06H,07H,06HADD2DB20DUP(?)ADD3EQU20DATAENDS第三十九页,共六十三页,编辑于2023年,星期日STACKSEGMENTPARASTACK‘STACK’DW100DUP(?)STACKENDSPUBLICADD1EXTRNSPRG:FARCODE1SEGMENTPARAPUBLIC‘CODE’ASSUMECS:CODE1,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVDI,0MOVSI,0MOVCX,ADD3LP:CALLSPRG;段间调用

MOVADD2[DI],ALINCDIINCSI

第四十页,共六十三页,编辑于2023年,星期日

MOVDL,ALMOVAH,02INT21HMOVDL,‘’

INT21HLOOPLPMOVAH,4CHINT21HCODE1ENDSENDSTART第四十一页,共六十三页,编辑于2023年,星期日4.4.4调用程序和子程序间的参数传递一、子程序说明文件子程序说明文件主要信息:(1)子程序的名称及其功能;(2)子程序的入口参数说明;(3)子程序的出口参数说明;(4)子程序所使用的寄存器及存储区;(5)子程序调用其它子程序的方式及名称。第四十二页,共六十三页,编辑于2023年,星期日

二、主程序和子程序之间的参数传递方式1.利用寄存器传递参数

2.利用存储器传递参数

3.利用堆栈传递参数

利用存储器传递参数举例例4.4.4在ABCD地址起有N位带符号十进制数,其首字符表示为符号(用全0、全1码分别表示正和负)。数的高位在低地址,低位在高地址,将其转为对应的二进制数(负数用补码表示),并存于ABIN起的地址单元中,限定十进制数在士65535范围之中。

第四十三页,共六十三页,编辑于2023年,星期日分析:为实现N位带符号的十进制数转换为二进制数,将十进制数表示为下式:d0、d1、d2、d3、d4、…d(n-1),其中d0为符号位。考虑相邻位数权值相差10倍,则该十进制数的二进制数值可用下式表示:(…((d1*1O+d2)*1O+d3)*10+…)*10+d(n-1)若符号位为正,则该值即为二进制正数值。若符号位为负,则应将该数转为负数的补码。为了实现存储器参数传递,由SI作十进制数地址指针,DI作二进制数地址指针,CX指示十进制数位长。子程序返回参数由AX提供,AX=0,表示十进制数有错或结果溢出。AX≠0,表示其内容为正确的二进制数结果。

第四十四页,共六十三页,编辑于2023年,星期日源程序:STACKSEGMENT

PARASTACK‘STACK’

DB200DUP(?)STACKENDSDATASEGMENT

ABCDDB0,0,0,3,4,5ABINDB3DUP(O)NEQU6DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAASSUMESS:STACKSTART:MOVAX,DATAMOVDS,AX第四十五页,共六十三页,编辑于2023年,星期日LEASI,ABCD;置数据地址指针(含符号位)LEADI,ABIN;置结果数据地址指针(含符号位)MOVCX,N-1;置计数器初值

CALLDTOB;调用DTOB子程序

CMPAX,O;返回码表错?JNEFIN;无错,转FINMOVDL,‘0’;显示‘0’,表示结果有错。

MOVAH,02HINT21HFIN:MOVAH,4CHINT21HCODEENDS第四十六页,共六十三页,编辑于2023年,星期日

;子程序名:DTOB;功能:把由SI指出的存储单元中的有符号十进制数转换为二进制数,结果存于AX寄存器中。;入口参数:SI指向十进制数(非压缩BCD数)首址;DI指向二进制数存储区首址;CX=十进制数位长(含符号位);出口参数:AX=返回码,AX=0,十进制数有错或结果溢出;AX≠0,

AX中为转换后的二进制数。;使用寄存器:BX为存放各十进制数位运算值,DX存放乘积运算的高位值。DTOBPROCPUSHDX;保护寄存器

PUSHBXMOVBL,[SI];取符号

CMPBL,0JZPLUS;为正,转PLUSCMPBL,OFFH;为负吗?JNZEROR;非负非正转EROR处第四十七页,共六十三页,编辑于2023年,星期日PLUS:MOV[DI],BL;存结果的符号DECCXINCSIMOVAL,[SI];取十进制数高位存AX中MOVAH,0MOVDX,10NEXT:PUSHDXMULDX;AX*10→AXPOPDXINCSIMOVBL,[SI];取低位十进制数MOVBH,0ADDAX,BX;AX加上低位数JCEROR;进位,转ERORLOOPNEXT;未处理完循环第四十八页,共六十三页,编辑于2023年,星期日CMPBYTEPTR[DI],OFFH;判结果符号

JNZDONE;非负数,结束

NEGAX;负数,取补

MOVWORDPTR[DI],AX;补码送回

JMPDONEEROR:MOVAX,0;置错误返回码DONE:POPBXPOPDXRETDTOBENDPCODEENDSENDSTART第四十九页,共六十三页,编辑于2023年,星期日利用堆栈传递参数举例例4.4.5NUMB开始的地址处,有5个压缩型BCD码,将它们相加,其和在屏幕上显示。源程序:STACKSEGMENTPARASTACK'STACK'DW50DUP(?)TOPLABELWORDSTACKENDSDATASEGMENTNUMBDB25H,36H,78H,49H,07HNOUTDB5DUP(?)NEQU5DATAENDS

第五十页,共六十三页,编辑于2023年,星期日

EXTRNADDS:FARDISMACROXMOVDL,XORDL,30HMOVAH,02INT21HENDMMCODESEGMENTPARAPUBLIC'CODE'ASSUMECS:MCODE,DS:DATA,SS:STACK

START:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSP,OFFSETTOPMOVAX,OFFSETNUMBPUSHAXMOVAX,NPUSHAXCALLADDSCALLDISPMOVAH,4CHINT21H第五十一页,共六十三页,编辑于2023年,星期日DISPPROCMOVBX,AX;存累加和MOVCL,4SHRAH,CL;右移叫工DISAH;显示高位值MOVAH,BHANDAH,OFH;取低位数

DISAH;显示低位数

SHRAL,CLDISALMOVAL,BLANDAL,0FHDISALRETDISPENDPMCODEENDSENDSTART第五十二页,共六十三页,编辑于2023年,星期日NAMEADDSRSCODESEGMENTPARAPUBLIC‘CODE’

ASSUMECS:SCODEADDSPROCFARPUBLICADDSPUSHBPMOVBP,SPPUSHCXPUSHBXMOVCX,[BP+6];取数据项数NMOVBX,[BP+8];取数据首地址MOVAX,0ADER:ADDAL,[BX]DAAADCAH,0INCBXLOOPADERPOPBXPOPCXPOPBPRET4;退回到本例使用前的栈顶

ADDSENDPSCODEENDSEND第五十三页,共六十三页,编辑于2023年,星期日

4.5软中断和BIOS调用

4.5.18088/8086的中断系统一、8088/8086的中断源

第五十四页,共六十三页,编辑于2023年,星期日软中断

软中断指令格式:INTn

n为中断类型号,n=0~256。0~7中断类型号做为内部中断不可屏蔽中断的类型号。8~0FH做为外部硬中断。内部中断(1)除法溢出中断(2)溢出中断(3)单步中断第五十五页,共六十三页,编辑于2023年,星期日二、中断矢量表

1.中断矢量表结构与功能中断矢量表存256个中断处理程序入口地址的表,共占用1024个字节,位于物理(0段)地址OOO0OH-003FFH。每个入口地址占四个字节,高两个字节存放中断处理程序的段地址,低两个字节存放中

温馨提示

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

评论

0/150

提交评论