




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章汇编语言程序设计
第一节汇编语言上机过程
第二节汇编语言程序结构
第三节指示性语句
第四节汇编语言程序举例
第五节BIOS和DOS功能调用
第六节汇编语言程序设计
1
作业:3-2,3-6,3-7,3-9,3-12
复习内容:P97-P114
预习内容:P114-P140
P145-147(不作要求,自学)
2
上环境
用户开发的程序:ABC.exe等
操作系统:DOS系统
编辑器EDIT.exe
编程序.MASM.exe
连接程序:LINKexe
调试程序:DEBUG.exe
CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备
3
第一节汇编语言上机过程编辑源程序EDITABC.ASM
汇编源程序MASMABC.ASM
I-----------
D:>EDITABC.asm〈有汇编错误信息?产-------------
D:>MASMABC;
形成目标程序ABC.OBJ
有语法错,回EDIT下改该程序
D:>LINKABC;连接目标程序LINKABC.OBJ
有错,回在EDIT下改程序的连接错凄信息?)丫----
IN____
D:>ABC形成可执行程序ABC.EXE
运行结果错,回下改程序
EDIT装入可执行程序到内存并执行
或在DEBUG下调试,找原因。D:\>sub>ABC
D:>DEBUGABC.exe〈运行好果正确下一程序]一
_________IN
1DEBUG调试程序查错?-------►
_______1丫
用DEBUG调试可执行程序」戈到原因「
D:\>suM>EBUGABC.EXE^■
第二节汇编语言程序结构
一,、程序结构
二、语句结构
5
汇编语言程序结构例一
程序:movs.asm
功能:实现数据传送功能
数据段1传送至》数据段2
目的:学习程序结构
6
一、程序结构;汇编语言程序结构例一movs.asm
;实现数据传送功能
aaSEGMENT;数据段1
•程序由数条语句构成,每条语句占一行。strlDB'Hello!'
指令性语句(指令语句)aaENDS
bbSEGMENT;数据段2
指示性语句(伪指令语句)
str2DB6dup(?)
•分段结构bbENDS
程序按段编写,与8088内存分段编址相对应。ccSEGMENT;代码段
ASSUMECS:cc,DS:aa,ES:bb
每段由伪操作SEGMENT开始、由ENDS结束。start:CLD
MOVAX,aa
•程序最后为END结束语句,后跟一启动地址。
MOVDS,AX
启动地址指示程序开始执行的第一条语句。LEASI,strl
MOVAX,SEGstr2
•程序中设有返回DOS的功能。
MOVES,AX
使程序执行完后返回DOS系统的命令接受状态。MOVDI,OFFSETstr2
MOVCX,6
•程序中用到内存操作数时,REPMOVSB
应按操作数的寻址方式,给相应的段寄存器赋值MOVAH,4CH
INT21H;返回DOS
ccENDS
ENDstart;指示程序结束
汇编语言程序结构例二
程序:scans.asm(子程结构)
子程内容:用二进制显示BX内容
功能:实现
用二进制显示
中断向量表中(0:0〜0:3FFH)
数据D0H的个数
目的:了解程序可由多个段构成
8
程序可由多个段构成,至少有一个代码段
;汇编语言程序结构例二(子程结构)scans.asm
;用二进制显示中断向量表中(0:0〜0:3FFH)数据D0H的个数
keyEQU0D0H;用符号表示常量(关键字)
codeSEGMENT;代码段开始;用二进制显示BX内容子程
ASSUMECS:codedisplayPROC
begin:MOVAX,0000H
MOVCX,16
MOVDS,AX
rotate:ROLBX,1
MOVSI,0000H
MOVDL,BL
MOVCX,0400H
ANDDL,01H
MOVBX,0
ADDDL,30H
MOVAL,key
MOVAH,2H
next:CMP[SI],AL
INT21H
JNZpoint
LOOProtate
INCBX
RET;子程返回
point:INCSI
displayENDP
LOOPnext
CALLdisplay;调用显示子程codeENDS;代码段结束
MOVAH,4CH;返回DOSENDbegin;指示程序结束和
INT21H;程序入口
9
二、语句结构
[名字H:1助记符[操作数,,一[;注释]
丁1
名字项助记符项操作数项注释项
例:
dataSEGMENT;数据段
varDB?
dataENDS
codeSEGMENT;代码段
ASSUMECS:code,DS:data
start:MOVAX,data
MOVDS,AX
MOVvar,CL
MOVAH,4cH
INT21H;返回DOS
codeENDS
ENDstart10
【名字H:]助记符[操作数,・・・][;注释]
名字项助记符项操作数项注释项
dataSEGMENT;数据段
L名字项varDB?
dataENDS
•据语句功能的不同,
codeSEGMENT;代码段
名字项可用来表示:ASSUMECS:code,DS:data
start:MOVAX,data
段名、变量名、MOVDS,AX
标号、过程名以及常量名等。MOVvar,CL
MOVAH,4CH
INT21H;返回DOS
codeENDS
ENDstart
11
[名字H:]助记符[操作数,・・・][;注释]
名字项助记符项操作数项注释项
•名字项用一个符号表示。
对符号的规定:
①由字符A〜Z,a〜z,0〜9及符号@、$、下划线—等组成,
最长31个字符,超出部分忽略。
②不能用数字打头,以免与十六进制数相混。
③不使用汇编程序中的保留字。(如指令的助记符等)
④对定义的符号不区分大小写。
12
[名字][:]助记符[操作数,•••][;注释]
名字项助记符项操作数项注释项
2.助记符项
助记符可以是指令、伪操作中的助记符。
对于指令,汇编程序将其翻译成机器语言指令。
MOVAX,100—B80001
对于伪操作,汇编程序据其要求的功能进行处理。
dataSEGMENT-data与一段值对应
stringDB4Tsinghua5一string与一内存地址对应
13
[名字H:]助记符[操作数,・・・][;注释]
名字项助记符项操作数项注释项
3.操作数项
・操作数给出参与操作的数或数所在的地方。
•操作数多于一个时,用逗号分开。
•操作数可以是常数、寄存器、存储器操作数、
标号名、过程名或表达式等。
14
常数
给出具体的数据。可以是数字常量或字符常量。
,,数字默认十进制,也可加D表示十进制数。如1234D,1234
/,数字后加B表示二进制数。如1010B
//数字后加H表示十六进制数。如1234H
字符常量,用单引号表示。如出下
汇编时,用字符对应的ASCH表示。如31H,32H,33H,34H
例datalDB12,34,56;十进制
data!DB12H,34H,56H;十六进制
MOVAL「G,;字符
stringDB612345;字符串
15
•A、B、C、D、E、F开头的十六进制数前面加0,
与H结尾的标识符区别。
如寄存器名AH、BH、CH、DH
变量名abcdH等
例movAL,0AH
movAL,AH
movBX,OabcdH
16
[名字][:]助记符[操作数,・・・][;注释]
名字项助记符项操作数项注释项
4.注释项
•由分号引出,用来说明语句或程序的功能。
汇编程序对分号后的内容不做处理。
•作用:①注释程序,增强程序可读性。
②可放在语句最前,暂时注释某语句,调试程序用。
例、、、
;MOVAH,2;显示提示信息
;MOVDL,'A,
;INT21H
第三节指示性语句/第四节汇编语言程序举例
一、程序开始和结束
二、段定义
三、变量定义
四、ASSUME语句
购汇编语言程序举例一
了解DOS的返回,装入功能
五、表达式及表达式中的操作符
汇编语言程序例二
六、过程定义(第五节程序设计介绍)
七、等值定义(第五节程序设计介绍)
副汇编语言程序例三(第五节程序设计介绍)18
指示性语句与指令性语句:
•指令性语句是用指令系统中的指令构成的语句。
例MOVAX,BX
•指示性语句是指示汇编程序进行汇编的操作。
例MOVAX,4+8中的+
codeSEGMENT中的SEGMENT
MOVBX,OFFSETstring中的OFFSET
19
•指示性语句与指令性语句区别
一个程序经汇编,连接和装入内存后,在执行程序之前:
,指示性语句的功能已经完成,故又称伪操作。
,而指令性语句的功能尚未完成,需控制CPU去执行,才能完成。
20
数据传送源程序hello2.asm程序经汇编、连接后,装入内存的情况如下:
aaSEGMENT;数据段1D:\masm>DEBUGhello2.exe
strlDB'Hello!'
-U:查看代码段
aaENDS
12A0:0000FCCLD
bbSEGMENT;数据段2
12A0:0001B89E12MOVAX,129E
str2DB6dup(?)
bbENDS12A0:00048ED8MOVDS,AX
ccSEGMENT;代码段12A0:00068D360000LEASI,[0000]
ASSUMECS:cc12A0:000AB89F12MOVAX,129F
12A0:000D8EC0MOVES,AX
ASSUMEDS:aa,ES:bb
12A0:000F8D3E0000LEADI,[0000]
start:CLD12A0:0013B90600MOVCX,0006
MOVAX,aa12A0:0016F3REPZ
MOVDS,AX12A0:0017A4MOVSB
LEASI,strl
12A0:0018B44CMOVAH,4C
MOVAX,bb
12A0:001ACD21INT21
MOVES,AX、、、
LEADI,str2
-D129E:0L10;查看数据段1的内容
MOVCX,6
129E:000048656C6C6F210000-0000000000000000
REPMOVSB
MOVAH,4CHHello!.........
INT21H-D129F:0L10;查看数据段2的内容
ccENDS129F:00000000000000000000-0000000000000000
ENDstart—
21
常用伪操作介绍
一、程序开始和结束
二、段定义
三、变量定义
四、ASSUME语句
五、表达式中的操作符
六、过程定义
七、等值定义
22
、模块定义和程序结束伪操作
1.NAME和TITLE伪操作
格式NAME模块名
格式TITLE模块名
▲在源程序开始可用NAME或TITLE为模块命名,
模块名的作用是指示给连接程序进行连接用。
▲源程序中可无模块定义,此时源文件名作为模块名。
23
2.END伪操作
格式END启动地址
▲作用是指示源程序到此结束。
汇编程序对END之后的语句不进行处理。
程序中所有有效语句应放在END语句之前。
▲源程序中必须有END结束语句。
汇编程序对无END语句的源程序不进行处理,
只给出无END语句错误信息。
24
假设TEST.asm是一个无END语句的汇编语言源程序。
其汇编结果如下:
D:\MASMTEST;/
Microsoft(R)MacroAssemblerVersion5.10
Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.
Endoffileencounteredoninputfile
Endoffileencounteredoninputfile
49968+421181Bytessymbolspacefree
0WarningErrors
0SevereErrors
D:\
由于没有END语句,汇编程序根本没对源程序进行汇编,
此时显示警告性错误总数为0,严重性错误总数为0,
用户不要被此值的误导。
25
▲启动地址可是一个标号或过程名,指示程序的入口O
程序装入内存后,系统跳转到入口处,开始执行程序。
aaSEGMENT;数据段1D:\masm>DEBUGhello.exe
strlDB^Hello!^-u:查看代码段
aaENDS129F:0000FCCLD
bbSEGMENT;数据段2129F:0001B89D12MOVAX,129D
str2DB6dup(?)129F:00048ED8MOVDS,AX
bbENDS129F:00068D360000LEASI,[0000]
ccSEGMENT;代码段129F:000AB89E12MOVAX,129E
ASSUMECS:cc129F:000D8EC0MOVES,AX
ASSUMEDS:aa,ES:bb129F:000FBF0000MOVDI,0000
start:CLD129F:0012B90600MOVCX,0006
MOVAX,aa129F:0015F3REPZ
MOVDS,AX129F:0016A4MOVSB
LEASI,strl129F:0017B44CMOVAH,4C
MOVAX,SEGstr2129F:0019CD21INT21
MOVES,AX、、、
MOVDI,OFFSETstr2-D129d:0110;查看数据段1的内容
MOVCX,6129D:000048656C6C6F210000-00000000000000
REPMOVSB00Hello!.........
MOVAH,4CH-D129e:0110;查看数据段2的内容
INT21H129E:00000000000000000000-0000000000000000
ccENDS
ENDstart
26
二、段定义伪操作
格式段名SEGMENT
段名ENDS
▲段定义由伪操作SEGMENT开始、ENDS结束。
其中:SEGMENT和ENDS必须成对出现,
且语句前必须有段名,段名必须相同。
▲SEGMENT和ENDS语句之间可以有指令和其他伪操作,
表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理
▲程序中可以定义多个段。
▲程序经汇编、连接及装入内存后,段名为一具体的段值。
27
数据传送源程序:程序经汇编、连接后,装入内存的情况如下:
aaSEGMENT;数据段1D:\masm>DEBUGhello2.exe
strlDB'Hello!'
-U:查看代码段
aaENDS
12A0:0000FCCLD
bbSEGMENT;数据段2
12A0:0001B89E12MOVAX,129E
str2DB6dup(?)
bbENDS12A0:00048ED8MOVDS,AX
ccSEGMENT;代码段12A0:00068D360000LEASI,[0000]
ASSUMECS:cc12A0:000AB89F12MOVAX,129F
12A0:000D8EC0MOVES,AX
ASSUMEDS:aa,ES:bb
12A0:000F8D3E0000LEADI,[0000]
start:CLD12A0:0013B90600MOVCX,0006
MOVAX,aa12A0:0016F3REPZ
MOVDS,AX12A0:0017A4MOVSB
LEASI,strl
12A0:0018B44CMOVAH,4C
MOVAX,bb
12A0:001ACD21INT21
MOVES,AX、、、
LEADI,str2
-D129E:0L10;查看数据段1的内容
MOVCX,6
129E:000048656C6C6F210000-0000000000000000
REPMOVSB
MOVAH,4CHHello!.........
INT21H-D129F:0L10;查看数据段2的内容
ccENDS129F:00000000000000000000-0000000000000000
ENDstart—
28
三、变量定义伪操作
格式变量名类型助记符操作数[,操作数,…]
▲用来定义程序中所用的内存操作数。
其中变量名指示内存操作数的地址(符号地址)
类型助记符指示内存操作数的类型(字节、字、双字等)
操作数指示内存操作数的内容
▲汇编程序将定义的操作数,按其类型分配内存单元数,
顺序存入变量名指向的内存单元中。
▲常用的类型助记符有:
DB指示其后的操作数为字节类型
DW指示其后的操作数为字类型
DD指示其后的操作数为双字类型
29
例・1・定义赋初值的变量yy
dataSEGMENT
xxDB1,-1OfcH
9zz
yyDW1,-1,OfcH
zzDD1r1,OfcH
dataENDS
30
例2・・定义字符串变量(只能用DB定义)
strl一546T,
73's'
dataSEGMENT69'i,
6e'n,
strlDB'TsingHua'67'g,
48
str2DB'INPUT:'OdH,OaH,$75'u'
61
str2f49T
dataENDS4e,N'
50P
55U
注意:3个及其以上的字符,546r
3a
只能用DB定义OdOdH
strlDW'abed'\/0aOaH
24$
str2DD6abcd5A
31
▲操作数可以是用常量、表达式和?表示。
*常量和表达式表示内存操作数的初始值,
其值应在其定义的类型范围内,否则汇编出错。
例aaDB270
bbDW80000人
亲用?表示不置初始值的内存操作数。
例ccDB?
*可用DUP复制操作符定义相同的操作数,其格式为
重复次数DUP(操作数)
例eeDB3DUP(4)
等价于eeDB4,4,4
32
例4:在DEBUG下查看变量存放情况。
dataSEGMENTD:\MASM>DEBUGvarible.exe
xxDB1,-1,OFCH
-U
yyDW1,-1,OFCH
12Al:0000B89E12MOVAX,U9E一段名data
zzDD1,-1,OFCH
12Al:00038ED8MOVDS,AX
strDB'TsingHua'12Al:00058D1E0000LEABX,[0000]—变量XX
bufDB4,?,4DUP(?)12Al:00098D360300LEASI,|0003]+变量yy
DB'dataend'12Al:000D8D3E0900LEADI,[0009]十变量zz
dataENDS12Al:00118D1E1500LEABX,[0015]十变量str
12Al:00158D361D00LEASI,|001D]变量buf
codeSEGMENT
12Al:0019B44CMOVAH,4C
ASSUMECS:code12Al:001BCD21INT21
ASSUMEDS:data
12Al:001DFF36243EPUSH|3E24]
start:MOVAX,data
-D129E:0L30
MOVDS,AX
LEABX,xx129E:000001FFFC0100FFFFFC-0001000000FFFFFF.
ttt
LEASI,yyxxyyZZ
LEADI,zz129E:0010FFFC000000547369-6E67487561040000TsingHua...
MOVAH,4CHbuf
INT21H129E:00200000006461746165-6E64000000000000...dataend
codeENDS'dataend'
ENDstart129E:0030B89E128ED88DIE00-008D3603008D3E09.........6...>.
四、ASSUME伪操作
格式ASSUME段寄存器:段名[,段寄存器:段名,…]
其中段寄存器为CS、DS、ES、SS中的一个
段名为用伪操作SEGMENT定义过的段名
例ASSUMECS:cc,DS:aa
▲ASSUME伪操作的作用
指示汇编程序指令中用到的标号、过程及变量所在的段。
其中对标号、过程必须用CS段寄存器指示
对变量可用CS、DS、ES、SS段寄存器指示
34
▲若未用ASSUME语句指示指令中用到的标号、
过程和变量所在的段,汇编程序将给出错误信息。
▲ASSUME语句只起指示作用,并无实际的操作。
在程序中引用定义的变量做内存操作数时,
需按寻址方式用传送指令(如MOV)给相应的段寄存器赋值。
35
value—►34
例用程序实现1234H+5678Hpl
78
dataSEGMENT56
valueDW1234H,5678Hresult—►oo
00
resultDW?
dataENDS
codeSEGMENT
ASSUMECS:code,DS:data
start:MOVAX,data;给口5赋值
MOVDS,AX
MOVAX,value;取数
ADDAX,value+2;两数相力口
MOVresult,AX;保存结果
MOVAH,4CH;返回DOS
INT21H
codeENDS
ENDstart
36
注释掉ASSUME语句,其汇编结果:
dataSEGMENTD:\MASM>MASMassume;
valueDW1234H,5678HMicrosoft(R)MacroAssemblerVersion5.10
resultDW?Copyright(C)MicrosoftCorp1981,1988.Allrights
dataENDSreserved.
codeSEGMENTassume.ASM(8):MissingorunreachableCS
;ASSUMECS:code,DS:dataassume.ASM(10):Cannotaddresswithsegmentregister
start:MOVAX,dataassume.ASM(U):Cannotaddresswithsegmentregister
MOVDS,AXassume.ASM(12):Cannotaddresswithsegmentregister
MOVAX,value
ADDAX,value+249872+421341Bytessymbolspacefree
MOVresult,AX
MOVAH,4CH0WarningErrors
INT21H4SevereErrors
codeENDS
D:\MASM>
ENDstart
37
程序中有ASSUME语句,经汇编,连接和装入内存后的情况:
dataSEGMENTD:\MASM>DEBUGassume.exe
valueDW1234H,5678HR;查看程序执行前各寄存器
resultDW?AX=OOOOBX=OOOOCX=0023DX=OOOO
SP=OOOOBP=OOOOSI=OOOODI=OOOO
dataENDS
DS=1295ES=1295SS=12A5
codeSEGMENT
CS=12A6IP=OOOO
ASSUMECS:code,DS:dataNVUPEIPLNZNAPONC
start:MOVAX,data;给。3赋值12A6:0000B8A512MOVAX,12A5
MOVDS,AX-U;查看在内存的程序
MOVAX,value;取数12A6:0000B8A512MOVAX,12A5
ADDAX,value+2;两数相加12A6:00038ED8MOVDS,AX
MOVresult,AX;保存结果12A6:0005A10000MOVAX,[0000]
MOVAH,4CH;返回DOS12A6:000803060200ADDAX,[0002]
INT21H12A6:000CA30400MOV[0004J,AX
12A6:000FB44CMOVAH,4C
codeENDS
12A6:0011CD21INT21
注意:
程序装入内存后,执行程序前,
当前的DS值并非程序定义的data段值,1295不等于12A5
38
思考:如果上例中没有MOVDS,AX程序执行的结果会怎样?
D:\MASM>DEBUGassume.exe
dataSEGMENT
R;查看程序执行前各寄存器
valueDW1234H,5678H
AX=0000BX=0000CX=0023DX=0000
resultDW?
SP=0000BP=0000SI=0000DI=0000
dataENDS
DS=1295ES=1295SS=12A5CS=12A6IP=0000
codeSEGMENT
NVUPEIPLNZNAPONC
ASSUMECSicode,DS:data
12A6:0000B8A512MOVAX,12A5
start:MOVAX,data;给口5赋值
-U;查看在内存的程序
;MOVDS,AX
12A6:0000B8A512MOVAX,12A5
MOVAX,value;取数
12A6:0003A10000MOVAX,|0000|
ADDAX,value+2;两数相加
12A6:000603060200ADDAX,|0002]
MOVresult,AX;保存结果
12A6:000AA30400MOV[0004],AX
MOVAH,4CH;返回DOS
12A6:000DB44CMOVAH,4C
INT21H
12A6:000FCD21INT21
codeENDS
39
结论:
1.ASSUME语句只起指示作用,没有赋值作用
2.程序中用到内存操作数时,
应按操作数的寻址方式,给相应的段寄存器赋值。
40
第三节指示性语句/第四节汇编语言程序举例
一、程序开始和结束
二、段定义
三、变量定义
四、ASSUME语句
购汇编语言程序举例一
了解DOS的返回,装入功能
五、表达式及表达式中的操作符
汇编语言程序例二
六、过程定义(第五节程序设计介绍)
七、等值定义(第五节程序设计介绍)
副汇编语言程序例三(第五节程序设计介绍)41
汇编语言程序举例一
42
例修BL寄存器的内容按二进制形式显示出来
(BL)10100110
3130313030313130
MOVCX,8;显示字符个数为8
next:SHLBL,1H寻显示位移至CF中
JCone;CF=1?
MOVDL,30H;CF=0,将0的ASCII放在DL中
JMPexit
one:MOVDL,31H;CF=1,将1的ASCH放在DL中
exit:MOVAH,2
INT21H;调用DOS功能显示
DECCX;循环次数减1
JNZnext;判断是否结束
、、、
43
codeSEGMENT
ASSUMECS:code
start:
MOVCX,8;显示字符个数为8
next:SHLBL,1;修显示位移至CF中
JCone;CF=1?
MOVDL,30H;CF=0,将0的ASCII放在DL中
JMPexit
one:MOVDL,31H;CF=1,将1的ASCH放在DL中
exit:MOVAH,2
INT21H;调用DOS功能显示
DECCX;循环次数减1
JNZnext;判断是否结束
codeENDS
ENDstart
44
D:\>MASMSBL;2汇编成ShowBL.obj
Microsoft(R)MacroAssemblerVersion5.10
Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.
48912+447243Bytessymbolspacefree
0WarningErrors
0SevereErrors
D:\>LINKSBL;2连接成ShowBL.exe
Microsoft(R)OverlayLinkerVersion3.61
Copyright(C)MicrosoftCorp1983-1987.Allrightsreserved.
LINK:warningL4021:nostacksegment
D:\>SBL2装载并执行ShowBL.exe
请猜想执行的结果?45
D:\>DEBUGSBL.exe2;用DEBUG装入程序
-U2
0B5E:0000B90800MOVCX,0008、
0B5E:0003D0E3SHLBL,1
0B5E:00057205JB000C
0B5E:0007B230MOVDL,30
0B5E:0009EB03JMP000Ehello.exe
0B5E:000B90NOPr用户程序
0B5E:000CB231MOVDL,31
0B5E:000EB402MOVAH,02
0B5E:0010CD21INT21
0B5E:001249DECCX
0B5E:001375EEJNZ0003)
0B5E:001509E8ORAX,BP'
0B5E:001796XCHGSI,AX与用户程序相连的
0B5E:001800F8ADDAL,BH内存内容被看作
0B5E:001AB262MOVDL,62程序时
0B5E:001CFFFF???DJ一死机
0B5E:001DEBOAJMP0029
▲复习DOS系统的启动过程
磁盘
执行用户程序后,引导程序
IO.SYS
>DOS
若要返回DOS状态,内存MSDOS.SYS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位委托代理人证明3篇
- 分公司与子公司的团队建设3篇
- 农村无害化厕所改造协议3篇
- 借款合同争议起诉状范本3篇
- 入职承诺保证书样式设计2篇
- 回迁安置房买卖协议2篇
- 增强部门团队凝聚力3篇
- 工程建筑劳务合作协议
- 工程项目施工合同进度控制3篇
- 管道工程行业自律与规范完善路径探索与实施考核试卷
- 带状疱疹病人的个案护理
- 《中药鉴定技术》课件-五味子的鉴定
- 大数据 AI大模型-智慧统计大数据平台解决方案(2023版)
- 江苏省安全员《B证》考试题库及答案
- 自杀及其预防课件
- 灰姑娘童话故事
- 铅锌矿的冶炼技术进展与设备改进
- 等离子切割机操作手册与安全操作规程
- 印刷合同:纸袋印刷合作
- 快学Scala(中文版第2版)
- 人工智能知识竞赛题库(含答案)
评论
0/150
提交评论