




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第四章 汇编语言程序设计,高级语言如C+,汇编语言如MCS-51指令,汇编,目标文件,按照语法格式编写源程序*.ASM *.C,按照语法格式将源程序翻译成机器代码,计算机识别的二进制代码*.OBJ,编译,目标文件,2,本章结构,4.1 单片机程序设计语言概述 4.4 汇编语言编辑和汇编及其伪指令 4.2 汇编语言程序的基本结构形式 顺序程序结构 分支程序结构 循环程序结构 4.3 汇编语言程序设计举例,3,4.1.1、 程序设计语言及语言处理程序,程序设计语言分:机器语言、汇编语言和中高级语言 1.机器语言: 硬件识别,二进制,无需翻译、直接执行,面向机器; 速度快,效率高,难以辨认和记忆
2、,易错,难修改。,4.1 概述,地址 机器码源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0,4,2.汇编语言: 由字母,数字符号组成,翻译成机器语言再由CPU执行; 面向机器,编译后执行速度接近机器语言,易读,不易错,但必须熟悉指令系统,移植性差; 程序精细、具体,结构紧凑,运行时间精确,高效; 运算量大,实时性要求高时常用汇编。,地址 机器码源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0,5,3.中高级语言: 面向过程和面向对象。参照数学语言又类
3、似日常会话语言。 高级语言中,一条高级语言指令,代替几上百条汇编指令。 直观,易学,便于移植(由编译器负责),也需经过编译、解释成机器代码后执行。 C、BASIC、C,6,4.1.2、汇编语言特点及其格式 P77,2.语句格式 标号: 操作码 操作数, ;注释 (1).标号: 标号是由18个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。 不能使用本汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。 标号后边必须跟以 “ :”。 同一标号在一个程序中只能定义一次,不能重复定义,大小写一样。 一条语句可以有标号,也可以没有标号
4、。标号的有无取决于本程序中的其它语句是否需要访问这条语句。,7,错误的标号 正确的标号 1BT:BT1: BEGIN BEGIN: TB十5T: TA5T: ADD: ADD1: 3)操作数:是参加运算的数据或者数据的地址。 4)注 释:解释说明,增加可读性,汇编时不产生任 何机器码,8,4.1.3 程序设计基本方法,在能完成规定的功能任务基础上还要求: 执行速度快、占用内存少、条理清晰、 阅读方便、便于移植、巧妙而实用。 步骤: 1分析问题 2确定算法 3设计程序流程图4分配内存单元 5编写汇编语言源程序6汇编并调试程序,9,4.1.4、MCS-51汇编语言的伪指令: P93 作用:告诉汇编
5、程序如何完成汇编,不产生机器码。 (1)、ORG:起始伪指令Origin 指明程序和数据块起始地址。 指令地址 机器码 源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0 ORG 3000H 3000H 23 DB 23H,100,A 3001H 64 3002H 41,10,(2)、END 汇编结束伪指令。 P94 例:START: END (3)、EQU 赋值伪指令。 格式:EQU 赋值项可以是常数、地址、标号或表达式; 其值可以是8位或16位二进制数; 赋值后的字符名称可以当作地址使用,也可以当作立即数使用。 字符名称
6、必须是以字母开题的字母数字串,必须先前未定义过。 X1 EQU 2000HX2 EQU 0FHMAIN:MOV DPTR,#X1 ADD A,#X2,11,(4)DB定义字节伪指令 格式:标号:DB 将项表中的字节数据存放到从标号开始的连续字节单元; 项表可以是一个字节、用逗号隔开的字节串或中的ASCII字符串; 例如: ORG2300H SEG:DB0C2H DB30H,97H,100,AC 汇编结果: 2300H=?2301H=?2302H=?,12,(5)DW定义字伪指令(Define Word) 格式:标号:DW 用于定义16位的地址表。 汇编后,每个16位二进制数按照低地址存高位字节
7、,高地址存放低位字节的顺序存放。 例如: ORG1000H TAB:DW2030H,8CH,AB 汇编后:(1000H)20H,(1001H)30H,13,(6)DS定义存储区伪指令 格式:标号 DS 从指定地址开始,保留指定数目的字节单元作为存储区备用。 例如: ORG1000H DS20 汇编后从1000H地址开始保留20个连续的单元。 注意: 对于MCS51单片机,DB/DW/DS伪指令只能对程序存储区使用,而不能对数据存储器使用。,14,(7)BIT位定义伪指令 格式: BIT 把一个可以位寻址的位单元赋给所规定的字符名称。 例如: X1BIT30H X2BITP1.0 汇编后,位地址
8、30H赋给了X1,P1.0对应的位地址(90H)赋给了X2。,15,4.2 汇编程序的基本结构,顺序程序结构 分支程序结构 单分支程序结构 多分支程序结构 循环程序结构,16,17,4.2.1 顺序程序结构,汇编语言程序中最简单、最基本的程序结构。 程序执行时一条接一条地按顺序执行指令,无分支、循环以及调用子程序。 ORG 0000H LJMP MAIN MAIN:MOVA , #30H ADDA , #58H MOV30H , A SJMP$,18,顺序程序结构分析: 找出关键的执行实际功能操作的指令,然后将其前面与该指令相关的指令规类为该指令的前期配置指令。并需要对指令占用的资源和操作的影
9、响有全局的把握。 MOV R0,#52HDEC R1MOV A,R0 MOV R1,#55HMOV A,R0ADDC A,R1 MOV A,R0ADDC A,R1MOV R0,A ADD A,R1MOVR0,A CLR A MOV R0,ADECR0ADDC A,#00H DECR0DEC R1 MOV 20H,A,19,4.2.2 分支程序结构,程序分支是通过转移指令实现的,也称为选择结构。可分为单分支和多分支两类。 单分支程序结构,通过条件转移指令实现,即根据条件对程序的执行进行判断、满足条件则进行程序转移,不满足条件就顺序执行程序。可用指令JZ、JNZ、CJNE、DJNZ;JC、JNC、
10、JB、JNB、JBC。 多分支程序是首先把分支程序按序号排列,然后按序号值进行转移。 指令:JMP A+DPTR,20,1、单分支程序结构,程序分支是通过条件转移指令实现的,即根据条件对程序的执行进行判断,满足条件则进行程序转移,不满足条件程序就顺序执行。 ( 1 )无条件转移:LJMP,AJMP,SJMP ( 2 )条件转移:JZ、JNZ、CJNE和DJNZ等。 ( 3 )按位转移:JC、JNC、JB、JNB和JBC等。 使用这些指令,可以完成为0、为1、为正、为负以及相等、不相等等各种条件判断。,21,例4.2 假定外部RAM中有ST1、ST2、ST3共3个连续单元,其中ST1和ST2单元
11、中分别存放着两个8位无符号二进制数,要求找出其中的大数并存入ST3中。 START: CLRC MOV DPTR,#ST1 MOVXA,DPTR;取第一个数 MOV R2,A INC DPTR MOVXA,DPTR;取第二个数 SUBBA,R2 JNC BIG1 ;第二个数大转BIG1 XCHA,R2;第一个数大,整字节交换继续 BIG0: INCDPTR MOVXDPTR,A;存大数 RET BIG1: MOVXA,DPTR;将大数存入A SJMP BIG0,22,2.多分支程序结构,常使用CJNE、JMP A+DPTR指令 1.多重单分支:多条CJNE指令 2.JMP A+DPTR 与数据
12、表配合: 范围有限,256字节。 3.JMP A+DPTR 与转移指令配合: A中值为序号与转移指令字节数的乘积。 4.利用RET指令,通过堆栈操作实现: 将分支地址从入口地址表取出后,压入堆栈,利用RET指令赋予PC分支地址。,23,2.1 使用多条CJNE指令 假定分支序号值保存在累加器A中,则可使用 CJNEA, #data, rel,24,例4.3某温度控制系统,采集的温度值(Ta)放在累加器A中。此外,在内部RAM54H单元存放控制温度下限制(T54),在55H单元存放控制温度上限制(T55)。若Ta T55,程序转向JW(降温处理程序);若TaT55,转降温程序 CJNEA,54H
13、,LOOP2 ;Ta T54,转向LOOP2 AJMPFH; TaT54,返回 LOOP2:JCSW ;若C1,表明TaT54,转升温程序 FH: RET,25,2.2 通过查数据表(地址表)的方法 首先在程序中建立一个差值表,将各分支入口地址与该表首地址的差值按序排列其中; 差值表首地址送DPTR; 分支序号值送A中; 通过JMPA+DPTR指令进行分支。,26,例: MOVA,R3 MOVDPTR,#BRTAB MOVCA,A+DPTR JMPA+DPTR BRTAB:DBBR0-BRTAB DBBR1-BRTAB DBBR2-BRTAB DBBR3-BRTAB BR0:MOVA,R0 S
14、JMPBRE BR1:MOVXA,R0 SJMPBRE,BR2:MOVA,R1 ANLA,#0FH ANLP2,#0F0H ORLP2,A MOVX A,R0 BR3:MOVDPL,R0 MOVDPH,R1 MOVX A,DPTR BRE:SJMP$,27,2.3 使用查转移指令表的方法 表中放的是转移指令 设置一个序号指针 转移指令表首地址送给DPTR 通过JMP A+DPTR指令进行分支,28,MOVDPTR,#3000H MOVA,R3 CLRC RLCA JMPA+DPTR 3000H 3001H 3002H AJMPDS 3003H 3004H AJMPXS 3005H 3006H
15、AJMPCR,例:假定键盘上有3个按键,功能说明如下表,用程序实现:键值序号存放在R3中,29,2.4通过堆栈操作实现 MOVDPTR,#BRTAB;分支入口地址表首址 MOVA,R3 RLA;分支转移值乘以2 MOVR1,A;暂存A值 INCA MOVCA,A+DPTR;取低位地址 PUSHACC;低位地址入栈 MOVA,R1;恢复A值 MOVCA,A+DPTR;取高位地址 PUSHACC;高位地址入栈 RET;分支入口地址装入PC BRTAB: DWBR0;分支程序入口地址表 DWBR1 DWBR127,30,4.2.3 循环程序,循环程序一般由4部分组成: (1)置循环初值。 (2)循环
16、体。 (3)循环修改。 (4)循环控制。 循环结构: 图(a)结构是“先执行后判断”,适用于循环次数已知的情况。 图(b)结构是“先判断后执行”,适用于循环次数未知的情况。,31,4.2.3 循环程序,32,例:设有一字符串以回车符为结束标志,并存放在内部RAM从40H单元开始的连续存储单元中,编写测试字符串长度的程序。 MOVR2,#0FFH;设置长度计数器初值 MOVR0,#3FH;设置字符串指针初值 LOOP:INCR2 INCR0 CJNER0,#0DH,LOOP RET,33,例:把内部RAM中其首地址为data的数据串传送到外部RAM中以buffer为首地址的区域,直到发现“$”字
17、符的ASCII码为止。同时规定数据串的最大长度为32个字节。,MOVR0,#data MOVDPTR,#buffer MOVR1,#20H LOOP:MOVA,R0 CLRC SUBBA,#24H JZLOOP1 MOV A,R0 MOVX DPTR,A INCDPTR INCR0 DJNZR1,LOOP LOOP1:RET,34,4.2.4 子程序设计,一、子程序的概念 子程序:执行过程相同的部分编成一个独立的程序段。 子程序调用:控制从主程序转向子程序的过程 子程序返回:子程序指向完毕后返回主程序的过程 返回地址:返回到主程序调用指令的下一条指令的地址,即断点地址。 子程序的嵌套:子程序内
18、部还可以再调用另一个子程序。,35,4.2.4 子程序设计,二、子程序的调用返回 调用: 通过指令ACALL addr11和LCALL addr16来实现:先将PC中的内容(断点地址)压入堆栈保护,然后再将调用地址送入PC,转向子程序入口地址; 安排压栈指令保护现场,保护不希望被子程序更改内容的寄存器,返回后再恢复现场。 返回: 通过指令RET实现:将堆栈中的断点地址弹出送入 PC。 安排相应的指令,处理子程序提供的出口数据。,36,三、主程序与子程序的参数传递 入口参数和出口参数的存放参数传递; 用累加器或工作寄存器来传递参数 程序编制简单,容易阅读。 工作寄存器数量有限,不能传递太多的参数
19、; 用指针寄存器来传递参数 若参数在片内RAM中,可用R0或R1作指针寄存器; 若参数在外部RAM或程序寄存器中,可用DPTR作指针寄存器。 用堆栈来传递参数 调用前,主程序用PUSH指令将有关参数压入堆栈中。 进入子程序,通过堆栈指针来间接访问堆栈中的参数。子程序结束前,也可以把结果压入堆栈保存起来; 子程序返回后,主程序再用POP指令得到结果参数。,4.2.4 子程序设计,37,四、子程序及调用举例 例:求两个无符号数据块的最大值。设这两个数据块的首地址分别为30H和50H,每个数据块的首字节存放着该数据块的长度,求最大值存入7FH中。 先编写出求无符号数据块最大值的子程序,然后在主程序中
20、通过两次调用该子程序,分别求出两个数据块的最大值,再比较他们的大小。 规划: 入口:数据块的首地址送入R1; 出口:最大值在A中 占用资源:A,R1,R2,38,主程序: ORG0000H LJMPSTART ORG0100H STRAT:MOVR1,#30H ;置入口参数 ACALLBMAX ;调用子程序 MOV7FH,A ;暂存最大值 MOVR1,#50H;置入口参数 ACALLBMAX; CLRC SUBBA,7FH;比较两个最大值 JCNEXT;A小则转 ADDA,7FH;A大恢复A MOV7FH,A NEXT:SJMP $,子程序: ORG2000H BMAX:MOVR2,R1;取数
21、据块长度 DECR2;设置循环计数值 INCR1;修改指针 MOVA,R1;取第一个数 INCR1;指向第二个数 LOOP:CLRC; SUBBA,R1;减法比较 JNCLP1;无借位A大 MOVA,R1;否则大者送A SJMPLP2 LP1:ADDA,R1;A大恢复A LP2:INCR1;修改地址指针 DJNZR2,LOOP ;未完继续比较 RET;比较完,返回,39,4.3 程序设计举例,4.3.1 算术运算程序 1.加减法运算 1.1 不带符号的多个单字节数加法 R0数据指针;R1和的高位;R2和的低位;R3字节个数N - MOVR0,#21H MOVR3,#N MOVR1,#00H M
22、OVR2,#00H LOOP: MOVXA,R0 ADDA,R2 MOVR2,A JNCLOOP1 INCR1 LOOP1:INCR0 DJNZR3,LOOP,40,1.2不带符号的两个多字节数减法 字节数N;被减数单元地址R0;减数单元地址R1; 差地址R0 - CLRC MOVR2,#N LOOP :MOVA,R0 SUBBA,R1 MOVR0,A INCR0 INCR1 DJNZR2,LOOP JCQAZ;最高字节有借位转溢出处理 RET,41,4.3.1 算术运算程序,1.3 带符号数加减运算 减法运算:将减数的符号位取反,即可把减法运算按加法运算的原则来处理; 加法运算:首先要进行两
23、数符号的判断。 符号相同,进行两数相加,并以被加数符号为结果符号; 符号不同,进行两数相减。 若差数为正,则为最后结果,并以被减数符号为结果符号; 若差数为负,则应将其差数取补,并把被减数的符号取反作为结果符号。,42,2. 乘法运算 例4.9:双字节无符号数乘法程序:R2R3R6R7=R2R3R4R5,MULTD:MOVA,R3;计算R3R7 MOVB,R7 MULAB MOVR4,B;暂存部分积R3R7H MOVR5,A;低字节存入R5 MOVA,R2;计算R2R7 MOVB,R7 MULAB ADDA,R4;累加R3R7H+R2R7L MOVR4,A;暂存部分积 CLRA ADDCA,B
24、;R2R7H+CYA MOVR7,A;暂存A MOVA,R3;计算R3R6 MOVB,R6 MULAB ADDA,R4;R3R7H+R2R7L+R3R6L MOVR4,A MOVA,R7 ADDCA,B ;R2R7H+R3R6H低位进位,MOVR3,A;暂存部分积 CLRA RLCA;进位移入A最低位 XCHA,R2;计算R2R6 MOVB,R6 MULAB ADDA,R3;R2R7H+R3R6H+R2R6L MOVR3,A MOVA,R2;进位送入A ADDCA,B;R2R6H+进位 MOVR2,A:R2R6H进位送R2 RET,R2 R3 R6 R7,R3R7H R3R7L,R2R7H R
25、2R7L,R3R6H R3R6L,R2R6H R2R6L,43,4.3.2 数制转换程序,1.十六进制转换为ASCII码 例:2位16进制数存放于50H单元; 转换结果存放于51H和52H单元; MAIN:主程序;HASC:子程序,HASC: DECSP DECSP POPACC ANLA,#0FH ADDA,#7 MOVCA,A+PC PUSHACC INCSP INCSP RET ASCTAB:DB“01234567” DB “89ABCDEF”,MOVSP,#3FH MAIN:PUSH50H ACALLHASC POP51H MOVA,50H SWAPA PUSHACC ACALLHAS
26、C POP52H,44,2.ASCII码转换为16进制数 “字符0”“字符9”的ASCII码值为“30H”“39H”,它们与30H之差恰好为“00H”“09H”,结果均0AH。 “字符A”“字符F”的ASCII码值为“41H”“46H”,它们各自减去37H后恰好为“0AH”“0FH”,结果0AH。 例:把外部RAM30H3FH单元中的ASCII码依次转换为16进制数,并存入内部RAM60H67H单元之中。,45,R0:ASCII码地址指针;R1:16进制数存放地址指针;R7:16进制数字节个数 MAIN:MOVR0,#30H MOVR1,#60H MOVR7,#08H AB:ACALLTRAN
27、;调用转换子程序 SWAPA;A高低4位交换 MOVXR1,A;存放于外部RAM INCR0 ACALLTRAN;调用转换子程序 XCHDA,R1;16进制数拼装 INCR0 INCR1 DJNZR7,AB;继续 HALT:AJMPHALT TRAN:CLRC;清进位位 MOVXA,R0;取ASCII码 SUBBA,#30H;减30H CJNEA,#0AH,BB AJMPBC BB:JCDONE BC:SUBBA,#07H;大于等于0AH,再减07H DONE:RET,46,3.单字节二进制数(0FFH)转换为双字节BCD码(0255) 入口:A二进制数 出口:存入R0所指定的单元 占用资源:
28、A、B、R0 - BINBCD:MOV B,#100 DIV AB ;A=百位数 MOV R0,A INC R0 MOVA,#10 XCHA,B DIVA,B ;A=十位数;B=个位数 SWAPA ;十位移到高半字节 ADDA,B ;形成十位和个位压缩的BCD码 MOV R0,A RET,47,4.3.3 定时程序,1.单循环定时程序 NOP:1个机器周期 DJNZ:2个机器周期 MOVR5,#TIME LOOP: NOP NOP DJNZR5,LOOP 该循环定时时间:4机器周期TIME 最大定时时间:4机器周期?,48,2.较长时间的定时程序 采用多重循环的方法 例:双重循环 MOVR5,
29、#TIME1 ;1个机器周期 LOOP2:MOVR4,#TIME2 ;1个机器周期 LOOP1:NOP ;1个机器周期 NOP ;1个机器周期 DJNZR4,LOOP1 ;2个机器周期 DJNZR5,LOOP2 ;2个机器周期 RET ;2个机器周期 定时时间: (TIME24+2+1)TIME1机器周期(2+1)机器周期,49,例4-12: 延时程序设计。设8051单片机使用的晶振为12MHz,要求用软件方法实现60ms延时程序。 分析:2us3000060ms DELAY:MOVR7,#200;1 DL1: MOVR6,#150;1 DL2:DJNZR6,DL2;2 DJNZR7,DL1;
30、2 SJMP$ 准确延时时间:(300us2us+1us)200+1us60.601ms,50,3.调整定时时间 通过在循环程序段中增减指令的方法进行微调; 这些指令起到调节机器周期的作用,称为哑指令,例如NOP。 使用哑指令注意: 不破坏有用存储单元的内容; 不破坏有用寄存器的内容; 不破坏有用标志位的状态;,51,例:晶振频率6MHz MOVR0,#TIME;1 LOOP:ADD A,R1;1 INCDPTR;2 NOP;1 DJNZR0,LOOP;2,52,4.以一个基本的延时程序满足不同的延时要求 先设计一个基本的延时程序,使其延时时间为各定时时间的最大公约数; 然后以此基本程序为子程
31、序,通过不同的循环次数进行调用。 例如:要求定时时间为5us,10us,20us;设计一个1us的延时子程序,分别循环5次、10次、20次。,53,4.3.4 查表程序,1.查表指令 MOVC A,A+DPTR 可给DPTR赋予16位的地址; 查表范围64KB; 数据表格可以在64KB范围内任意设置,可被多个程序块公用。 MOVA,A+PC PC不能赋值,其基址固定; 查表范围256B; 表格只能被本程序段使用。,54,例1 近程查表 设程序中的数据表格为: 1010H:02H 1011H:04H 1012H:06H 1013H:08H 执行程序: 1000H:MOV A,#0DH 1002H
32、:MOVC A,A+PC 1003H:MOV R0,A 结果为:(A)= 02H ,(R0)= 02H ,(PC)= 1004H,55,例2 远程查表 设程序中的数据表格为: 执行程序: 1000H:MOV A,#10H 1002H:PUSH DPH 1004H:PUSH DPL 1006H:MOV DPTR,#7000H 1009H:MOVC A,A+DPTR ; 100AH: POP DPH 100CH:POP DPL 结果为:(A)= ,(PC)= ,(DPTR)=,7010H:02H 7011H:04H 7012H:06H 7013H:08H,02H 100EH 原值高低字节互换,56
33、,4.3.5数据极值查找程序,例:内部RAM20H单元开始存放8个无符号8位二进制数,找出其中的最大数。 假定在比较过程中,以A存放最大数,与之逐个比较的另一个数放在2AH单元中。比较结束后,把查到的最大数送到2BH单元。 占用资源 R0:数据区首址 R7:数据区长度,57,58,MOVR0,#20H MOVR7,#08H MOVA,R0 DECR7 LOOP:INCR0 MOV2AH,R0 CJNEA,2AH,CHK CHK:JNCLOOP1 ;A大,转移 MOVA,R0 LOOP1:DJNZR7,LOOP MOV2BH,A HERE:AJMPHERE,59,4.3.6 数据排序程序,1.算
34、法说明(冒泡法) 冒泡法:相邻数互换,类似气泡上浮。 每次冒上去的不一定是本次最小的数,但每次沉底的必是本次最大的数。,60,注: 每次冒泡都从前向后排定了一个大数(升序),因此每次冒泡所需进行的比较次数都递减1.实际编程时,为了简化程序,一般把各次的比较次数都固定为(n1)次。 对于n个数,理论上需进行n1次冒泡才能完成排序。 判定排序是否完成的最简单方法是看各次冒泡中是否有互换发生。因此,一般控制程序结束不用计数法,而是使用设置互换标志的方法。,61,62,例:8个数连续存放在20H单元开始的内部RAM中,用冒泡法排序。 R7:比较次数计数器;F0:交换标志,“1”有交换,”0”无交换; R0:数据存储区首址;2AH:存后数;2BH:存前数; SORT:MOVR0,#20H MOVR7,#07H CLRF0 LOOP:MOVA,R0 MOV2BH,A INCR0 MOV2AH,R0 CLRC SUBBA,R0 JCNEXT ;前数小,不交换 MOVR0,2BH ;前数大,交换 DECR0 MOVR0,2AH INCR0 SETBF0 NEXT:DJNZR7,LOOP JBF0,SORT SJMP$,63,4.3.7 数据检索,1.顺序检索 把关键字与数据区中的数据从前向后逐个比较,判断是否相等。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加工承揽意向合同范本
- 出让合同范本
- 买砖合同范本
- 儿女抚养合同范本
- 农村租房建基站合同范本
- 代建合同范本政府盖章
- 世界500强合同范本
- 会务代办合同范本
- 供货定金合同范本
- 别墅门窗出售合同范本
- 2024至2030年中国毛绒玩具数据监测研究报告
- 建筑复工复产安全培训
- GB 21258-2024燃煤发电机组单位产品能源消耗限额
- 八年级上学期语文12月月考试卷
- 醛固酮增多症与原发性醛固酮增多症概述
- 山东省淄博市2023-2024学年高一下学期期末教学质量检测数学试题
- 广东省2024年普通高中学业水平合格性考试语文仿真模拟卷01(解析版)
- 2025届新高考生物精准复习+提高农作物产量
- 第6课欧洲的思想解放运动教学设计2023-2024学年中职高一下学期高教版(2023)世界历史
- 2024年云南省昆明市选调生考试(公共基础知识)综合能力题库必考题
- 2024年时政试题库(夺分金卷)
评论
0/150
提交评论