Lecture 4 (8051 Instruction Set)_Chinese Rv01_第1页
Lecture 4 (8051 Instruction Set)_Chinese Rv01_第2页
Lecture 4 (8051 Instruction Set)_Chinese Rv01_第3页
Lecture 4 (8051 Instruction Set)_Chinese Rv01_第4页
Lecture 4 (8051 Instruction Set)_Chinese Rv01_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

1、第四讲,8051 指令集,8051 指令集,导言 CIP-51 结构和存储器组织概览 寻址方式 寄存器寻址 直接寻址 间接寻址 立即数寻址 相对寻址 绝对寻址 长寻址 索引寻址 指令类型 算术操作 逻辑操作 数据传送指令 布尔变量指令 编程分支指令,CIP-51 体系结构浏览,导言,计算机指令是由一个操作码与0,1,或者2字节的操作数组成的 操作码用来识别操作的类型,操作数用来识别源数据和目的数据 操作数可以是: 数据值 一个CPU 寄存器 一个存储单元 一个 I/O 口 如果指令和多于一个的操作数相关时,格式经常如下: 指令 目的操作数, 源操作数,存储器组织,C8051F020的存储器与标

2、准的8051相似 程序和数据储存使用同一寻址空间,但通过不同指令类型访问,内部数据储存器,特殊功能寄存器,寻址模式,C8051F020有8个不同的寻址模式 不同寻址模式决定了操作数字节被选择的方式,* 与程序分支指令相关,寄存器寻址,寄存器寻址指令包含了寄存器间的信息传递 举例: MOVR0, A 这条指令将累加器A的内容传给寄存器R0.在执行此指令前必须要指定寄存器分区(分区0,1,2,3),直接寻址,这种方式允许用户指定操作数,这个操作数可以是它的实际存储地址(一般用16进制数指定)或它的缩写名称(例如:P3) 注意: SFR的缩写是在 “C8051F020.inc” 头文件中定义的 例子

3、: MOVA, P3;将P3的内容传给累加器 MOV A, 020H;将RAM中20H的内容传给累加器,间接寻址,这种方式是使用一个指针保存操作数的有效地址 只有寄存器R0, R1 和 DPTR 可以用于指针寄存器 R0 和 R1 保存的是8位地址,而DPTR可以保存16位地址 例子: MOVR0,A;将累加器A的内容保存到R0寄存器所指向的地 ;址,R0存储的是8位地址,比如:60H MOVXA,DPTR;将DPTR所指向地址的内容保存到累加器A中 ;DPTR存储的是16位地址,比如: 1234H.,立即数寻址,这种方式是使用8位或16位的常数作为源操作数 这个常量是在指令中指定,而不是一个

4、寄存器或一个存储单元 目的寄存器的数据长度要与源操作数的长度是一致的. Examples: ADD A,#030H;将30H写到A累加器中(8位寄存器) MOV DPTR,#0FE00H;将16位的数据FE00H写到16位的数据指 ;针DPTR中.,相对寻址,这种寻址方式主要用于跳转指令,比如SJMP(短跳转)和条件跳转(JNZ) 这些指令实现程序的相对转移 由于使用的是8位偏移地址,所以目的地址的范围是以当前指令所在地址的-128 到 +127 字节范围内 例如: GoBack:DECA; A减1 JNZGoBack;如果A不为0, 跳到GoBack,绝对寻址,与这种方式寻址的两条相关指令是

5、ACALL 和 AJMP指令 这是2字节的指令,由操作数指定11位的绝对地址 16位PC地址的高5位没有被修改.低11位地址由这条指令给出. 因此, 分支地址必须在当前地址的2K字节范围内 (211 = 2048) 例子: ACALLPORT_INIT;PORT_INIT应在2K字节内. PORT_INIT: MOV P0, #0FH;PORT_INIT 子程序,长寻址,这种寻址方式主要用于LCALL 和 LJMP指令 这是3字节的指令,后2个字节指定了程序分支的16位目的地址 它的寻址范围是64 K 程序空间 无论当前程序在哪里,程序将总是跳到分支处执行 举例: LCALL TIMER_IN

6、IT;TIMER_INIT是由操作数指定的16位地址 ;在C语言中,这是函数调用Timer_Init(). TIMER_INIT: ORL TMOD,#01H;TIMER_INIT 子程序,索引寻址,索引寻址方式在使用查表方法查找数据时是很有用的. 16位寄存器(数据指针)保存基地址,累加器A保存8位的索引偏移地址 这两个寄存器的和组成有效的地址提供给JMP 或 MOVC指令 例子: MOVA,#08H;表启始的偏移地址 MOVDPTR,#01F00H;表的启始地址 MOVCA,A+DPTR;从表基地址+偏移地址处取数据放到A中. 执行完上面的指令,程序将从地址1F08H (1F00H+08H

7、) 处取数并放到累加器中(从查询表中),指令类型,C8051F020的指令按功能可以分为以下5类: 算术运算 逻辑运算 数据传送指令 布尔操作指令 控制转移类指令,算术运算,对于算术运算指令, C8051F020没有特殊的数据格式 (e.g. 有符号二进制数,无符号二进制数,二进制编码的十进制数, ASCII码, 等.) 当满足条件时,PSW中的相应状态位会被置位.这可以使用户采用软件的方式管理不同的数据格式,Ri 是指R0或R1所指向地址的内容 Rn 是指当前所选择的寄存器分页中的R0-R7,逻辑运算,逻辑指令对数据按位进行布尔操作 (AND, OR, XOR, 和 NOT) 例子: ANL

8、A, #02H;Mask bit 1 ORLTCON, A;TCON=TCON-OR-A,数据传送指令,数据传送指令可以不通过累加器实现内部RAM与SFR之间的数据传送 也可以使用间接寻址的方法实现内部RAM与外部RAM的数据传送 高128字节的RAM只能使用间接寻址方式访问, SFRs只能通过直接寻址方式访问,布尔操作指令,C8051F020处理器可以执行单位的操作 布尔操作包括: set, clear, and, or 和 取补指令 同时也包括位传送和条件跳转指令 所有位的访问是使用的直接寻址方式 例子: SETBTR0;Start Timer0. POLL:JNBTR0, POLL;Wa

9、it till timer overflows.,控制转移类指令,程序转移指令是用于控制程序执行的流程 一些指令在转移前提供了条件判断功能(条件跳转),附录,8051 指令,算术运算,Ri 是指R0或R1所指向地址的内容 Rn 是指当前所选择的寄存器分页中的R0-R7,ADDA, ADDC A,ADD 将源操作数所指定的数据与累加器相加,结果保存到累加器中 ADDC将源操作数所指定的数据与进位标志和累加器相加,结果保存到累加器中 ADD 和 ADDC 两条指令的操作都会影响到进位标志 (CY), 辅助进位标志 (AC) 和溢出标志 (OV) CY=1 第7位有进位; 否则清0 AC =1 低4

10、位有进位,例如:从第3位进位.否则清 OV=1如果有符号数的结果不能用目的操作数的数据位内表达时溢 出.否则清0,SUBB A,SUBB 从A中减去进位标志和指定的数据字节, 结果保存到A中 CY=1 如果第7位有借位,则CY置1;否则清0 AC =1 如果第3位有借位,则CY置1;否则清0 OV=1如果第7位和第6位中有一位需要借位,而另一个不需要借位,则OV置 1;否则清0 例子: A保存数据 0C1H (11000001B), 寄存器1保存数据 40H (01000000B) 和e CY=1. SUBBA, R1 结果70H (01110000B)保存在A中, 同时 CY=0 ,AC=0

11、 但 OV=1,INC,将数据变量加1.这条指令用于寄存器,直接或寄存器直接寻址方式 例子: INC6FH 如果内部RAM的6FH地址的内容是 30H, 这条指令将这个值加, 结果31H保存到6FH中 例子: MOVR1, #5EINCR1INCR1 如果R1=5E (01011110) ,内部RAM地址5FH的内容是20H, 这条指令将5FH存储到R1,同时将5FH的内容加1为21H,DEC ,数据变量减1 指令用于累加器,寄存器,直接或寄存器直接寻址方式 数据00H在执行此操作后下溢为FFH 不影响各个标志位,INCDPTR,16位数据指针加 1 DPTR是唯一的一个可以执行此操作的16位

12、寄存器 这条指令直接将DPTR的内容加1,MUL AB,将 A 与 B中的两个数相乘,16位的 B15-8, A7-0 将A和B中的两个8位无符号数相乘. 16位的结果的低8位保存在A中,高8位地址保存在B寄存器中 如果结果大于255 (FFH), 溢出标志被置1; 否则溢出标志清0.进位标志总是清0. 如果ACC=85 (55H) 和 B=23 (17H),这条指令的结果 1955 (07A3H), 所以 B 为07H累加器A为A3H. 溢出标志被置位进位标志被清0.,DIV AB,A除以B 商的整数部分存储在A中,余数存储在B寄存器中 如果 ACC=90 (5AH) 和 B=05(05H)

13、, 由于 90/5 = 18 (商) 和 00 (余数),所以指令的结果18 (12H) 保存在 ACC中B中保存的值为 00 (00H), 进位与溢出标志都被清0 如果在执行除操作前B中保存00H, 那么保存在ACC与B中的数据是不确定的,溢出标志被置 1.进位标志被清0,DA A,这是二-十进制调整指令 这条指令是将ADD或ADDC的存储在ACC中的结果调整为两个4位数据(压缩BCD码) 效率高, 这条指令根据ACC的原始数据和PSW的状态,决定对A进行加00H, 06H, 60H 或 66H的操作 如果 ACC位A3-0 大于9 (xxxx1010-xxxx1111), 或如果AC=1,

14、 那么6被加到ACC,以将ACC的低位调整为正确的BCD码 如果CY=1, 因为高位A7-4 大于9 (1010 xxxx-1111xxxx), 那么高位将加6以将ACC的高位调整为正确的BCD码,但不清进位标志,逻辑操作,逻辑指令对数据按位执行布尔操作 (AND, OR, XOR, 和 NOT),ANL,这条指令是对源操作数与目的操作数执行的逻辑”与”操作,结果保存在目的变量中 不影响标志位 例子:ANLA,R2 如果 ACC=D3H (11010011) 和 R2=75H (01110101), 执行这条指令的结果是ACC=51H (01010001) 当需要屏蔽一个字节时,下面的指令就很

15、有用了 例子:ANLP1,#10111001B,ORL,这条指令是对源操作数与目的操作数执行的逻辑”或”操作,结果保存在目的变量中 不影响标志位 例子: ORLA,R2 如果 ACC=D3H (11010011) 和 R2=75H (01110101),执行这条指令的结果是 ACC=F7H (11110111) 例子: ORLP1,#11000010B 这条指令将端口1的位7,6,1输出为1,XRL,这条指令是对源操作数与目的操作数执行的逻辑”异或”操作,结果保存在目的变量中 不影响标志位 例子: XRLA,R0 如果 ACC=C3H (11000011) 和 R0=AAH (10101010

16、), 执行这条指令的结果为ACC=69H (01101001) 例子: XRLP1,#00110001 这条指令对端口1的位5,4和0位取反,CLR A 和 CPL A,CLR A 这条指令清0累加器 (所有位设置为0) 不影响标志位 如果 ACC=C3H, 执行这条指令后ACC=00H,CPL A 对累加器的内容逐位取反(每一位的反) 不影响标志位 如果 ACC=C3H (11000011),执行此指令的结果为 ACC=3CH (00111100),RL A,将累加器的内容逐位循环左移一位.位7的内容移到位0中. 不影响标志位 如果 ACC=C3H (11000011), 执行此指令后的结果

17、为ACC=87H (10000111) 不影响进位标志位,RLC A,将累加器的内容和进位标志位一起循环左移一位. 累加器位7的内容移入进位标志位,进位标志位的内容移到位0 不影响除进位标志位外的其它位 如果 ACC=C3H (11000011), 进位标志位为1, 执行此指令的结果为ACC=87H (10000111) 同时进位标志位置1,RR A,将累加器的内容逐位循环右移一位.位0的内容移到位7中. 不影响标志位 如果 ACC=C3H (11000011), 执行此指令后的结果为ACC=E1H (11100001)不影响进位标志位,RRC A,将累加器的内容和进位标志位一起循环右移一位.

18、 累加器位0的内容移入进位标志位,进位标志位的内容移到位7 不影响除进位标志位外的其它位 如果 ACC=C3H (11000011), 进位标志位为0, 执行此指令的结果为ACC=61H (01100001)同时进位标志位置1,SWAP A,这条指令是将累加器ACC的低4位(A3-0)与高4位(A7-4)的内容互换 这条指令可以理解为一个4位的移位指令 不影响标志位 如果 ACC=C3H (11000011), 执行此指令后的结果为ACC=3CH (00111100),数据传送指令,数据传送指令可以实现不通过累加器的内部RAM与SFR之间的数据传送 也可以实现间接寻址方式的内部RAM与外部RA

19、M的数据传送 高128字节的RAM只能通过间接寻址方式访问,SFRs只能通过直接寻址方式访问,数据传送指令,MOV ,这条指令的功能是把源字节的内容送到目的字节 源字节的内容不变,也不影响其它寄存器和标志 例子:MOVR1,#60;R1=60H MOVA,R1;A=60H MOVR2,#61;R2=61H ADDA,R2;A=A+61H MOVR7,A;R7=A 如果内部RAM中60H=10H, 和 61H=20H, 执行此指令后的结果为R7=A=30H. 60H与61H地址的内容不变.,MOV DPTR, #data 16,这条指令将16位的常数传送给数据指针,不影响标志位 例子: MOVD

20、PTR,#1032 这条指令实现将数据1032H 传送给数据指针, DPH=10H 和 DPL=32H.,MOVC A,A + ,这条指令将程序存储器中的代码值移到累加器ACC中 读取字节的有效地址是8位累加器的内容与基址的和,基址可以是数据指针 (DPTR) 也可以是程序指针 (PC) 16位的地址相加不影响标志位 这条指令用于在程序存储器中查表 If the PC is used, it is incremented to the address of the following instruction before being added to the ACC Example: CLRA

21、 LOC1:INCA MOVC A,A + PC RET Look_upDB10H DB20H DB30H DB40H 这段子程序读取用DB(定义字节)伪指令定义的4个值中的一个,并送给累加器 执行完这段子程序的操作后ACC=20H,MOVX ,这条指令在ACC与外部数据存储器的一个字节之间传送数据 这条指令有两种类型,它们的唯一区别是:是使用8位还是16位的间接地址访问外部数据存储器 8位的MOVX指令使用特殊功能寄存器EMI0CN确定高8位的有效地址,R0或R1的内容确定低8位的访问地址 例子: MOVEMI0CN,#10H;高位地址装载到EMI0CN. MOVR0,#34H;低位地址装载

22、到R0(或R1) MOVXA,R0;将1034H单元的内容传给ACC,MOVX ,16位的MOVX指令通过访问DPTR寄存器所指向的外部存储器的内容 例子: MOVDPTR,#1034H;加载16位的地址(1034H). MOVX A,DPTR;将1034H的内容传给ACC. 上面的指令使用立即数寻址指令MOV DPTR 设置DPTR的内容 DPTR也可以通过访问DPTR的高8位特殊功能寄存器DPH,和DPTR的低8位特殊功能寄存器DPL的方式访问,PUSH Direct,这条指令将堆栈指针(SP)加1 Direct的内容可以是内部存储器的地址或SFR,它们被复制到堆栈指针所指向的内部RAM的

23、地址内 不影响标志位 例子: PUSH22H PUSH23H SP的初始地址为4FH,内部RAM中22H与23H的内容分别是11H 和 12H . 执行完上面的指令后, SP=51H, 内部RAM中50H 笔 51H分别保存 11H 和.,POPDirect,这条指令读取堆栈指针(SP)所指向的地址的内容并将堆栈指针(SP)减. 被 读取的数据被送入Direct所指向的地址,它可以是内部存储器或SFR.不影响标志位. 例子: POPDPH POPDPL 如果 SP=51H内部RAM的地址 4FH, 50H 和 51H 中的内容分别为30H, 11H 和 12H, 执行上面的指令后SP=4FH

24、和 DPTR=1211H POPSP 如果继续执行上面的指令, 那么 SP=30H. 在这种情况下, SP在加载弹出的(30H) 之前首先减到4EH,XCH A,这条指令是将ACC的内容与源操作数的内容互换 例子: XCHA,R0 假设 R0=2EH, ACC=F3H (11110011) 同时内部RAM地址2EH的值为2EH=76H (01110110). 上面指令执行的结果为2EH=F3H 和 ACC=76H.,XCHD A,Ri,这条指令是将Ri间接寻址单元的低4位内容与累加器ACC的低4位内容互换 它们的高4位的内容(位7-4)保持不变 不影响标志位 例子: XCHDA,R0 如果 R

25、0=2EH, ACC=76H (01110110) 内部RAM的内容2EH=F3H (11110011), 执行上面指令的结果为2EH=F6H (11110110) 和ACC=73H (01110011),逻辑运算指令,C8051F020处理器可以执行单位的操作 逻辑运算指令包括:置位,清0,与,或和取反 也包括移位与条件跳转指令 所有的位是通过直接寻址方式访问,CLR,清0指令(复位为0)清除指令中的指定位 不影响标志位 CLR 指令可以清除进位标志位及所有可以直接寻址的位 例子: CLRP2.7 如果 Port 2 已经写入DCH (11011100), 执行此操作后端口的值为5CH (0

26、1011100),SETB ,这条指令将指定位置1 SETB指令可以操作进位标志位和所有可直接寻址的位 不影响其它标志 例子: SETBC SETBP2.0 如果进位标志已经清除和端口2的值为24H (00100100), 执行上面的指令后进位标志位被置1,端口2的值更新为25H (00100101),CPL,此指令对操作数中的位取反 不影响标志位 CPL指令可以操作进位标志及所有可直接寻址的位 例子: CPLP2.1 CPLP2.2 如果端口2的值在执行上面的指令前为 53H (01010011), 则执行上面的指令后端口的值被置为55H (01010101),ANLC, ,这条指令将位地址

27、与进位标志位”与”操作,并将结果保存在进位标志位 如果源操作数的位是0,那么这条指令清除进位标志位;否则进位标志位保持原值不变 如果在源操作数的位前加斜线,则源操作数为源操作数的取反,但源操作数的位不变 不影响标志位 例子: MOVC,P2.0;将P2.0的状态装入C ANLC,P2.7;进位标志与P2的第7位”与”操作 MOVP2.1,C;将C传送给P2的位1 ANLC,/OV;”与”OV标志的反. 如果 P2.0=1, P2.7=0 和 OV=0, 执行上面的指令后P2.1=0, CY=0 和OV的值不变 OV=0,ORLC, ,这条指令将位地址与进位标志位”或”操作,并将结果保存在进位标

28、志位This 如果源操作数的位是1,那么这条指令置位进位标志位;否则进位标志位保持原值不变 如果在源操作数的位前加斜线,则源操作数为源操作数的取反,但源操作数的位不变 不影响标志位 例子: MOVC,P2.0;将P2.0的状态装入C ORLC,P2.7;进位标志与P2的第7位”或”操作 MOVP2.1,C;将C传送给P2的位1 ORLC,/OV;”或”OV标志的反.,MOV ,这条指令是将源操作位的内容送到目的操作位 两个操作数必须有一个进位标志位,另外一个可以是任何一个可寻址位 不影响其它寄存器或标志位 例子: MOVP2.3,C MOVC,P3.3 MOVP2.0,C 如果 P2=C5H

29、(11000101), P3.3=0 和 CY=1, 执行上面的指令后, P2=CCH (11001100) 和 CY=0.,JC rel,这条指令的功能是如果进位标志位为1则跳转到标号对应的地址,否则程序继续执行下一条指令 不影响标志位 例子: CLRC SUBBA,R0 JCARRAY1 MOVA,#20H 首先清除进位标志位. 执行完SUBB 指令后,如果A的值小于,则这条指令置位进位标志位同时程序跳转到ARRAY1的地址,否则继续执行MOV指令,JNCrel,这条指令的功能是如果进位标志位没有置1则跳转到标号对应的地址,否则程序继续执行下一条指令 不影响标志位.也不修改进位标志位. 例

30、子: CLRC SUBBA,R0 JNCARRAY2 MOVA,#20H 在上面的指令中如果A的值大于R0则跳转到ARRAY2,否则继续执行MOV指令.,JB ,rel,这条指令的功能是如果目的位为1则跳转到rel指定的地址,否则继续执行下一条指令 不影响标志位. 被检测位没有被修改 例子: JBACC.7,ARRAY1 JBP1.2,ARRAY2 如果累加器的值是01001010 和 端口 1=57H (01010111), 执行上面的指令将使程序跳转到ARRAY2,JNB,rel,这条指令的功能是如果目的位为0则跳转到rel指定的地址,否则继续执行下一条指令 不影响标志位. 被检测位没有被

31、修改 例子: JNBACC.6,ARRAY1 JNBP1.3,ARRAY2 如果累加器的值是01001010和 端口 1=57H (01010111),执行上面的指令将使程序跳转到ARRAY2,JBC,rel,如果源操作数的位是1,这条指令清除源操作数并跳转到rel指定的地址 如果被检测位已经是0则不修改此位,不影响标志位 例子: JBCP1.3,ARRAY1 JBCP1.2,ARRAY2 如果 P1=56H (01010110), 上面的指令将使程序跳转到ARRAY2, 并将P1修改为52H (01010010),控制转移指令,程序跳转指令用于程序的流程控制 一些指令提供了条件判断 跳转,例

32、如条件跳转和无条件跳转,ACALL addr11,这条指令无条件调用给出地址处的子程序 这条指令使PC指针加2,并将16位的PC指针压入堆栈(低字节在前)同时堆栈指针加2 PC指针指向addr11所给出的地址,程序从新地址开始执行 所以被调用的子程序必须在同一个2K区域内 不影响标志位 例子: ACALLLOC_SUB 如果 SP=07H标号 “LOC_SUB”在程序存储器的 0567H地址处, 执行此指令是在0230H地址处, 执行此指令后SP=09H,内部RAM的地址 08H 和 09H 的内容分别是32H和 02H PC指针为PC=0567H,LCALL addr16,这条指令调用给出地

33、址处的子程序 执行此指令将使PC 加3, 并将16位的PC指针压入堆栈 (低字节在前),堆栈指针加2 PC指针指向addr16所给出的地址,程序从新地址开始执行 由于这是长调用, 所以子程序可以是64K程序范围内的任一地址 不影响标志位 例子: LCALLLOC_SUB 如果, SP=07H 和标号 “LOC_SUB”在程序存储器的 2034H地址处. 执行此指令的程序位于0230H地址处,执行此指令后SP=09H, 内部RAM地址08H 和 09H 的内容分别是33H 和02H 同时 PC=2034H,RET,这条指令从一个子程序处返回 RET指令从堆栈中弹出PC指针的高字节与低字节,同时S

34、P减去2 这条指令的执行将导致程序恢复到“CALL”指令的下一条指令处 不影响标志位 假设 SP=0BH 而且内部RAM的地址为0AH与0BH的内容分别为30H和02H. 执行此指令的结果是SP=09H 程序将继续从0230H处开始执行,RETI,这条指令将程序从中断子程序中返回 RETI 从堆栈中将PC的高字节与低字节地址弹出,同时恢复中断逻辑以接收其它的中断 SP指针减2,其它寄存器不受影响,然而,PSW不能自动恢复中断前的状态 执行完RETI, 程序将立即恢复到中断产生前的下一条指令 假设 SP=0BH ,程序在执行到0213H处时检测到一个中断 内部RAM位于0AH和0BH地址的内容分

35、别是14H和02H RETI指令将使 SP=09H,程序从0234H处重新开始执行,AJMP addr11,AJMP指令将程序跳转到目的地址,此地址是短范围内的绝对地址(短范围是指11位地址) 因此目的地址必须在2KB的范围内 例子: AJMPNEAR 如果标号NEAR位于程序存储器的 0120H, AJMP指令位于 0234H,上面的指令将PC的值改变为 0120H,LJMP addr16,LJMP指令是将程序跳转到目的地址,目的地址定位是绝对长范围的距离内 (长范围是指16位的地址) 所以目的地址可以是全部64 kB 程序存储空间内的任何一个地址 不影响标志位 例子: LJMPFAR_ADR 如果标号FAR_ADR 是位于程序存储器的3456H, LJMP 指令位于0120H处,执行上面的指令后PC的值为 3456H,SJMP rel,这是短跳转指令,它先将PC的指针加2然后再上rel (有符号8位)相应的值,并将结果传给PC 这是程序无条件跳转的新地址 因此, 以此指令为基址的目的地址的范围是从-128 到 +127 例子: SJMPR

温馨提示

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

评论

0/150

提交评论