 
         
         
         
         
        版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一一汇编器和汇编程序汇编器和汇编程序二二ARM汇编器所支持的伪指令汇编器所支持的伪指令 符号定义符号定义、数据定义数据定义、汇编控制汇编控制、其他其他三三. . 汇编语言的语句格式汇编语言的语句格式四四. . ARM汇编语言程序设计汇编语言程序设计 程序框架程序框架、程序结构、程序结构(顺序、分支、循环顺序、分支、循环、子程序调用子程序调用)、程序实例程序实例五五ARM汇编语言与汇编语言与C/C+的混合编程的混合编程1. ARM工程及混合程序框架工程及混合程序框架2. C与汇编之间的函数调用与汇编之间的函数调用3. C/C+语言和汇编语言的混合编程语言和汇编语言的混合编程符号符号、表达式和运算
2、符表达式和运算符汇编语言程序设计特点汇编语言程序设计特点1. 1. 汇编语言依赖于机器硬件,因此汇编源程序几乎不具有移植性;汇编语言依赖于机器硬件,因此汇编源程序几乎不具有移植性;但汇编语言程序但汇编语言程序速度快、效率高速度快、效率高,更能发挥机器硬件的长处;,更能发挥机器硬件的长处;2. 2. 汇编程序需要用户将汇编过程中需要的一些信息明确地写入源汇编程序需要用户将汇编过程中需要的一些信息明确地写入源程序,如数据在内存中的存放情况等。这些信息的说明由程序,如数据在内存中的存放情况等。这些信息的说明由汇编汇编程序指定相应的伪指令程序指定相应的伪指令来完成,并不由来完成,并不由CPUCPU定义
3、;定义;3. 3. 伪指令伪指令 只在汇编过程中有效,不会在机器语言程序中产生目标只在汇编过程中有效,不会在机器语言程序中产生目标代码;代码;汇编语言源程序汇编语言源程序机器语言程序机器语言程序(目标代码)(目标代码)汇编(汇编程序)汇编(汇编程序)高级语言源程序高级语言源程序编译或解释(编译程序)编译或解释(编译程序)汇编语言、汇编语言源程序、目标程序、可执行程序汇编语言、汇编语言源程序、目标程序、可执行程序助记符指令、助记符指令、伪指令伪指令汇编、汇编器(汇编软件、汇编程序)汇编、汇编器(汇编软件、汇编程序)符号定义伪指令符号定义伪指令 符号类型符号类型指示符指示符功能功能 符号定义符号定
4、义伪指令伪指令GBLA声明和初始化一个声明和初始化一个全局全局算术变量,初始值为算术变量,初始值为0GBLL声明和初始化一个全局逻辑变量,初始值为声明和初始化一个全局逻辑变量,初始值为FALSEGBLS声明和初始化一个全局字符串变量,初始值为空声明和初始化一个全局字符串变量,初始值为空LCLA声明和初始化一个声明和初始化一个局部局部算术变量,初始值为算术变量,初始值为0。局部算术变量只。局部算术变量只能在宏中进行声明。能在宏中进行声明。LCLL声明和初始化一个局部逻辑变量,初始值为声明和初始化一个局部逻辑变量,初始值为FALSE。局部逻辑变。局部逻辑变量只能在宏中进行声明。量只能在宏中进行声明
5、。LCLS声明和初始化一个局部字符串变量,初始值为空。局部字符串变声明和初始化一个局部字符串变量,初始值为空。局部字符串变量只能在宏中进行声明。量只能在宏中进行声明。SETA给一个局部或全局算术变量给一个局部或全局算术变量置值置值SETL给一个局部或全局逻辑变量置值给一个局部或全局逻辑变量置值SETS给一个局部或全局字符串变量置值给一个局部或全局字符串变量置值RLIST给寄存器集给寄存器集命名命名CN给一个协处理器寄存器命名给一个协处理器寄存器命名CP给一个特定协处理器命名,协处理器号为给一个特定协处理器命名,协处理器号为015DN给一个双精度给一个双精度VFP寄存器命名寄存器命名SN给一个单
6、精度给一个单精度VFP寄存器命名寄存器命名FN给一个特定的浮点寄存器命名给一个特定的浮点寄存器命名GBLA Test1;声明全局数字变量声明全局数字变量Test1,赋值为,赋值为0 xaa Test1 SETA 0 xaaGBLL Test2;声明全局逻辑变量声明全局逻辑变量Test2,赋值为,赋值为“真真” Test2 SETL TRUEGBLS Test3;声明全局字符串变量为声明全局字符串变量为Test3,赋值为,赋值为Testing“ Test3 SETS Testing“LCLA Test4; 声明局部数字变量声明局部数字变量Test4,赋值为,赋值为0 xaa Test3 SETA
7、 0 xaaLCLL Test5; 声明局部逻辑变量声明局部逻辑变量Test5 ,赋值为,赋值为“真真” Test4 SETL TRUELCLS Test6;声明局部字符串变量声明局部字符串变量Test6 ,赋值为,赋值为Testing“ Test6 SETS Testing“RegList RLIST R0-R5, R8, R10 ; 声明寄存器列表声明寄存器列表RegList,LDM/STM指令可通过该名称访问寄存器列表指令可通过该名称访问寄存器列表数据定义伪指令数据定义伪指令 数据定义数据定义伪指令伪指令MAP指定一个内存表的首址指定一个内存表的首址FIELD指定内存表中的各数据域的长度
8、(一般在指定内存表中的各数据域的长度(一般在MAP之后)之后)SPACE指定一块存储器的长度并将其中单元初始化为指定一块存储器的长度并将其中单元初始化为0DCB分配一片连续的分配一片连续的字节字节单元并初始化单元并初始化DCD分配一片连续的分配一片连续的字字单元并初始化(字边界对齐)单元并初始化(字边界对齐)DCDU分配一片连续的分配一片连续的字字单元并初始化(任意边界)单元并初始化(任意边界)DCFD分配一片连续的字单元给分配一片连续的字单元给双精度双精度浮点数并初始化(字边界对齐)浮点数并初始化(字边界对齐)分配一片连续的字单元给分配一片连续的字单元给单精度单精度浮点数并初始化(字边界对齐
9、)浮点数并初始化(字边界对齐)DCFDU分配一片连续的字单元给分配一片连续的字单元给双精度双精度浮点数并初始化(任意边界)浮点数并初始化(任意边界)分配一片连续的字单元给分配一片连续的字单元给单精度单精度浮点数并初始化(任意边界)浮点数并初始化(任意边界)DCFSDCFSUDCQ分配一片连续的分配一片连续的双字双字单元并初始化(字边界对齐)单元并初始化(字边界对齐)DCQU分配一片连续的分配一片连续的双字双字单元并初始化(任意边界)单元并初始化(任意边界)DCW分配一片连续的分配一片连续的半字半字单元并初始化(半字边界对齐)单元并初始化(半字边界对齐)DCWU分配分配一片连续的一片连续的半字半
10、字单元并初始化(任意边界)单元并初始化(任意边界)DATA标识代码段中的数据标号,该符号后是标识代码段中的数据标号,该符号后是DCB等等 定义一个首址为定义一个首址为4096(0 x1000)4096(0 x1000)的内存表,该表中包含的内存表,该表中包含5 5个字段:个字段:A(4Bytes)A(4Bytes)、B(4Bytes)B(4Bytes)、X(8Bytes)X(8Bytes)、Y(8Bytes)Y(8Bytes)、String(256Bytes)String(256Bytes)。 MAP 0 x1000 MAP 0 x1000; ; 内存表首地址的值为内存表首地址的值为0 x10
11、000 x1000A A FIELD FIELD 4 4; ; 定义定义A A的长度为的长度为4 4字节,位置为字节,位置为0 x10000 x1000B B FIELD FIELD 4 4; ; 定义定义B B的长度为的长度为4 4字节,位置为字节,位置为0 x10040 x1004X X FIELD FIELD 8 8; ; 定义定义X X的长度为的长度为8 8字节,位置为字节,位置为0 x10080 x1008Y Y FIELD FIELD 8 8; ; 定义定义Y Y的长度为的长度为8 8字节,位置为字节,位置为0 x10100 x1010String String FIELD FIE
12、LD 256256; ; 定义定义StringString为为256256字节,位置为字节,位置为0 x10180 x1018LDR LDR R6, A R6, A Str DCB “This is a test!”; ; 分配一片连续的分配一片连续的字节字节存储单元并初始化存储单元并初始化Test2Data DCW 1, 2, 3; ; 分配一片连续的分配一片连续的半字半字存储单元并初始化存储单元并初始化DataTest DCD 4, 5, 6; ; 分配一片连续的分配一片连续的字字存储单元并初始化存储单元并初始化DataTest DCQ 82; ; 分配一片连续的分配一片连续的双字双字存储
13、单元并初始化存储单元并初始化DataSpace SPACE 100; ; 分配连续分配连续100100个个字节字节存储单元并初始化为存储单元并初始化为0 0基于绝对地址的内存表基于绝对地址的内存表汇编控制伪指令 条件判断、循环控制 汇编控制汇编控制伪指令伪指令 IF 这三个符号连用,进行条件汇编这三个符号连用,进行条件汇编 IF 逻辑表达式逻辑表达式指令序列指令序列1 ELSE指令序列指令序列2 ENDIFELSEENDIFWHILE这二个符号连用,进行重复汇编这二个符号连用,进行重复汇编 WHILE 逻辑表达式逻辑表达式指令序列指令序列 WENDWENDGBLA Counter ; 声明全局
14、的数字变量声明全局的数字变量Counter Counter SETA 3; 由变量由变量Counter控制循环次数控制循环次数 WHILE Counter YX大于大于YX = YX大于等于大于等于YX = YX小于等于小于等于YX /= YX不等于不等于YX YX不等于不等于YX:LAND:Y逻辑与逻辑与X:LOR:Y逻辑或逻辑或:LNOT:Y逻辑非逻辑非X:LEOR:Y逻辑异或逻辑异或X、Y为逻辑表达式为逻辑表达式X、Y为数值为数值ARM汇编语言程序结构可执行映象文件可执行映象文件通常由以下几部分构成:通常由以下几部分构成: l l 一个一个或多个代码段,代码段的属性默认为或多个代码段,代
15、码段的属性默认为READONLY。 l l 零个或多个包含初始化数据的数据段,数据段的属性默认为零个或多个包含初始化数据的数据段,数据段的属性默认为READWRITE。 l l 零个或多个不包含初始化数据的数据段,数据段的属性为默认为零个或多个不包含初始化数据的数据段,数据段的属性为默认为READWRITE。 ARM(Thumb)汇编语言程序中,以汇编语言程序中,以程序段(代码段和数程序段(代码段和数据段)据段)为单位组织代码。为单位组织代码。 一个汇编程序至少应该有一个代码段。当程序较长时,一个汇编程序至少应该有一个代码段。当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译连接时可
16、以分割为多个代码段和数据段,多个段在程序编译连接时最终形成一个可执行的映象文件。最终形成一个可执行的映象文件。AREA Init, CODE, READONLYENTRY LDR R0, = 0 x3FF5000 MOV R1, #0 xFF STR R1, R0 LDR R0, = 0 x3FF5008 MOV R1, #0 x01 STR R1, R0ENDAREAAREA伪指令定义一个段,伪指令定义一个段,并说明段的相关属性并说明段的相关属性ENTRYENTRY伪指令标识程序的入口点伪指令标识程序的入口点每一个汇编源文件都必须有一条每一个汇编源文件都必须有一条ENDEND伪指令,指示汇编
17、的结束伪指令,指示汇编的结束伪指令伪指令LDR对于不能被对于不能被MOV和和MVN指令指令所读取的立即数所读取的立即数,将其变成常量进行读取。将其变成常量进行读取。顺序结构顺序结构 - 两个两个64位数相加位数相加 (R1,R2)+(R3,R4)AREA add64,CODE,READONLYENTRYstart LDRR0, =data1 ; R0中保存data1的首地址LDRR1, R0 ; 用寄存器间接寻址方式读数据1的高32位到R1LDRR2,R0,#4 ; 用寄存器间接寻址方式读数据1的低32位到R2LDRR0, =data2 ; R0中保存data2的首地址LDRR3, R0 ;
18、用寄存器间接寻址方式读数据2的高32位到R3LDRR4,R0,#4 ; 用寄存器间接寻址方式读数据1的低32位到R4ADDSR6,R2,R4 ; 低32位相加,并影响标志位,保存进位ADCR5,R1,R3 ; 高32位相加,并使用标志位CLDRR0,=result ; R0中保存result的首地址STRR5,R0 ; 保存结果的高位STRR6,R0,#4 ; 保存结果的低位AREA data64,DATA,READWRITEdata1 DCD 0 x11223344,0 xFFDDCCBBdata2 DCD 0 x11223344,0 xFFDDCCBBresult DCD 0,0ENDRV
19、DS上观察运行过程和最终结果上观察运行过程和最终结果分支结构分支结构和和循环结构循环结构的程序的程序请自行分析请自行分析(例9.3-例9.6); ;文件名:文件名:TEST1.S TEST1.S ; ;功能:实现两个寄存器相加功能:实现两个寄存器相加 ; ;说明:使用说明:使用ARMulateARMulate软件仿真调试软件仿真调试 AREAAREA Example1,CODE,READONLYExample1,CODE,READONLY ; ;声明代码段声明代码段Example1 Example1 ENTRYENTRY ; ;标识程序入口标识程序入口 CODE32CODE32 ; ;声明声明
20、3232位位ARMARM指令指令START MOVSTART MOVR0,#0R0,#0 ; ;设置参数设置参数 MOVMOVR1,#10R1,#10LOOPLOOP BL BLADD_SUBADD_SUB ; ;调用子程序调用子程序ADD_SUB ADD_SUB B BLOOPLOOP ; ;循环循环ADD_SUBADD_SUB ADDS ADDSR0,R0,R1R0,R0,R1 ;R0 = R0 + R1 ;R0 = R0 + R1 MOV MOVPC,LRPC,LR ; ;子程序返回子程序返回 ENDEND ; ;文件结束文件结束 使用使用“;”进行注释进行注释标号标号顶格顶格主程序主程
21、序子程序子程序AREA Block, CODE, READONLYnum EQU 20 ; 设置将要复制的字数设置将要复制的字数ENTRY Start LDR R0, =src ; R0指向源数据区指向源数据区src LDR R1, =dst ; R1指向目标数据区指向目标数据区dst MOV R2, #num ; R2保存将要复制的字数保存将要复制的字数 MOV SP, #0 x400 ; 设置堆栈指针设置堆栈指针(R13)Blockcopy MOVS R3, R2, LSR #3 ; 需要进行的以需要进行的以8个字为单位的复制次数个字为单位的复制次数 STMFD SP!, R4-R11 ;
22、 将工作寄存器将工作寄存器R4-R11压入堆栈保存压入堆栈保存Octcopy LDMIA R0!, R4-R11 ; 从源数据区读取从源数据区读取8个字的数据,放入个字的数据,放入8个寄存器中个寄存器中 STMIA R1!, R4-R11 ; 将将8个寄存器中的数据写入目标数据区中个寄存器中的数据写入目标数据区中 SUBS R3, R3, #1 ; 将块复制次数减将块复制次数减1 BNE Octcopy ; 循环操作,直到完成以循环操作,直到完成以8个字为单位的块复制个字为单位的块复制 LDMFD SP!, R4-R11 ; 从堆栈弹出恢复工作寄存器从堆栈弹出恢复工作寄存器R4-R11Copy
23、words ANDS R2, R2, #7 ; 剩下不足剩下不足8个字的数据的字数个字的数据的字数 BEQ Stop ; 如果剩下数据的字数为如果剩下数据的字数为0,则数据复制完成,则数据复制完成Wordcopy LDR R3, R0, #4 ; 从源数据区读取从源数据区读取1个字的数据,放到个字的数据,放到R3寄存器中寄存器中 STR R3, R1, #4 ; 将将R3寄存器中的数据写入目标数据区中寄存器中的数据写入目标数据区中 SUBS R2, R2, #1 ; 将字数减将字数减1 BNE Wordcopy ; 循环操作,直到完成以字为单位的数据复制循环操作,直到完成以字为单位的数据复制S
24、top MOV R0,#0 x18 ; LDR R1, =0 x20026 ; SWI 0 x123456 ; 从应用程序中退出从应用程序中退出AREA BlockData, DATA, READWRITE ; 定义数据区定义数据区BlockData src DCD 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7,8,9,1,2 ; 定义源数据区定义源数据区src dst DCD 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0 ; 定义目标数据区定义目标数据区dstEND ; 结束汇编结
25、束汇编数据块复制数据块复制ARM工程中的文件工程中的文件ARM汇编语言与汇编语言与C/C+的混合编程的混合编程1 1初始化程序部分初始化程序部分 硬件系统的初始化,包括设定CPU工作状态,中断使能,主频设定,以及RAM的控制参数设置及初始化等,通常都使用汇编代码。2 2初始化部分与主应用程序部分的衔接初始化部分与主应用程序部分的衔接 当所有的系统初始化工作完成之后,就需要把程序流程转入到应用程序。最简单的方法是,在汇编语言程序末尾使用跳转指令B或BL直接从启动代码转移到C/C+程序入口。3.3.主应用程序的混合编程方式主应用程序的混合编程方式子程序之间的调用:在C/C+代码中嵌入汇编指令以上程
26、序段完成一些简单的初始化,然后跳转到以上程序段完成一些简单的初始化,然后跳转到Main( )函数所标函数所标识的识的C/C+代码处执行主要的任务,代码处执行主要的任务,此处的此处的Main仅为一个标号,也仅为一个标号,也可以使用其他名称,与可以使用其他名称,与C语言程序中的语言程序中的main( )函数没有关系函数没有关系。C程序如下:程序如下:void Main(void)IMPORT Main;声明外部引用符号声明外部引用符号AREA Init, CODE, READONLY;定义代码段定义代码段ENTRY;定义程序的入口点定义程序的入口点 LDR R0, =0 x3FF0000; 初始化
27、系统配置寄存器初始化系统配置寄存器 LDR R1, =0 xE7FFFF80 STR R1, R0 LDR SP, =0 x3FE1000; 初始化用户堆栈初始化用户堆栈 BL Main; 跳转到跳转到Main()函数处执行函数处执行C/C+代码代码END; 汇编代码结束汇编代码结束基于基于ARM/Thumb指令集过程调用的规则指令集过程调用的规则ATPC ATPC规定子程序之间调用的基本规则,包括:子程规定子程序之间调用的基本规则,包括:子程序调用过程中序调用过程中寄存器寄存器的使用规则、的使用规则、数据栈数据栈的使用规则以及的使用规则以及参数参数的传递规则。的传递规则。(ARM-Thumb
28、 Procedure Call Standard) C语言子程序需要语言子程序需要用户指定用户指定ATPCS类型类型,编译器在,编译器在ELF格式的目标文件中设置相应的属性,连接器根据用户格式的目标文件中设置相应的属性,连接器根据用户指定的指定的ATPCS类型连接不同的类型连接不同的C语言库。语言库。 而对于汇编语言来说,完全要依靠用户来保证各子程而对于汇编语言来说,完全要依靠用户来保证各子程序满足选定的序满足选定的ATPCS类型:类型:子程序编写子程序编写时必须遵守相应时必须遵守相应的的ATPCS规则,规则,数据栈的使用数据栈的使用必须遵守必须遵守ATPCS规则。规则。基本基本ATPCS (
29、1):寄存器使用规则:寄存器使用规则 寄存器寄存器R0R3用做子程序参数传递寄存器。被调用的子程序用做子程序参数传递寄存器。被调用的子程序在返回前无需恢复其内容。在返回前无需恢复其内容。 寄存器寄存器R4R11用做局部变量保存寄存器(用做局部变量保存寄存器(Thumb程序通常只程序通常只能使用能使用R4R7)。若子程序也需使用)。若子程序也需使用 其中的某些寄存器,则进入子其中的某些寄存器,则进入子程序时必须进行保护,并在返回前恢复。程序时必须进行保护,并在返回前恢复。 寄存器寄存器R12用作子程序间的暂存寄存器用作子程序间的暂存寄存器IP。在子程序的连接。在子程序的连接代码段中经常会有这种使
30、用规则。代码段中经常会有这种使用规则。 寄存器寄存器R13用作数据栈指针用作数据栈指针SP ,不能用于其他用途。,不能用于其他用途。SP在子在子程序进入和退出时的值必须相等。程序进入和退出时的值必须相等。 寄存器寄存器R14用作连接寄存器用作连接寄存器LR。如果子程序中保存了返回地。如果子程序中保存了返回地址,则址,则R14可用于其他用途。可用于其他用途。 寄存器寄存器R15是是程序计数器程序计数器PC,不能用于其他用途。,不能用于其他用途。 ATPCS中的各寄存器在中的各寄存器在ARM编译器和汇编器中都是预定义的编译器和汇编器中都是预定义的 ARM-Thumb过程调用标准中过程调用标准中寄存
31、器的使用规则及其名称寄存器的使用规则及其名称寄存器寄存器别名别名1别名别名2用用 法法R0R3A1A4参数寄存器,其中R0也用作函数返回值寄存器R4R8V1V5函数局部变量寄存器R9V6ab保存静态基地址R10V7sl用来保存堆栈边界地址R11V8fp保存结构指针R12IP过渡寄存器R13SP堆栈指针R14LR连接寄存器R15PC程序计数器基本基本ATPCS (2):数据栈的使用规则:数据栈的使用规则 ARM的数据栈指针可为的数据栈指针可为FD(Full Descending),ED(Empty Descending),FA(Full Ascending)或或EA(Empty Ascendin
32、g) ,但,但ATPCS规定数据栈为规定数据栈为FD类型,且类型,且8字节对齐字节对齐的。的。l l 数据栈数据栈指针指针(stack pointer)指向最后入栈的数据单元地址指向最后入栈的数据单元地址l l 数据栈数据栈基址基址(stack base)指向数据栈的栈底。指向数据栈的栈底。l l 数据栈数据栈界限界限(stack limit)指栈中可以使用的最低单元地址。指栈中可以使用的最低单元地址。l l 已占用的数据栈已占用的数据栈(used stack)指栈基址和指栈基址和SP之间的区域,其中之间的区域,其中包括栈指针对应的内存单元。包括栈指针对应的内存单元。l l 数据栈中的数据栈中
33、的数据帧数据帧(stack frame)指栈中为子程序分配的用来指栈中为子程序分配的用来保存寄存器和局部变量的区域。保存寄存器和局部变量的区域。基本基本ATPCS(3):参数的传递规则:参数的传递规则1、参数个数可变的子程序参数传递规则、参数个数可变的子程序参数传递规则参数不超过参数不超过4个时使用寄存器个时使用寄存器R0R3,依次将各字数据传送到,依次将各字数据传送到寄存器寄存器;参数超过参数超过4个时将剩余的字数据传送到个时将剩余的字数据传送到数据栈数据栈,入栈的顺序与参数顺序相反,即最后一,入栈的顺序与参数顺序相反,即最后一个字数据先入栈个字数据先入栈2、参数个数固定的子程序参数传递规则
34、、参数个数固定的子程序参数传递规则第一个整数参数通过寄存器第一个整数参数通过寄存器R0R3来传递,其他参数通过数据栈传递。来传递,其他参数通过数据栈传递。3、子程序结果返回规则、子程序结果返回规则当结果为一个当结果为一个32位的整数时通过寄存器位的整数时通过寄存器R0返回子程序结果;返回子程序结果;当结果为一个当结果为一个64位的整数时通过位的整数时通过R0和和R1返回子程序结果,以此类推;返回子程序结果,以此类推;当结果为一个浮点数时浮点运算部件的寄存器当结果为一个浮点数时浮点运算部件的寄存器f0,d0或或s0返回子程序结果;返回子程序结果;当对于位数更多的子程序结果,需要通过调用内存来传递。当对于位数更多的子程序结果,需要通过调用内存来传递。AREA SCopy, CODE, READONLYEXPORT strcopy ; 声明声明strcopy为导出符号为导出符号,可在其它文件中使用可在其它文件中使用strcopy LDRB R2, R1, #1 ; R1中的值为源数据块的首地址中的值为源数据块的首地址 STRB R2, R0, #1 ; R0中的值为目标数据块的首地址中的值为目标数据块的首地址 CMP R2, #0 BNE strcopy ; 未复制完,循环继续复制未复制完,循环继续复制 MOV PC, LR ; 复制完毕,返回复制完毕,返回EN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 预应力张拉施工详细操作流程
- 网店营销发展方案
- 过节活动促销活动方案策划
- 平台活动渠道活动策划方案
- 雨伞线下营销方案
- 南京南站建筑方案设计图
- 建筑方案设计是啥意思啊
- 项目前期咨询招标方案
- 产品广告设计服务咨询方案
- 夏日活动宵夜活动方案策划
- 光伏储能电池安全运行的操作规程
- 期中评估卷- 2025-2026学年英语六年级上学期 人教精通版 (含答案解析)
- 慢性支气管炎知识培训课件
- 2025年冠脉介入培训试题及答案
- 2025国家义务教育质量监测试题(含答案)
- 冠脉介入考试题及答案
- 公共场所卫生检验方法 第2部分:化学性指标-编制说明
- 2025时事政治必考题库(含答案)
- 垫付资金三方合同协议书
- 校园欺凌预防与干预实务操作手册
- 2025至2030中国医药物流行业项目调研及市场前景预测评估报告
 
            
评论
0/150
提交评论