版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统概述嵌入式系统简介现实中的嵌入式系统嵌入式系统的概念和特点嵌入式系统的组成嵌入式操作系统嵌入式系统开发流程概述1第1章嵌入式系统概述1.1嵌入式系统简介
1976年,出现最早的单片机,它是由Intel公司推出。Motorola公司同时推出了68HC05,Zilog公司推出了Z80系列。从20世纪80年代早期开始,嵌入式系统的程序员开始用商业级的“操作系统”编写嵌入式应用软件,此刻“嵌入式系统”才真正出现了。20世纪90年代以后,随着对实时性要求的提高,软件规模不断上升,实时核逐渐发展为实时多任务操作系统(RTOS),并作为一种软件平台逐步成为目前国际嵌入式系统的主流。第1章嵌入式系统概述1.2
现实中的嵌入式系统日常生活
手持媒体设备、数码相机、打印机、全自动洗衣机、电饭煲等都是嵌入式系统的具体应用。工业控制
工业过程控制、数字机床、电力系统、电网安全、电网设备监测、石油化工系统的自动化都需要嵌入式微控制器的参与。交通管理第1章嵌入式系统概述环境工程
水文资料实时监测、防洪体系及水土质量监测、堤坝安全、地震监测网、实时气象信息网、水源和空气污染监测都涉及大量数据的实时处理分析。国防与航天
神舟飞船和长征火箭中有很多嵌入式系统,导弹的制导系统也是一种嵌入式系统。第1章嵌入式系统概述1.3
嵌入式系统的概念和特点概念:
按照IEEE(国际电气和电子工程师协会)的定义,嵌入式系统即“控制、监视或者辅助装置、机器和设备运行的装置”(原文为devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants)。这主要是从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体,并且涵盖机械等附属装置。第1章嵌入式系统概述特点:软硬件可裁剪;对功能、可靠性、成本、体积、功耗要求严格;代码短小精悍,可固化;实时性;弱交互性;需要专门的开发环境和开发工具;第1章嵌入式系统概述1.4
嵌入式系统的组成图1.1嵌入式系统组成框图第1章嵌入式系统概述1.4.1
嵌入式系统的硬件组成嵌入式系统硬件设备包括嵌入式处理器和外围设备。其中,嵌入式处理器是嵌入式系统的核心部分。它将通用处理器中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。
外围设备是嵌入式系统中用于完成存储、通信、调试、显示等辅助功能的其他部件。目前常用的嵌入式外围设备按功能可以分为存储设备(如RAM、SRAM、Flash等)、通信设备(如RS-232接口、SPI接口、以太网接口)和显示设备(如LCD等)三类。第1章嵌入式系统概述1.4.2
嵌入式系统的软件组成图1.2嵌入式系统软件子系统组成框图
嵌入式操作系统和嵌入式应用软件是整个系统的控制核心,控制整个系统的运行,提供人机交互的信息等。在嵌入式系统不同的应用领域和不同的发展阶段,嵌入式系统软件组成也不完全相同,但基本上可以分为应用层、操作系统(OS)层和硬件设备驱动层。如左图所示。第1章嵌入式系统概述1.5
嵌入式操作系统
嵌入式操作系统(EmbeddedOperatingSystem,EOS)是指用于嵌入式系统的操作系统。目前常用的包括VxWorks、WindowsCE、µC/OS-Ⅱ、Linux等。VxWorks:
美国WindRiver公司开发的嵌入式实时操作系统。单就性能而言,它是非常优秀的操作系统:具有可裁剪的微内核结构,高效的任务管理,灵活的任务间通信,微秒级的中断处理,支持POSIX1003.1b实时扩展标准,支持多种物理介质及标准、完整的TCP/IP网络协议等。第1章嵌入式系统概述WindowsCE:
微软公司针对嵌入式设备开发的32位、多任务、多线程的操作系统。它支持x86、ARM、MIPS、SH等架构的CPU,硬件驱动程序丰富,比如支持WiFi、USB2.0等新型设备,并具有强大的多媒体功能;可以灵活裁剪,以减小系统体积;但是,其源代码没有开放(目前仅开放了一小部分),开发人员难以进行更细致的定制;占用的内存较多,整个系统相对庞大;版权许可费用也比较高。第1章嵌入式系统概述µC/OS-Ⅱ:
一个源码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统,可用于8位、16位和32位处理器。其特点包括:可裁剪,对硬件要求较低;可以运行最多64个任务;调度方式为抢占式,即总是运行最高优先级的就绪任务。需要说明的是,μC/OS-Ⅱ仅是一个实时内核,用户需要完成其他更多的工作,比如编写硬件驱动程序、实现文件系统操作(使用文件的话)等。第1章嵌入式系统概述Linux:遵循GPL协议的开放源码的操作系统,使用时无需交纳许可费用。内核可任意裁剪,几乎支持所有的32位、64位CPU;内核中支持的硬件种类繁多,几乎可以从网络上找到所有硬件驱动程序;支持几乎所有的网络协议;有大量的应用程序可用,从编译工具、调试工具到GUI程序。其缺点在于实时性,虽然2.6版本的Linux在实时性方面有较大改进,但是仍无法称为实时操作系统。第1章嵌入式系统概述1.6
嵌入式系统开发流程用户需求分析
系统的需求一般分为功能性需求和非功能性需求两个方面。功能性需求就是系统的基本功能。②体系结构设计
体系结构设计描述系统如何实现需求分析里面所述的功能性和非功能性需求。③软/硬件设计
由于ARM硬件体系的一致性,因此嵌入式系统设计工作大部分都集中在软件设计上。第1章嵌入式系统概述④系统集成
系统集成即把初步设计好的硬件、软件和执行装置等集成在一起,进行联调;在联调过程中发现并改进单元设计过程中的不足或错误;针对具体的问题,对软硬件进行调整。⑤系统测试
系统测试即对设计好的系统进行测试,验证其是否满足规格说明中规定的要求。针对不同复杂程度的系统,目前有一些常用的系统设计方法,如瀑布设计法、自顶向下设计法、自下向上设计法、螺旋设计法、逐步细化设计法和并行设计法等。第1章嵌入式系统概述图1.3嵌入式开发流程框图第1章嵌入式系统概述?问题与思考:1.列举几个你身边的嵌入式系统的例子。2.什么叫嵌入式系统?3.什么是嵌入式处理器?嵌入式处理器分为哪几类?4.什么是嵌入式操作系统?为何要使用嵌入式操作系统?5.嵌入式系统的特点是什么?ARM微处理器体系结构ARM简介Cortex-A9内部功能及特点Cortex-A9架构的处理器状态Cortex-A9内核的工作模式Cortex-A9架构的内核寄存器ARM的异常中断Cortex-A9的存储系统2第2章ARM微处理器体系结构2.1
ARM简介ARM公司是一家知识产权供应商,它与一般的半导体公司最大的不同就是不制造芯片且不向终端用户出售芯片,而是通过转让设计方案,由合作伙伴生产出各具特色的芯片。目前,100多家公司与ARM公司签订了技术使用许可协议,其中包括Intel、IBM、LG、NEC、SONY、NXP、NS、Samsung、Freescale、Atmel等这样的大公司。第2章ARM微处理器体系结构2.1.1
RISC结构RISC即精简指令集计算机,它的指令格式和长度通常是固定的(如ARM是32位的指令),且指令和寻址方式少而简单,大多数指令在一个周期内就可以执行完毕。RISC的设计重点在于降低处理器中指令执行部件的硬件复杂度,这是因为软件比硬件更容易提供更大的灵活性和更高的智能化。
与RISC架构对应的是CISC(复杂指令集计算机)架构。特点是通过存放在只读存储器中的微码(Microcode)来控制整个处理器的运行。在CISC架构下,一条指令往往可以完成一串运算动作,但却需要多个时钟周期来执行。第2章ARM微处理器体系结构RISC和CISC在构架上的不同:RISC构架的指令格式和长度通常是固定的;CISC构架下的指令长度通常是可变的;RISC在结构设计上是一个载入/存储的构架,只有载入和存储指令可以访问存储器,数据处理指令只对寄存器的内容进行操作。为了加速程序的运算,RISC会设定多组寄存器,并且指定特殊用途的寄存器。CISC架构则允许数据处理指令对存储器进行操作,对寄存器的要求相对不高。第2章ARM微处理器体系结构2.1.2
ARM体系架构的发展ARMv4ARMv4EARMv5TEARMv5TEJARMv6ARMv7ARMv8图2.1ARM体系发展过程第2章ARM微处理器体系结构ARMv4:只支持32位的指令集,支持32位的地址空间。ARMv4E:在ARMv4基础上增加了16位的Thumb指令集,代码更紧凑。ARMv5TE:改进了Thumb指令集:增加了一些“增强型DSP指令”,用于增强处理器对一些典型的DSP算法的处理性能。ARMv5TEJ:增加了Jazelle技术,用于提供Java加速功能。ARMv6:在存储系统、异常处理以及对多媒体功能的支持等多方面都有改进。
ARMv7:使用Thumb-2技术,还使用了NEON技术。ARMv8:ARM公司的首款支持64位指令集的处理器架构。第2章ARM微处理器体系结构2.1.2
ARM处理器系列ARM7ARM9ARM9EARM10通用处理器属低端ARM处理器核,没有内存管理单元(MMU)。增加了MMU和CACHE,执行效率进一步得到提升。在单一的处理器内核上提供了微控制器、DSP、Java应用系统的解决方案。使用新的体系结构,具有更加杰出的高性能、低功耗两个特点。第2章ARM微处理器体系结构ARM11Cortex SecurCoreOptimoDEDataEnginesARMv6架构的第一代实现。基于v7A的Cortex-A系列,面向尖端的基于虚拟内存的操作系统和用户应用。SecurCore系列微处理器专为安全需要而设计,提供了完善的32位RISC技术的安全解决方案。针对高性能的嵌入式信号处理应用而设计。基于v7R的Cortex-R系列,针对实时系统。基于v7M的Cortex-M系列,针对微控制器。第2章ARM微处理器体系结构2.2
Cortex-A9内部功能及特点2.2.1
功能特点图2.2Cortex-A9处理器的体系结构第2章ARM微处理器体系结构010204030506Thumb-2技术
NEON媒体处理
引擎技术浮点运算单元优化了一级缓存的性能和功耗二级缓存控制器采用高效超标量流水线07SCU技术08多核TrustZone技术第2章ARM微处理器体系结构2.2.2
Cortex-A9的流水线
传统的单片机(如8051)中,处理器只有完成一条指令的读取和执行后,才会开始下一条指令的处理,所以PC(程序计数器)总是指向正在执行的指令。而在ARM体系架构中则引入了流水线的概念。流水线是ARM体系架构提高执行效率的一种有效策略。第2章ARM微处理器体系结构图2.3三级流水线结构的指令执行顺序(1)在第1个周期,PC指向指令1,此时指令1进入三级流水线的取指阶段。(2)在第2个周期,PC指向指令2,此时指令1进入三级流水线的译码阶段,同时取出指令2。(3)在第3个周期,PC指向指令3,此时指令1进入三级流水线的执行阶段,指令2进入译码阶段,取出指令3。(4)在第4个周期,指令1执行完成,指令2和指令3流水线推进一级,同时开始指令4的取指处理第2章ARM微处理器体系结构2.3
Cortex-A9架构的处理器状态四种状态:指令集状态、执行状态、安全状态和调试状态。指令集状态——提供了4种指令集状态,分别是ARM状态、Thumb状态、Jazelle状态和ThumbEE状态。执行状态——包括指令集状态和一些控制指令流编码的位。安全状态——安全状态的数目依赖于是否执行安全扩展。调试状态——由于调试事件的存在,处理器被配置成暂停调试模式。第2章ARM微处理器体系结构2.4
Cortex-A9内核的工作模式表2.1ARM处理器的模式第2章ARM微处理器体系结构2.5Cortex-A9架构的内核寄存器
从系统角度来看,Cortex-A9架构内部共有42个用户可以访问的32位寄存器,这些寄存器分别为:(1)
13个通用32位寄存器:R0_usr~R12_usr。特殊的,在FIQ模式下,R8~R12对应为R8_fiq、R9_fiq、R10_fiq、R11_fiq、R12_fiq。(2)
8个状态寄存器:CPSR、SPSR_hyp、SPSR_svc、SPSR_abt、SPSR_und、SPSR_mon、SPSR_irq、SPSR_fiq。第2章ARM微处理器体系结构(3)针对不同模式的三种寄存器:SP(R13)、LR(R14)、PC(R15)。在不同模式下,它们分别为SP_usr(R13)、SP_hyp、SP_scv、SP_abt、SP_und、SP_mon、SP_irq、SP_fiq、LR_usr(R14)、LR_svc、LR_abt、LR_und、LR_mon、LR_irq、LR_fiq、PC。第2章ARM微处理器体系结构2.5.1
ARM状态下的寄存器表2.2ARM处理器各种模式下的寄存器第2章ARM微处理器体系结构2、一般通用寄存器:R0~R7为保存数据或地址值的通用寄存器;R8~R14所对应的物理寄存器取决于当前的物理寄存器模式;R13、R14在不同模式下分别对应不同的寄存器,除用户模式和系统模式外。第2章ARM微处理器体系结构3、堆栈指针寄存器SP4、
链接寄存器LR第2章ARM微处理器体系结构?5、程序指针寄存器PC6、程序状态寄存器CPSR和程序状态保存寄存器SPSRCPSR和SPSR的区别第2章ARM微处理器体系结构2.6ARM异常中断表2.3ARM的异常向量地址一览表第2章ARM微处理器体系结构复位异常当复位异常时,系统主要执行下列伪操作:
R14_svc=UNPREDICTABLEvalue
SPSR_svc=UNPREDICTABLEvalue
CPSR[4:0]=0b10011
;进入特权模式
CPSR[5]=0
;处理器进入ARM状态
CPSR[6]=1
;禁止快速中断
CPSR[7]=1
;禁止外设中断IfhighvectorsconfiguredthenPC=0xffff0000
else
PC=0x00000000第2章ARM微处理器体系结构2.未定义指令异常当未定义指令异常发生时,系统主要执行下列伪操作:r14_und=addressofnextinstructionaftertheundefinedinstruction
SPSR_und=CPSR
CPSR[4:0]=0b11011
;进入未定义指令模式
CPSR[5]=0
;处理器进入ARM状态
;CPSR[6]保持不变
CPSR[7]=1
;禁止外设中断
IfhighvectorsconfiguredthenPC=0xffff0004
elsePC=0x00000004第2章ARM微处理器体系结构3.软件中断异常:软件中断异常发生时,处理器主要执行下列伪操作:
r14_svc=addressofnextinstructionaftertheSWIinstruction
SPSR_und=CPSR
CPSR[4:0]=0b10011;
进入特权模式
CPSR[5]=0;
处理器进入ARM状态;CPSR[6] 保持不变
CPSR[7]=1;
禁止外设中断IfhighvectorsconfiguredthenPC=0xffff0008
elsePC=0x00000008第2章ARM微处理器体系结构4.预取中止异常:预取中止异常发生时,处理器主要执行下列伪操作:r14_svc=addressoftheabortedinstruction+4
SPSR_und=CPSRCPSR[4:0]=0b10111
;进入特权模式CPSR[5]=0
;处理器进入ARM状态;CPSR[6]保持不变CPSR[7]=1
;禁止外设中断IfhighvectorsconfiguredthenPC=0xffff000CelsePC=0x0000000C第2章ARM微处理器体系结构5.数据中止异常:当数据中止异常发生时,处理器主要执行下列伪操作:r14_abt=addressoftheabortedinstruction+8SPSR_abt=CPSR CPSR[4:0]=0b10111 CPSR[5]=0 ;处理器进入ARM状态; CPSR[6]保
持不变CPSR[7]=1 ;禁止外设中断Ifhighvectorsconfiguredthen PC=0xffff000C10 else PC=0x00000010 第2章ARM微处理器体系结构6.外部中断异常:当外部中断异常发生时,处理器主要执行下列伪操作:r14_irq=addressofnextinstructiontobeexecuted+4SPSR_irq=CPSRCPSR[4:0]=0b10010
;进入特权模式CPSR[5]=0
;处理器进入ARM状态;CPSR[6]保持不变CPSR[7]=1
;禁止外设中断IfhighvectorsconfiguredthenPC=0xffff0018elsePC=0x00000018第2章ARM微处理器体系结构7.快速中断异常:当快速中断异常发生时,处理器主要执行下列伪操作:r14_fiq=addressofnextinstructiontobeexecuted+4SPSR_fiq=CPSRCPSR[4:0]=0b10001
;进入快速中断模式CPSR[5]=0
;处理器进入ARM状态CPSR[6]=0
;允许快速中断CPSR[7]=1
;禁止外设中断IfhighvectorsconfiguredPC=0xffff001celsePC=0x0000001c第2章ARM微处理器体系结构2.6.3
ARM异常优先级表2.4ARM异常的优先级第2章ARM微处理器体系结构2.7Cortex-A9的存储系统2.7.1ARM存储系统的相关概念1、存储器的字节、半字、字与双字2、存储方式:表2.5字对齐和半字对齐地址示例第2章ARM微处理器体系结构3、存储格式:1)大端存储系统图2.6大端存储系统示意图第2章ARM微处理器体系结构2)小端存储系统图2.7小端存储系统示意图第2章ARM微处理器体系结构2.7.1ARMCortex-A9存储系统的架构Cortex-A9采用虚拟存储系统架构(VMSA)的处理器,其存储系统的架构示意图如图2.6所示:图2.8多层次高速缓存架构第2章ARM微处理器体系结构?问题与思考:1.RISC和CISC架构的区别是什么?2.简述三级流水线的概念?Cortex-A9面向多核技术的特点有哪些?3.ARM处理器模式和ARM处理器状态有何区别?列举Cortex-A9处理器的模式和状态。4.ARMv7的内核工作模式有哪些?哪些属于异常工作模式?5.针对不同的异常模式,SP和LR分别使用哪个寄存器?6.简述Cortex-A9存储器的体系架构。ARM的指令系统及汇编程序设计3指令系统简介寻址方式ARM指令集GNUARM汇编器支持的伪操作指令ARM汇编伪指令ARM汇编编程简介第3章ARM的指令系统及汇编程序设计3.1
指令系统简介
指令是规定处理器进行某种操作的命令,处理器能够执行的各种指令的集合称为指令系统。3.1.1
ARM指令分类1、ARM指令集ARM指令集主要包括数据处理和杂项指令、分支指令、存储器访问指令、程序状态寄存器处理指令、协处理器指令和异常中断指令六大类。所有ARM指令均为32位长度,指令以字对齐方式保存在存储器中。2、Thumb指令集
当处理器工作在Thumb状态时,执行Thumb指令集。所有的Thumb指令都是16位长度,指令以半字对齐方式保存在存储器中。第3章ARM的指令系统及汇编程序设计表3.1ARM指令的典型编码格式3.1.2
ARM指令的编码格式各部分编码含义如下:
cond:指令执行的条件码;opcode:指令操作符的编码;S:决定指令的执行是否影响CPSR(当前程序状态寄存器)的值;Rn:包含第一个源操作数的寄存器编码;第3章ARM的指令系统及汇编程序设计第3章ARM的指令系统及汇编程序设计3.1.3ARM指令的条件码域表3.2指令的条件码第3章ARM的指令系统及汇编程序设计
当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件地执行,如表3.2所示。当指令的执行条件满足时,指令被执行,否则指令被忽略,继续执行下一条指令。第3章ARM的指令系统及汇编程序设计3.2
寻址方式1.立即数寻址立即数寻址指令中,操作码字段后面的地址部分即操作数本身。SUBSR0,R0,#1;R0←R0–1,并且影响标志位ADDR0,R0,#0x3f;R0←R0+0x3f第3章ARM的指令系统及汇编程序设计2.寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数。ADDR0,R1,R2;R0←R1 + R2该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。第3章ARM的指令系统及汇编程序设计3.寄存器移位寻址寄存器移位寻址是ARM指令集特有的寻址方式。当第二个操作数是寄存器方式时,第二个寄存器操作数在与第一个操作数结合之前,先进行移位操作。MOVR0,R2,LSL#3 ;R2的值左移3位,结果放入R0ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相“与”,结果放入R1中第3章ARM的指令系统及汇编程序设计4.寄存器间接寻址寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。LDRR1,[R2];将R2指向的存储单元的数据读出,保存在R1中SWPR1,R1,[R2];将寄存器R1的值和R2指定的存储单元的内容交换第3章ARM的指令系统及汇编程序设计5.基址变址寻址基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。LDRR0,[R1,#4];将寄存器R1的内容加上4形成操作数的有效地址,从该地
址取得操作数存入寄存器R0中。LDRR0,[R1,R2];将寄存器R1的内容加上寄存器R2的内容,形成操作数的有效地址,从该地址取得操作数存入寄存器R0中。LDRR0,[R1],#4;寄存器R1的内容作为操作数的有效地址,从该地址取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。第3章ARM的指令系统及汇编程序设计6.多寄存器寻址该指令可以一次完成多个寄存器值的传送,这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值。LDMIAR0,{R1,R2,R3,R4};R1←[R0],R2←[R0 + 4],R3←[R0 + 8],R4←[R0 + 12]第3章ARM的指令系统及汇编程序设计7.相对寻址相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到的操作数作为有效地址。8.堆栈寻址使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。第3章ARM的指令系统及汇编程序设计3.3
ARM指令集3.3.1
移位操作指令
移位操作包括LSL(逻辑左移)、ASL(算术左移)、LSR(逻辑右移)、ASR(算术右移)、ROR(循环右移)和RRX(带扩展的循环右移)6种类型。1.LSL(或ASL)LSL(或ASL)可完成对通用寄存器中的内容进行逻辑(或算术)左移的操作。MOVR0,R1,LSL#2;将R1中的内容左移两位后传送到R0中。第3章ARM的指令系统及汇编程序设计2. LSRLSR可完成对通用寄存器中的内容进行逻辑右移的操作,按操作数所指定的数量向右移位,左端用零来填充。MOVR0,R1,LSR#2;将R1中的内容右移两位后传送到R0中,左端用零来填充。3. ASRASR可完成对通用寄存器中的内容进行算术右移的操作,按操作数所指定的数量向右移位,左端用位31的值来填充。MOVR0,R1,ASR#2;将R1中的内容右移两位后传送到R0中,左端用位31的值来填充第3章ARM的指令系统及汇编程序设计4. RORROR可完成对通用寄存器中的内容进行循环右移的操作,按操作数所指定的数量向右循环移位,左端用右端移出的位来填充。MOVR0,R1,ROR#2;将R1中的内容循环右移两位后传送到R0中。5. RRXRRX可完成对通用寄存器中的内容进行带扩展的循环右移的操作,按操作数所指定的数量向右循环移位,左端用进位标志位C来填充。MOVR0,R1,RRX#2;将R1中的内容进行带扩展的循环右移两位后传送到R0中。第3章ARM的指令系统及汇编程序设计3.3.2数据处理指令
数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。数据传送指令:
1)MOVMOVR1,R0;
将寄存器R0的值传送到寄存器R1中MOVPC,R14;
将寄存器R14的值传送到PC中,常用于子程序返回
第3章ARM的指令系统及汇编程序设计数据传送指令:
2)MOVN
与MOV不同的是在传送之前,将操作数按位取反,再进行传送。
MVNR0,#0;
将立即数0取反传送到寄存器R0中,完成后R0=-1
第3章ARM的指令系统及汇编程序设计算术逻辑运算指令:
1)AND
将两个操作数进行逻辑与操作,常用于屏蔽操作数1的某些位。
ANDR0,R0,#3(#00000011);指令保持R0的0、1位,其余位清零
2)ORR
将两个操作数进行逻辑或运算,常用于设置操作数1的某些位。ORRR0,R0,#3(#00000011);该指令设置R0的0、1位,其余位保持不变第3章ARM的指令系统及汇编程序设计算术逻辑运算指令:
3)EOR
将两个操作数进行异或操作,常用于反转操作数1的某些位。
EORR0,R0,#3(#00000011);
该指令反转R0的0、1位,其余位不变
4)ADD
将两个操作数进行算术相加运算。 ADDR0,R1,R2;该指令将寄存器R1的内容与R2的内容相加,结果放在寄存器R0里面第3章ARM的指令系统及汇编程序设计算术逻辑运算指令:
5)ADC
与ADD的区别是除了两个操作数进行相加外,还包括CPSR中的C标志位。
ADDSR0,R4,R8;
加低端的字
ADCSR1,R5,R9;
加第二个字,带进位
ADCSR2,R6,R10;
加第三个字,带进位 ADCR3,R7,R11;
加第四个字,带进位
上面四行指令的作用是实现两个128位数的加法运算。第3章ARM的指令系统及汇编程序设计算术逻辑运算指令:
6)SUB
将两个操作数进行相减操作。
SUBR0,R2,R3,LSL#1;
将R3寄存器的内容左移一位后的结果与R3相减
7)SBC
与SUB的区别是还要减去C标志位的反码。 SBCR0,R1,R2; R0=R1-R2-!C,并根据结果设置CPSR的进位标志位第3章ARM的指令系统及汇编程序设计算术逻辑运算指令:
8)RSB
与SUB的区别是:减数与被减数的位置颠倒一下。
RSBR0,R1,R2;
R0=R2–R1
9)RSC
与RSB的区别是:除了两个数相减外,还要减去C标志位的反码。
RSCR0,R1,R2;
R0=R2–R1-!C第3章ARM的指令系统及汇编程序设计算术逻辑运算指令:
10)TST
将操作数1和操作数2按位与运算之后,再更新GPSR中的条件标志位。一般用来检测是否设置了特定的位
TSTR1,#0xffee;
将寄存器R1的值与0xffe按位与,并根据结果设置CPSR的标志位
11)TEQ
将操作数1和操作数2按位异或运算之后,再更新GPSR中的条件标志位。一般用来检测操作数1和操作数2是否相等 TEQR1,R2;
检查两个操作数是否相等第3章ARM的指令系统及汇编程序设计比较指令:
1)CMP
将两个操作数进行比较,同时更新CPSR中的标志位。
CMPR1,R0 ;
将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位
2)CMN
操作数1和取反后的操作数2进行比较,再更新CPSR中的标志位。 CMNR1,R0 ;
将寄存器R1的值与寄存器R0的值相加,并根据结果设置CPSR的标志位第3章ARM的指令系统及汇编程序设计比较指令:
3)BIC
操作数2是32位的掩码,如果在掩码中设置了某一位,则相应的在操作数1中清除对应的那一位。
BICR0,R0,#%1011;该指令清除R0中的位0、1和3,其余的位保持不变
第3章ARM的指令系统及汇编程序设计3.3.3乘法指令与乘加指令
指令中的寄存器必须是通用寄存器,不能是立即数。乘法指令:
1)MUL
操作数1和操作数2进行相乘运算。
MULR0,R1,R2;R0=R1×R2
第3章ARM的指令系统及汇编程序设计乘法指令:
2)SMULL
完成操作数1与操作数2的乘法运算,并把结果的低32位放置到目的寄存器Low中,结果的高32位放置到目的寄存器High中。
SMULLR0,R1,R2,R3;R0=(R2×R3)的低32位,R1=(R2×R3)的高32位
3)UMLAL
与SMULL的区别是操作数1和2均为无符号整数。
UMULLR0,R1,R2,R3;R0 = (R2 × R3)的低32位,R1 = (R2 × R3)的高32位第3章ARM的指令系统及汇编程序设计乘加指令:
1)MLA
完成操作数1与操作数2的乘法运算,再将乘积加上操作数3,并把结果放置到目的寄存器中。
MLAR0,R1,R2,R3;
R0=R1×R2+R3
2)SMLAL
与SMULL的区别是将SMULL得到的结果低32位同目的寄存器的低32位相加放到目的寄存器low中,高32位是类似的。
SMLALR0,R1,R2,R3;R0 = (R2 × R3)的低32位 + R0,R1 = (R2 × R3)的高32位 + R1第3章ARM的指令系统及汇编程序设计乘加指令:
3)UMLAL
与SMLAL的区别是操作数1和2均为无符号的32位整数。
UMLALR0,R1,R2,R3;
R0 = (R2 × R3)的低32位 + R0,R1=(R2 × R3)的高32位 + R1第3章ARM的指令系统及汇编程序设计3.3.4加载/存储指令
加载/存储指令用于寄存器和存储器之间的数据传送。加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。加载指令:
1)LDR
从存储器中将一个32位的字数据传送到目的寄存器中。
LDRR0,[R1,R2];
将存储器地址为R1 + R2的字数据读入寄存器R0 LDRR0,[R1],R2;
将存储器地址为R1的字数据读入寄存器R0,并将新地址R1 + R2写入R1第3章ARM的指令系统及汇编程序设计加载指令:
2)LDRH
从存储器中将一个16位的半字数据传送到目的寄存器中,将寄存器的高16位清零。
LDRHR0,[R1,#8];
将存储器地址为R1 + 8的半字数据读入寄存器R0,并将R0的高16位清零
3)LDRB
与LDRH的区别是传送的是8位字节数据,将寄存器的高24位清零。 LDRBR0,[R1];
将存储器地址为R1的字节数据读入寄存器R0,并将R0的高24位清零第3章ARM的指令系统及汇编程序设计存储指令:
1)STR
将源寄存器的32位数据传送到存储器上面。
STRR0,[R1,#8];
将R0中的字数据写入以R1 + 8为地址的存储器中
2)STRH
将源寄存器的低16位数据传送到存储器上面。 STRHR0,[R1,#8];
将寄存器R0中的半字数据写入以R1 + 8为地址的存储器中第3章ARM的指令系统及汇编程序设计存储指令:
3)STRB
将源寄存器的低8位数据传送到存储器上面。
STRBR0,[R1];
将寄存器R0中的字节数据写入以R1为地址的存储器中第3章ARM的指令系统及汇编程序设计3.3.5批量数据加载/存储指令
批量数据加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。批量数据加载指令为LDM,批量数据存储指令为STM。 LDM(或STM)指令的格式为: LDM(或STM){条件}{类型}基址寄存器{!},寄存器列表{^}注意:基址寄存器不能为R15!!!!!第3章ARM的指令系统及汇编程序设计{类型}有以下几种情况: IA—每次传送后地址加1; IB—每次传送前地址加1; DA—每次传送后地址减1; DB—每次传送前地址减1; FD—满递减堆栈; ED—空递减堆栈; FA—满递增堆栈; EA—空递增堆栈;第3章ARM的指令系统及汇编程序设计STMFD R13!,{R0,R4-R12,LR};
将寄存器列表中的寄存器(R0,R4到R12,LR)存入堆栈LDMFD R13!,{R0,R4-R12,LR} ;将堆栈内容恢复到寄存器(R0,R4到R12,LR)第3章ARM的指令系统及汇编程序设计3.3.6跳转指令
跳转指令用于实现程序流程的跳转。一般有两种方法实现程序的跳转:(1)使用专门的跳转指令。(2)直接向程序计数器PC写入跳转地址值。
1)B
处理器将立即跳转到给定的目标地址,从那里继续执行。
B Label; 程序无条件跳转到标号Label处执行 CMP R1,#0; BEQ Label; 当CPSR寄存器中的Z条件码置位,程序跳转到标号Label处执行第3章ARM的指令系统及汇编程序设计跳转指令:
2)BL
与B的区别是:在跳转之前会将当前PC的值保存在R14中。
BLLabel;当程序无条件跳转到标号Label处执行时,将当前的PC值保存到R14中
3)BLX
与BL的区别是ARM处理器的状态由ARM状态转换到Thumb状态。
第3章ARM的指令系统及汇编程序设计3.3.7程序状态寄存器访问指令 ARM微处理器支持程序状态寄存器访问指令,这些指令用于在程序状态寄存器和通用寄存器之间传送数据。程序状态寄存器访问指令包括MRS指令和MSR指令。第3章ARM的指令系统及汇编程序设计 1)MRS
MRS指令用于将程序状态寄存器的内容传送到通用寄存器中。
MRS指令的语法格式为:MRS{条件}通用寄存器,程序状态寄存器(CPSR或SPSR) MRS R0,CPSR;
传送CPSR的内容到R0 MRS R0,SPSR;
传送SPSR的内容到R0第3章ARM的指令系统及汇编程序设计 2)MSR
MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。
MSR指令的语法格式为:MSR{条件}程序状态寄存器(CPSR或SPSR)_<域>,操作数 MSR CPSR,R0;
传送R0的内容到CPSR MSR SPSR,R0;
传送R0的内容到SPSR MSR CPSR_c,R0;
传送R0的内容到SPSR,但仅仅修改CPSR中的控制位域第3章ARM的指令系统及汇编程序设计3.3.8数据交换指令 ARM微处理器支持数据交换指令,这些指令用于在存储器和寄存器之间交换数据。数据交换指令包括SWP(字数据交换指令)和SWPB(字节数据交换指令)。与之相对应的程序状态寄存器访问指令,它用于的是在程序状态寄存器和通用寄存器之间的数据交换。第3章ARM的指令系统及汇编程序设计 1)SWP
SWP指令用于将源寄存器2所指向的存储器中的字数据传送到目的寄存器中,同时将源寄存器1中的字数据传送到源寄存器2所指向的存储器中。
SWP指令的语法格式为
SWP{条件}目的寄存器,源寄存器1,[源寄存器2] SWPR0,R1,[R2]; 将R2所指向的存储器中的字数据传送到R0,同时将R1中的字数据传送到R2所指向的存储单元第3章ARM的指令系统及汇编程序设计 2)SWPB
SWPB指令用于将源寄存器2所指向的存储器中的字节数据传送到目的寄存器中,目的寄存器的高24位清零,同时将源寄存器1中的字节数据传送到源寄存器2所指向的存储器中。
SWPB指令的语法格式为SWPB{条件}目的寄存器,源寄存器1,[源寄存器2] SWPB R0,R0,[R1]; 将R1所指向的存储器中的字节数据与R0中的低8位数据交换第3章ARM的指令系统及汇编程序设计3.3.9协处理器指令 ARM的协处理器指令主要用于ARM处理器初始化、ARM协处理器的数据处理操作、在ARM处理器的寄存器和协处理器的寄存器之间传送数据、在ARM协处理器的寄存器和存储器之间传送数据。ARM协处理器指令包括CDP、LDC、STC、和MRC。第3章ARM的指令系统及汇编程序设计 1)CDP
CDP指令用于ARM处理器通知ARM协处理器执行特定的操作。若协处理器不能成功完成特定的操作,则产生未定义指令异常。
CDP指令的语法格式为CDP{条件}协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2 CDP P3,2,C12,C10,C3,4;
完成协处理器P3的初始化第3章ARM的指令系统及汇编程序设计 2)LDC
LDC指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中。若协处理器不能成功完成传送操作,则产生未定义指令异常。
LDC指令的语法格式为LDC{条件}{L}协处理器编码,目的寄存器,[源寄存器]
LDC P3,C4,[R0];
将ARM处理器的寄存器R0所指向的存储器中的字数据传送到协处理器P3的寄存器C4中第3章ARM的指令系统及汇编程序设计 3)STC
STC指令用于将源寄存器中的字数据传送到目的寄存器所指向的存储器中。若协处理器不能成功完成传送操作,则产生未定义指令异常。 STC指令的语法格式为STC{条件}{L}协处理器编码,源寄存器,[目的寄存器]
STC P3,C4,[R0];
将协处理器P3的寄存器C4中的字数据传送到ARM处理器的寄存器R0所指向的存储器中第3章ARM的指令系统及汇编程序设计 4)MCR
MCR指令用于将ARM处理器的寄存器中的数据传送到协处理器的寄存器中。若协处理器不能成功完成操作,则产生未定义指令异常。 MCR指令的语法格式为MCR{条件}协处理器编码,协处理器操作码1,源寄存器,目的寄存器1,目的寄存器2,协处理器操作码2
MCR P3,3,R0,C4,C5,6;
将ARM处理器的寄存器R0中的数据传送到协处理器P3的寄存器C4和C5中第3章ARM的指令系统及汇编程序设计 5)MRC
MRC指令用于将协处理器寄存器中的数据传送到ARM处理器的寄存器中。若协处理器不能成功完成操作,则产生未定义指令异常。 MRC指令的语法格式为MRC{条件}协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2
MRC P3,3,R0,C4,C5,6;
将协处理器P3的寄存器中的数据传送到ARM处理器的寄存器中第3章ARM的指令系统及汇编程序设计3.3.10异常产生指令 ARM微处理器支持的异常指令有SWI指令(软件中断指令)和BKPT指令(断点中断指令)。
1)SWI
SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。SWI指令的语法格式为: SWI{条件}24位的立即数 SWI 0x02;
调用操作系统编号为02的系统例程第3章ARM的指令系统及汇编程序设计 2)BKPT
BKPT指令产生软件断点中断,可用于程序的调试。 BKPT指令的语法格式为: BKPT16位的立即数
第3章ARM的指令系统及汇编程序设计3.4GNUARM汇编器支持的伪操作指令
在ARM汇编语言程序中,有一些特殊指令助记符,它们与指令系统的助记符有所不同,没有相应的操作码,通常称这些特殊指令助记符为伪操作标识符。在汇编程序中,伪操作指令主要有符号定义伪操作指令、数据定义伪操作指令、汇编控制伪操作指令及其杂项伪操作指令等。第3章ARM的指令系统及汇编程序设计符号定义伪操作指令:
1)GBLA、GBLL
和GBLS GBLA:用于定义一个全局的数字变量;
GBLL:用于定义一个全局的逻辑变量; GBLS:用于定义一个全局的字符串变量。第3章ARM的指令系统及汇编程序设计符号定义伪操作指令:
2)LCLA、LCLL和LCLS LCLA:用于定义一个ARM程序中的局部变量; LCLL:用于定义一个局部的逻辑变量; LCLS:用于定义一个局部的字符串变量。第3章ARM的指令系统及汇编程序设计符号定义伪操作指令:
3)SETA、SETL和SETS SETA:用于给一个已经定义的全局变量或局部变量赋值; SETL:用于给一个逻辑变量赋值; SETS:用于给一个字符串变量赋值。第3章ARM的指令系统及汇编程序设计符号定义伪操作指令:
4)RLIST
RLIST伪指令用于对一个通用寄存器列表定义名称。该伪指令定义的名称可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器访问次序需根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。 RLIST伪指令的语法格式为
名称RLIST{寄存器列表}第3章ARM的指令系统及汇编程序设计符号定义伪操作指令:
GBLATest1;
定义一个全局的数字变量,变量名为Test1
Test1SETA0xaa;
将该变量赋值为0xaa
LCLLTest5;
声明一个局部的逻辑变量,变量名为Test5
Test4SETL{TRUE};
将该变量赋值为真
LCLATest3;
声明一个局部的数字变量,变量名为Test3
Test3SETA0xaa;
将该变量赋值为0xaa
RegListRLIST{R0-R5,R8,R10};
将寄存器列表定义为RegList,可在ARM指令LDM/STM中通过该名称访问寄存器列表第3章ARM的指令系统及汇编程序设计数据定义伪操作指令:
1)DCB
DCB伪指令用于分配一片连续的字节存储单元并用伪指令中指定的表达式初始化。
DCB伪指令的语法格式为:
标号DCB表达式 StrDCB"Thisisatest!";
分配一片连续的字节存储单元并初始化第3章ARM的指令系统及汇编程序设计数据定义伪操作指令:
2)DCW(DCWU)
DCW(DCWU)伪指令用于分配一片连续的半字存储单元并用伪指令中指定的表达式初始化。
DCW伪指令的语法格式为:
标号DCW(DCWU)表达式 DataTestDCW1,2,3;
分配一片连续的半字存储单元并初始化第3章ARM的指令系统及汇编程序设计数据定义伪操作指令:
3)DCD(DCDU)
DCD(DCDU)伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。
DCD(DCDU)伪指令的语法格式为:
标号DCD(DCDU)表达式 DataTestDCD4,5,6;
分配一片连续的字存储单元并初始化第3章ARM的指令系统及汇编程序设计数据定义伪操作指令:
4)DCFD(DCFDU)
DCFD(DCFDU)伪指令用于为双精度的浮点数分配一片连续的字存储单元并用伪指令中指定的表达式初始化。
DCFD(DCFDU)伪指令的语法格式为:
标号DCFD(或DCFDU)表达式 FDataTestDCFD2E115,-5E7;
分配一片连续的字存储单元并初始化为指定的双精度数第3章ARM的指令系统及汇编程序设计数据定义伪操作指令:
5)DCFS(DCFSU)
DCFS(或DCFSU)伪指令用于为单精度的浮点数分配一片连续的字存储单元并用伪指令中指定的表达式初始化。
DCFS(DCFSU)伪指令的语法格式为:
标号DCFS(或DCFSU)表达式 FDataTestDCFS2E5,-5E-7;
分配一片连续的字存储单元并初始化为指定的单精度数第3章ARM的指令系统及汇编程序设计数据定义伪操作指令:
6)DCQ(DCQU)
DCQ(DCQU)伪指令用于分配一片以8个字节为单位的连续存储区域并用伪指令中指定的表达式初始化。
DCQ(DCQU)伪指令的语法格式为:
标号DCQ(DCQU)表达式 DataTestDCQ100;
分配一片连续的存储单元并初始化为指定的值第3章ARM的指令系统及汇编程序设计数据定义伪操作指令:
7)SPACE
SPACE伪指令用于分配一片连续的存储区域并初始化为0。其中,表达式为要分配的字节数。SPACE也可用“%”代替。 SPACE伪指令的语法格式为:
标号SPACE表达式 DataSpaceSPACE100 ;分配连续100字节的存储单元并初始化为0第3章ARM的指令系统及汇编程序设计数据定义伪操作指令:
8)MAP
MAP伪指令用于定义一个结构化的内存表的首地址。 MAP伪指令的语法格式为: MAP表达式{,基址寄存器} MAP0x100,R0;
定义结构化内存表首地址的值为0x100 + R0第3章ARM的指令系统及汇编程序设计数据定义伪操作指令:
9)FIELD
FIELD伪指令用于定义一个结构化内存表中的数据域。 FIELD伪指令的语法格式为:
标号FIELD表达式 MAP0x100;
定义结构化内存表首地址的值为0x100 AFIELD16;
定义A的长度为16字节,位置为0x100第3章ARM的指令系统及汇编程序设计汇编控制伪操作指令:
1).if….else….endif
.if….else….endif伪操作指令的语法格式为 .if逻辑表达式
指令1
… .elseif逻辑表达式2
指令2
… .endif第3章ARM的指令系统及汇编程序设计汇编控制伪操作指令:
2).macro….endm
.macro….endm伪操作指令的语法格式为 .macro {$标号}宏名{$参数1{,参数2,…}}
指令 .endm第3章ARM的指令系统及汇编程序设计汇编控制伪操作指令:
3).mexit
.mexit伪操作指令的语法格式为 .macro {$标号}宏名{$参数1{,参数2,…}}
指令 .endm第3章ARM的指令系统及汇编程序设计汇编控制伪操作指令:
4)WHILE、WEND
WHILE、WEND伪操作指令的语法格式为 WHILE逻辑表达式
指令序列
WEND第3章ARM的指令系统及汇编程序设计杂项伪操作指令:
1)AREA
AREA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用“ | ”括起来,如 |1_test|。属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。第3章ARM的指令系统及汇编程序设计常用的属性如下:● CODE属性:定义代码段,默认为READONLY。●
DATA属性:定义数据段,默认为READWRITE。●
READONLY属性:指定本段为只读,代码段默认为READONLY。●
READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE。●
COMMON属性:定义一个通用的段,不包含任何用户代码和数据。第3章ARM的指令系统及汇编程序设计杂项伪操作指令:
2)ALIGN 8)IMPORT 3)CODE16 9)EXTERN 4)ENTRY 10)GET 5)END 11)INCBIN 6)EQU 12)RN 7)EXPORT 13)ROUT第3章ARM的指令系统及汇编程序设计3.5ARM汇编伪指令ARM汇编程序中的伪指令不是真正的ARM指令或者Thumb指令。这些伪指令在汇编编译时被替换成对应的ARM或Thumb指令(序列)。ARM伪指令包括ADR、ADRL、LDR和NOP等。第3章ARM的指令系统及汇编程序设计汇编伪指令:
1)ADR(小范围地址的读取伪指令)
ADR指令将基于PC的地址值或基于寄存器的地址值读取到寄存器中。 ADR伪指令的语法格式为: ADR{cond}register,expr
其中,cond为可选的指令执行条件,register为目标寄存器,expr为基于PC或者基于寄存器的地址表达式。
第3章ARM的指令系统及汇编程序设计汇编伪指令:
startMOVr0,#10;
因为PC值为当前指令地址值加8字节 ADRr4,start;
本ADR伪指令将被编译器替换成SUBr4,pc,#0xc
第3章ARM的指令系统及汇编程序设计汇编伪指令:
2)ADRL(中等范围的地址读取伪指令)
ADRL指令将基于PC或基于寄存器的地址值读取到寄存器中。ADRL伪指令比ADR伪指令可以读取更大范围的地址。 ADRL伪指令的语法格式为: ADRL{cond}register,expr
其中,地址表达式expr的取值范围为:当地址值是字节对齐时,其取指范围为 -64 K~64 K;当地址值是字对齐时,其取指范围为 -256 K~256 K。
第3章ARM的指令系统及汇编程序设计汇编伪指令:
startMOVr0,#10;
因为PC值为当前指令地址值加8字节 ADRLr4,start + 60000;
本ADRL伪指令将被编译器替换成下面两条指令 ADDr4,pc,#0xe800 ADDr4,r4,#0x254
第3章ARM的指令系统及汇编程序设计汇编伪指令:
3)LDR(大范围的地址读取伪指令)
LDR伪指令将一个32位的常数或者一个地址值读取到寄存器中。 LDR伪指令的语法格式为: LDR{cond}register,=[expr|label-expr]
其中,expr为32位的常量。label-expr为基于PC的地址表达式或者是外部表达式。
第3章ARM的指令系统及汇编程序设计汇编伪指令:
LDR伪指令主要有以下两种用途:
①当需要读取到寄存器中的数据超过了MOV及MVN指令可以操作的范围时,可以使用LDR伪指令将该数据读取到寄存器中。
②将一个基于PC的地址值或者外部的地址值读取到寄存器中。
第3章ARM的指令系统及汇编程序设计汇编伪指令:
LDRR1,=0xFF0;
将0xff0读取到R1中
汇编后将得到 MOVR1,0xFF0 LDRR1,=0xFFF;
将0xfff读取到R1中
汇编后将得到 LDRR1,[PC,OFFSET_TO_LPOOL]
… LPOOLDCD0xFFF LDRR1,=ADDR1;
将外部地址ADDR1读取到R1中
汇编后将得到 LDRR1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Lesson3-4单元知识梳理(期末专用)(课件)-2025-2026学年科普版(2012)英语四年级下册
- 某食品加工厂质量管理条例
- 查理芒格:这五个行业未来20年永不过时
- 产品设计规范与输出模板集
- 艺术品交易市场维护承诺书4篇
- 2026年家政服务员资格考试冲刺模拟试卷及答案(共三套)
- 生物医药研发实验室操作指南
- 2026年高考语文十校联考全真模拟试卷及答案(共四套)
- 合同造价部2026年上半年工作总结
- 旅游公司总经理面试技巧
- 城市轨道交通行车值班员理论考试题库及答案
- 结核病的知识讲座
- 烟草公司物流中心装卸业务服务方案
- 园林植物主要食叶害虫及防治
- 景观绿化工程安全生产操作规程
- 《Linux网络操作系统管理》教学教案
- GB/T 18910.201-2021液晶显示器件第20-1部分:目检单色液晶显示屏
- 服饰配件设计1课件
- 市政工程监理交底书
- 2022年徐州生物工程职业技术学院单招职业技能考试笔试试题及答案解析
- ××团支部换届选举选票
评论
0/150
提交评论