收藏 分销(赏)

嵌入式系统应用考点总结(中国矿业大学徐海学院信息10-.docx

上传人:xrp****65 文档编号:5934172 上传时间:2024-11-23 格式:DOCX 页数:37 大小:1.74MB 下载积分:10 金币
下载 相关 举报
嵌入式系统应用考点总结(中国矿业大学徐海学院信息10-.docx_第1页
第1页 / 共37页
嵌入式系统应用考点总结(中国矿业大学徐海学院信息10-.docx_第2页
第2页 / 共37页


点击查看更多>>
资源描述
中国矿业大学徐海学院 信息10-1 邹柯 22100804 第一章 嵌入式系统概述 嵌入式系统--综合描述 v 是现代科学多学科互相融合的以应用技术产品为核心,以计算机技术为基础,以通信技术为载体,以消费类产品为对象,引入各类传感器,进入Internet网络技术的连接,从而适应应用环境的产品。 v 无多余软件,软件以固化态出现,硬件亦无多余存储器,可靠性高,成本低,体积小,功耗少,包含于各种不同类型的设备。 v 技术密集,投资强度大,高度分散,不断创新的知识密集型系统。反映当代最新技术的先进水平。 嵌入式系统定义 v IEEE(国际电气和电子工程师协会) 给出的定义: 嵌入式系统是用于控制、监视或者辅助装置、机器或者设备运行的装置。 Ø 通常执行特定功能 Ø 以微电脑和外围构成核心 Ø 严格的时序和稳定性要求 此定义是从应用上考虑的,嵌入式系统是软件和硬件的综合体,还可以涵盖机电等附属装置。 v 从技术的角度定义:以应用为中心、以计算机技术为基础、 软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。(国内普遍被认同的定义) v 从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。术语嵌入式反映了这些系统通常是更大系统中的一个完整的部分,称为嵌入的系统。嵌入的系统中可以共存多个嵌入式系统。 广义与狭义的嵌入式系统 v “嵌入式系统”是指操作系统和功能软件集成于计算机硬件系统; v 广义上讲,凡是带有微处理器的专用软硬件系统都可称为嵌入式系统 Ø 如各类单片机和DSP系统。这些系统在完成较为单一的专业功能时具有简洁高效的特点 Ø 但由于他们没有操作系统,管理系统硬件和软件的能力有限,在实现复杂多任务功能时,往往困难重重,甚至无法实现 v 狭义上讲,我们更加强调那些使用嵌入式微处理器构成独立系统,具有操作系统,具有特定功能,用于特定场合的嵌入式系统 国内普遍被认同的定义: • 嵌入式系统是以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 嵌入式系统三要素 q 三要素:嵌入、专用、计算机 q 嵌入式系统的特点:由三要素引出 ·嵌入性:嵌入到对象体系中,有对象环境要求 ·专用性:软、硬件按对象要求裁减 ·计算机:实现对象的智能化功能 嵌入式系统的组成 § 嵌入式系统一般由嵌入式微处理器、外围硬件设计备、嵌入式操作系统及用户应用程序4部分组成。 § 嵌入式系统设计的核心部件是各种类型的嵌入式处理器。 ⑴嵌入式系统的硬件组成 v 硬件层是由嵌入式微处理器、存储器系统、通用设备接口和I/O接口(A/D 、D/A、I/O等)组成。 v 在一片嵌入式微处理器基础上增加电源电路、时钟电路和存储器电路(ROM 和SDRAM等),就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。 嵌入式系统之最小系统 嵌入式微处理器—核心、存储器(ROM、RAM、Flash ROM)、I/O设备、电源模块、复位 嵌入式系统之接口模块 USB模块、LCD模块、键盘模块 ⑵嵌入式系统的软件组成 • 中间层---板级支持包(BSP)(与硬件相关的底层驱动软件) 中间层也称为硬件抽象层(HAL)或板级支持包(BSP),它把系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关。 n BSP具有以下两个特点: n 1)操作系统相关性 n 2)硬件相关性 n 设计一个完整的BSP需要完成两部分工作: n 嵌入式系统的初始化:片级初始化、板级初始化和系统级初始化 n 设计硬件相关的设备驱动。 • 系统软件层---嵌入式操作系统(是嵌入式应用软件的基础和开发平台。嵌入式系统的出现,解决了嵌入式软件开发标准化的难题。通用性强、可靠性强) v 软件层由嵌入式操作系统、文件系统、图形用户接口(GUI)、网络系统及通用组件模块组成。 v 嵌入式操作系统的作用一般只是为了应用程序提供必要运行环境(任务调度),附加任务通讯、内存管理等功能。 v 嵌入式系统和系统的硬件基础关系紧密,一般都需要移植和配置才可以使用。嵌入式操作系统让嵌入式系统的开发利用通用的功能模块,这可以让开发更加高效。 • 应用软件层---应用程序 v 在嵌入式系统中,应用程序的层级远远少于通用计算机。由于控制硬件是嵌入式系统基本的操作,因此嵌入式应用程序依然与系统的硬件基础关系密切。尤其在没有操作系统的情况下,嵌入式的应用程序需要直接访问寄存器或者设备的地址来操作硬件。 v 基于RTOS开发的应用程序组成,用来完成对被控对象的控制功能。功能层是面向被控对象和用户的,为方便用户操作,往往需要提供一个友好的人机界面。 嵌入式系统发展 1、以单芯片为核心的可编程控制器形式的系统。(一般没有操作系统的支持,通过汇编语言直接控制。) 2、以嵌入式CPU为基础,以简单操作系统为核心的嵌入式系统。(有简单操作系统的支持,但通用性较弱。) 3、以嵌入式操作系统为标志的嵌入式系统。(兼容性佳。) 4、以Internet为标志的嵌入式系统。(与Internet相结合。) 第2章 ARM微处理器硬件结构 ⑴什么是ARM ARM既可以认为是一个公司的名字,也可认为是对一类微处理器的通称,还可以认为是一种技术的名字。 ⑵CISC和RISC技术 ①CISC:复杂指令集计算机(Complex Instruction Set Computer) • 具有大量的指令和寻址方式 • 8/2原则:80%的程序只使用20%的指令 • 大多数程序只使用少量的指令就能够运行。 ②RISC:精简指令集计算机(Reduced Instruction Set Computer) • 在通道中只包含最有用的指令 • 确保数据通道快速执行每一条指令 • 使CPU硬件结构设计变得更为简单 RISC体系结构特点: • 指令集中的大多数指令只需要执行简单和基本的功能; • 减少存储器访问指令; • 芯片逻辑采用硬布线逻辑; • 减少指令数和寻址方式 • 指令译码简化。 CISC与RISC的对比 ⑶计算机体系结构分类 ①冯·诺依曼体系结构模型 冯·诺依曼体系结构的特点 1)数据与指令都存储在存储器中 2)被大多数计算机所采用 ARM7——冯·诺依曼体系结构 ②哈佛体系结构 哈佛体系结构的特点 1)程序存储器与数据存储器分开 2)提供了较大的存储器带宽 3)适合于数字信号处理 4)大多数DSP都是哈佛结构 ARM9——哈佛体系结构 ⑷ARM和Thumb指令 ARM体系结构在V4版中增加了16位Thumb指令集。 ARM指令集效率高,但是代码密度低; Thumb指令集具有较高的代码密度,却仍然保持ARM的大多数性能上的优势,它是ARM指令集的子集。 ARM和Thumb状态切换 • 所有的ARM指令都是可以有条件执行的,而Thumb指令仅有一条指令具备条件执行功能。 • ARM程序和Thumb程序可相互调用,相互之间的状态切换开销几乎为零。 进入Thumb状态:当操作数寄存器的状态态位为1 进入ARM状态:当操作数寄存器的状态态位为0 ARM操作面向32位操作数,以字为单位对齐 Thumb操作面向16位操作数,以半字为单位对齐; ⑸流水线技术 流水线(pipeline)是 Intel首次在486芯片中开始使用的。 流水线(Pipeline)技术:几个指令可以并行执行 • 提高了CPU的运行效率 • 内部信息流要求通畅流动 为增加处理器指令流的速度,ARM7 系列使用3级流水线. ⑹ARM存储系统 ARM体系结构可以用两种方法存储字数据,称之为大端格式和小端格式。 • 大端格式(big-endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中 • 小端格式(little-endian):与大端存储格式相反。低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。 ARM 可以用 little/big endian 格式存取数据. 存储器系统的层次结构 第三章 ARM寻址方式与指令系统 3.1 ARM编程模型 3.1.1 处理器模式 处理器7种模式 除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。 快中断、中断、管理、中止、未定义这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。 用户、系统这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。 3.1.2 ARM微处理器的工作状态 第一种:为ARM状态,此时处理器执行32位的字对齐的ARM指令; 第二种:为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。 在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。 ⑴进入Thumb状态 当操作数寄存器的状态位为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef等),则异常处理返回时,自动切换到Thumb状态。 Thumb的特点 ①Thumb是对32位寄存器操作的16位指令集 ②与32位ARM指令集相比代码尺寸更小,更适合嵌入式应用。 ③因为是对32位结构的CPU操作,所以比纯16位的指令集效率更高。 ④与其它32位下的16位指令集相比,它还可以切换到32位ARM指令集并全速执行。 ⑵进入ARM状态 当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。 3.1.3 内部寄存器 在ARM7TDMI处理器内部有37个用户可见的寄存器。 u 31个通用寄存器 u 6个状态寄存器 在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。 ⑴在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令; ⑵其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器; ⑶寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器; 寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。 ⑷寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。 ①寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。 ②R14为链接寄存器(LR),在结构上有两个特殊功能: § 在每种模式下,模式自身的R14版本用于保存子程序返回地址; § 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。 ◇R14(LR)寄存器与子程序调用 操作流程: 1.程序A执行过程中调用程序B; 2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14(LR); 3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A; ◇R14寄存器与异常发生 异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。 ◇R14寄存器注意要点 当发生异常嵌套时,这些异常之间可能会发生冲突。 例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。 1.执行用户模式下的程序; 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏; 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序; 4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断; 5. 硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误; 6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回; ⑸寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存 器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。 ⑹寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。 ARM7TDMI内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含: § 4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V) ); § 2个中断禁止位,分别控制一种类型的中断; § 5个对当前处理器模式进行编码的位; § 1个用于指示当前执行指令(ARM还是Thumb)的位。 如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。 注意:中断返回指令的寄存器列表(其中必须包括PC)后的“^”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复。这里使用的堆栈指针SP(R13)是属于异常模式的寄存器,每个异常模式有自己的堆栈指针。这个堆栈指针应必须在系统启动时初始化。 n 整个地址空间的起始位置(地址从0x00000000开始)有以下指令。 n b SYS_RST_HANDLER ;0x00000000 n b UDF_IND_HANDLER ;0x00000004 n b SWI_SVC_HANDLER ;0x00000008 n b INS_ABT_HANDLER ;0x0000000c n b DAT_ABT_HANDLER ;0x00000010 n b IRQ_SVC_HANDLER ;0x00000018 n b FIQ_SVC_HANDLER ;0x0000001c n 当发生外部中断请求,处理器首先自动保存当前状态(PC→R14_<mode>,CPSR→SPSR _<mode> ),进入外部中断模式 n 执行地址0x00000018处的指令,即 n b IRQ_SVC_HANDLER 转到IRQ_SVC_HANDLER处执行 IRQ_SVC_HANDLER处的代码为: n IRQ_SVC_HANDLER n sub lr,lr,#4 n stmfd sp!,{r0-r3,lr} n ldr r0, =IRQ_SVC_Vector n ldr pc,[r0] 处理器将通用寄存器和返回地址压入堆栈,接着跳转到外部中断请求的中断服务程序中。 IRQ_SVC_Vector为外部中断请求的中断向量。 n 一般来讲, IRQ_SVC_Vector的地址对应于RAM地址空间; n Bootload代码固化于flash中,对其只能读不能写。 n 一般来讲, IRQ_SVC_Vector的地址对应于RAM地址空间; n Bootload代码固化于flash中,只读不写。 n MAP _ISR_STARTADDRESS n SYS_RST_VECTOR # 4 n UDF_INS_VECTOR # 4 n SWI_SVC_VECTOR # 4 n INS_ABT_VECTOR # 4 n DAT_ABT_VECTOR # 4 n RESERVED_VECTOR # 4 n IRQ_SVC_VECTOR # 4 n FIQ_SVC_VECTOR # 4 n ldr r0,IRQ_SVC_VECTOR 中断服务程序入口地址 n ldr r1,=IsrIRQ n str r1,[r0] 外部中断请求比较特殊:多种中断共用同一个入口。 所有中断服务程序均可通过IRQ中断服务程序间接进入IsrIRQ ◇进入异常 在异常发生后,ARM7TDMI内核会作以下工作: 1.在适当的LR中保存下一条指令的地址,当异常入口来自: § ARM状态,那么ARM7TDMI将当前指令地址加4或加8复制(取决于异常的类型)到LR中; § 为Thumb状态,那么ARM7TDMI将当前指令地址加2、4或加8 (取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。 2.将CPSR复制到适当的SPSR中; 3. 将CPSR模式位强制设置为与异常类型相对应的值; 4.强制PC从相关的异常向量处取指。 ARM7TDMI内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。 注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。 异常向量 ◇退出异常 当异常结束时,异常处理程序必须: 1.将SPSR的值复制回CPSR; 2.清零在入口置位的中断禁止标志。 3.将LR( R14 )中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同; 注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。 ※快速中断请求 快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以加速上下文切换的速度)。 不管异常入口是来自ARM状态还是Thumb状态,FIQ处理程序都会通过执行下面的指令从中断返回: SUBS PC,R14_fiq,#4 在一个特权模式中,可以通过置位CPSR中的F位来禁止FIQ异常。 ※中断请求 中断请求(IRQ)异常是一个由nIRQ输入端的低电平所产生的正常中断(在具体的芯片中,nIRQ由片内外设拉低,nIRQ是内核的一个信号,对用户不可见)。IRQ的优先级低于FIQ。对于FIQ序列它是被屏蔽的。任何时候在一个特权模式下,都可通过置位CPSR中的I 位来禁止IRQ。 不管异常入口是来自ARM状态还是Thumb状态,IRQ处理程序都会通过执行下面的指令从中断返回:SUBS PC,R14_irq,#4 ※中止 中止发生在对存储器的访问不能完成时,中止包含两种类型: § 预取中止 发生在指令预取过程中 § 数据中止 发生在对数据访问时 ▽中止——预取指中止 当发生预取中止时,ARM7TDMI内核将预取的指令标记为无效,但在指令到达流水线的执行阶段时才进入异常。如果指令在流水线中因为发生分支而没有被执行,中止将不会发生。 在处理中止的原因之后,不管处于哪种处理器操作状态,处理程序都会执行下面的指令恢复PC和CPSR并重试被中止的指令: SUBS PC,R14_abt,#4 ▽中止——数据中止 在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令,重试被中止的指令:SUBS PC,R14_abt,#8 ※软件中断指令 使用软件中断(SWI)指令可以进入管理模式,通常用于请求一个特定的管理函数。SWI处理程序通过执行下面的指令返回:MOVS PC,R14_svc 这个动作恢复了PC并返回到SWI之后的指令。 ※未定义的指令 当ARM7TDMI处理器遇到一条自己和系统内任何协处理器都无法处理的指令时,ARM7TDMI内核执行未定义指令陷阱。软件可使用这一机制通过模拟未定义的协处理器指令来扩展ARM指令集。 注:ARM7TDMI处理器完全遵循ARM结构v4T,可以捕获所有分类未被定义的指令位格式。 在模拟处理了失败的指令后,陷阱程序执行下面的指令:MOVS PC,R14_svc 这个动作恢复了PC并返回到未定义指令之后的指令。 ※复位 当nRESET信号被拉低时(一般外部复位引脚电平的变化和芯片的其它复位源会改变这个内核信号),ARM7TDMI处理器放弃正在执行的指令。 在复位后,除PC和CPSR之外的所有寄存器的值都不确定。 当nRESET信号再次变为高电平时,ARM处理器执行下列操作: 1.强制CPSR中的M[4:0]变为b10011(管理模式); 2.置位CPSR中的I和F位; 3.清零CPSR中的T位; 4.强制PC从地址0x00开始对下一条指令进行取指; 5.返回到ARM状态并恢复执行 。 异常优先级 当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序: ARM的异常处理 • 进入异常的处理 – 保存PC值到LR – 保存CPSR到SPSR – 强制改变Mode bits – 强制PC值,从中断矢量表中预取下一条指令 • 退出异常的处理 – 恢复PC值从LR – 恢复CPSR从SPSR – 清除中断屏蔽位 3.2.3 ARM处理器寻址方式 n 寻址方式分类 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有9种基本寻址方式。 1.寄存器寻址;2.立即寻址;3.寄存器移位寻址; 4.寄存器间接寻址;5.基址寻址; 6.多寄存器寻址;7.堆栈寻址;8.块拷贝寻址;9.相对寻址。 51寻址:位寻址 直接寻址 n 寄存器寻址 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: SUBS R0,R0,#1 ;R0减1,结果放入R0,并且影响标志位 MOV R0,#0xFF000 ;将立即数0xFF000装入R0寄存器 n 立即寻址 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: SUBS R0,R0,#1 ;R0减1,结果放入R0,并且影响标志位 MOV R0,#0xFF000 ;将立即数0xFF000装入R0寄存器 n 寄存器移位寻址 寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下: MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,即是R0=R2×8 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相“与”操作,结果放入R1 n 寄存器间接寻址 寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下: LDR R1,[R2] ;将R2指向的存储单元的数据读出,保存在R1中 SWP R1,R1,[R2] ;将寄存器R1的值和R2指定的存储单元的内容交换 n 基址寻址 基址寻址就是将基址寄存器的内容与指令中给出的偏移量(<4K)相加/减,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。寄存器间接寻址是偏移量为0的基址加偏移寻址。 基址寻址指令举例如下(前索引寻址): LDR R2,[R3,#0x0C] ;读取R3+0x0C地址上的存储单元的内容,放入R2 STR R1,[R0,#-4]! ;先R0=R0-4,然后把R0的值保存到R1指定的存储单元 基址寻址指令举例如下: LDR R0,[R1] ,#4 ;R0=[R1],R1=R1+4 ;后索引基址寻址 ;ARM这种自动索引机制不消耗额外的时间 LDR R0,[R1,R2] ;R0=[R1+R2] n 多寄存器寻址 多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下: LDMIA R1!,{R2-R7,R12};将R1指向的单元中的数据读出到;R2~R7、R12中(R1自动加4) STMIA R0!,{R2-R7,R12} ;将寄存器R2~R7、R12的值保存到R0指向的存储单元中 ;(R0自动加4) n 堆栈寻址 堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,称为递减堆栈 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 所以可以组合出四种类型的堆栈方式: § 满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等; § 空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等; § 满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等; § 空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。 n 块拷贝寻址 多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。 如: STMIA R0!,{R1-R7} ;将R1~R7的数据保存到存储器中。 ;存储指针R0在保存第一个值之后增加, ;增长方向为向上增长。 STMIB R0!,{R1-R7} ;将R1~R7的数据保存到存储器中。 ;存储指针R0在保存第一个值之前增加, ;增长方向为向上增长。 n 寻址方式分类——相对寻址 相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下: BL SUBR1 ;调用到SUBR1子程序 BEQ LOOP ;条件跳转到LOOP标号处 ... LOOP MOV R6,#1 ... SUBR1 ... 简单的ARM程序 3.3.3 Load/Store指令 • ARM指令集 – 存储器访问指令 – 数据处理指令 – ARM分支指令 – 杂项指令 n 存储器访问指令 ARM处理器是典型的RISC处理器,对存储器的访问只能使用加载和存储指令实现。 RAM存储空间及I/O映射空间统一编址,除对RAM操作以外,对外围IO、程序数据的访问均要通过加载/存储指令进行。 加载(Load):存储器中的数据传送到寄存器; 存储(Store):寄存器中的数据传送到存储器; 存储器访问指令分为单寄存器操作指令、多寄存器操作指令、数据交换指令。 LDR/STR指令用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。若使用LDR指令加载数据到PC寄存器,则实现程序跳转功能,这样也就实现了程序散转。 所有单寄存器加载/存储指令可分为“字和无符号字节加载存储指令”和“半字和有符号字节加载存储指令。 ARM存储器访问指令——单寄存器存储 ⑴LDR和STR——字和无符号字节加载/存储指令 LDR指令用于从内存中读取单一字或字节数据存入寄存器中,STR指令用于将寄存器中的单一字或字节数据保存到内存。指令格式如下: LDR{cond}{T} Rd,<地址> ;将指定地址上的字数据读入Rd STR{cond}{T} Rd,<地址> ;将Rd中的字数据存入指定地址 LDR{cond}B{T} Rd,<地址> ;将指定地址上的字节数据读入Rd STR{cond}B{T} Rd,<地址> ;将Rd中的字节数据存入指定地址 其中,T为可选后缀。若指令有T,那么即使处理器是在特权模式下,存储系统也将访问看成是在用户模式下进行的。T在用户模式下无效,不能与前索引偏移一起使用T。 LDR和STR——字和无符号字节加载/存储指令编码 LDR/STR指令寻址非常灵活,它由两部分组成,其中一部分为一个基址寄存器,可以为任一个通用寄存器;另一部分为一个地址偏移量。地址偏移量有以下3种格式: § 立即数。立即数可以是一个无符号的数值。这个数据可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1,[R0,#0x12] ;R1<-[R0+0x12] § 寄存器。寄存器中的数值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如: LDR R1,[R0,R2] ; R1<-[R0+R2] LDR R1,[R0,-R2] ; R1<-[R0-R2] § 寄存器及移位常数。寄存器移位后的值可以加到基址寄存器,也可以从基址寄存器中减去这个数值。 如:LDR R1,[R0,R2,LSL #2] ;R1<-[R0+R2*4] 从寻址方式的地址计算方法分,加载/存储指令有以下4种格式: § 零偏移。 如:LDR Rd,[Rn] § 前索引偏移。 如:LDR Rd,[Rn,#0x04]! § 程序相对偏移。 如:LDR Rd,labe1 § 后索引偏移。 如:LDR Rd,[Rn],#-0x04 注意:必须保证字数据操作的地址是32位对齐的。 ⑵ LDR和STR——半字和有符号字节加载/存储指令 这类LDR/STR指令可加载有符号半字或字节,可加载/存储无符号半字。偏移量格式、寻址方式与加载/存储字和无符号字节指令相同。 LDR{cond}SB Rd,<地址> ;将指定地址上的有符号字节读入Rd LDR{cond}SH Rd,<地址> ;将指定地址上的有符号半字读入Rd LDR{cond}H Rd,<地址> ;将指定地址上的半字数据读入Rd STR{cond}H Rd,<地址> ;将Rd中的半字数据存入指定地址 注意: 1.有符号位半字/字节加载是指用符号位加载扩展到32位,无符号半字加载是指用零扩展到32位; 2.半字读写的指定地址必须为偶数,否则将产生不可靠的结果; LDR和STR——半字和有符号字节加载/存储指令编码 LDR和STR指令应用示例: 1.加载/存储字和无符号字节指令 LDR R2,[R5] ;将R5指向地址的字数据存入R2 STR R1,[R0,#0x04] ;将R1的数据存储到R0+0x04地址 LDRB R3,[R2],#-1 ;将R2指向地址的字节数据存入R3,R2=R2-1 STRB R0,[R3,-R8 ASR #2] ;R0->[R3-R8/4],存储R0的最低有效字节 2.加载/存储半字和有符号字节指令 LDRSB R1,[R0,R3] ;将R0+R3地址上的字节数据存入R1,高24位用符号扩展 LDRH R6,[R2],#2 ;将R2指向地址的半字数据存入R6,高16位用0扩展 ;读出后,R2=R2+2 STRH R1,[R0,#2]! ;将R1的半字数据保存到R0+2地址, ⑶LDR和STR ----双字:加载/存储两个相邻的寄存器,64位双字。 其句法有4种: Op {cond}D Rd,[Rn] 零偏移 Op {cond}D Rd,[Rn,offset] {!} 前索引偏移 Op {cond}D Rd,label 程序相对偏移 Op {cond}D {T} Rd,[Rn],offset 后索引偏移 其中:Rd 加载/存储寄存器中的一个,另一个是R(d+1)。Rd必须是偶数寄存器,且不是R14。Rn 除非指令为零偏移,或不带写回的前索引,否则,Rn不允许与Rd和R(d+1)相同。label label必须是在当前指令的上下252字节范围内。 例如:LDRD R6,[R11] ;R6←[R11],R7←[R11+4] STRD R4,[R9,#24] ;R4→[R9+24],R5→[R9+28] ARM存储器访问指令——多寄存器存取 多寄存器加载/存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数据。LDM为加载多个寄存器;STM为存储多个寄存器。允许一条指令传送16个寄存器的任何子集或所有寄存器。它们主要用于现场保护、数据复制、常数传递等。 多寄存器加载/存储指令格式如下: LDM{cond}<模式> Rn{!},reglist{^} STM{cond}<模式> Rn{!},reglist{^} § cond:指令执行的条件; § 模式:控制地址的增长方式,一共有8种模式; § !:表示在操作结束后,将最后的地址写回Rn中; § reglist :表示寄存器列表,可以包含多个寄存器,它们使用“,”隔开,如{R1,R2,R6-R9},寄存器由小到大排列; § ^:可选后缀。允许在用户模式或系统模式下使用。它有以下两个功能: 1)若op是LDM且寄存器列表包含R15时,那么除了正常的多寄存器传送外,还将SPSR也复制到CPSR中。这用于异常处理返回,仅在异常模式下使用。 2)数据传入或传出的是用户模式下的寄存器,而不是当前模式的寄存器。 LDM和STM——多寄存器加载/存储指令编码 多寄存器加载/存储指令的8种模式如下表所示,右边四种为堆栈操作、左边四种为数据传送操作。 进行数据复制时,先设置好源数据指针和目标指针,然后使用块拷贝寻址指令LDMIA/STMIA、LDMIB/STMIB、LD
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 环境建筑 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服