3--ARM嵌入式系统原理及应用教程.ppt_第1页
3--ARM嵌入式系统原理及应用教程.ppt_第2页
3--ARM嵌入式系统原理及应用教程.ppt_第3页
3--ARM嵌入式系统原理及应用教程.ppt_第4页
3--ARM嵌入式系统原理及应用教程.ppt_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

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

文档简介

1、主要内容:第1章嵌入式系统概述,第2章ARM微处理器概述及编程模型,第3章ARM9指令系统,第4章嵌入式程序设计基础,第5章嵌入式内部可编程模块,第6章嵌入式接口技术应用,第7章软件开发环境,第3章ARM9指令系统,ARM处理器寻址方式,Thumb指令集,3.1 ARM处理器寻址方式,是处理器根据指令中给出的地址信息查找物理地址的方式。目前,ARM指令系统支持八种寻址模式。寄存器寻址立即寻址寄存器间接寻址索引寻址寄存器移位寻址多寄存器寻址堆栈寻址相对寻址,3.1.1寄存器寻址,寄存器寻址使用寄存器的内容作为操作数,寄存器本身是操作数地址。这种寻址方式经常被各种微处理器采用,也是一种高效的寻址方

2、式。例如:说明:MOVR2,R3;R2R3 R3中的内容被分配给R2ADR2、R3和R4;将R2R3R4 R3和R4中的内容相加,结果提供给R2、MOV R2、R3、0xa、3.1.2进行立即寻址,也称为立即数字寻址。这是一种特殊的寻址模式,在这种模式下,操作数不存储在寄存器或存储器中,而是包含在指令的操作码中,只要提取了指令,就可以获得操作数。该操作数称为立即数,相应的寻址模式也称为立即寻址。例如指令:MOVR0,# 0 xFF000将立即数0 xFF000载入r 0寄存器ADD R1,R1,x7fR1R10 x7f在上述两个指令中,第二个源操作数是立即数,它需要前缀 。对于以十六进制表示的

3、直接数,还需要在后添加 0 x 。MOV R0,#0 xFF00,0 xFF00,从代码中获取数据,3.1.3寄存器间接寻址,寄存器间接寻址是把寄存器的内容作为操作数的地址,而操作数本身则存储在存储器中。例如,说明:LDRR1,R2;R1R2 STRR1,R2;R2R1的第一条指令将R2的内容作为地址,并将该地址中的数据传输到R1。第二条指令将R1的内容转移到以R2的内容为地址的存储器中。ldr1、R2、0xaa、3.1.4索引寻址,即将寄存器(通常称为基本寄存器)的内容与指令中给出的地址偏移量相加,从而获得操作数的有效地址。索引寻址通常用于访问基地址附近的地址单元。例如,说明:ldr0,R1

4、,8;R0R18 LDR R0,R1,8!R0R18,R1R18 LDR R0,R1,2;R0R1,R1R12 LDR R0,R1,R2;R0r1r2,ldr0,R1,#0x08,0xaa,以R1 0 x08为地址加载数据,3.1.5寄存器移位寻址,这是ARM指令集的唯一寻址模式,操作数通过相应地移位寄存器的值获得;移位的方式在指令中以助记符的形式给出,移位的位数可以用立即数或寄存器寻址来表示。桶形移位器嵌入在ARM微处理器中,移位操作在ARM指令集中不作为单个指令使用,只能作为指令格式中的一个字段使用,在汇编语言中表示为指令中的一个选项。例如,当数据处理指令的第二个操作数是寄存器时,可以添加

5、移位操作选项来对其执行各种移位操作。轮班操作包括以下六种类型。3.1.5寄存器移位寻址,LSL(或美国手语)操作格式:通用寄存器,LSL(或美国手语)操作数LSL(或美国手语)可以对通用寄存器的内容进行逻辑(或算术)左移操作,根据操作数指定的数字左移,低位补零,最后一位左移。操作数可以是通用寄存器或立即数(031)。3.1.5寄存器移位寻址,操作示例:movr0,R1,lsl # 2;将R1的内容向左移动4位,然后将其传输到R0。其中最后移位的位被分配给程序状态寄存器的c位CPSR29。LSR操作的格式是:通用注册。LSR操作数LSR可以将通用寄存器的内容向右移动操作数指定的数字。左端用零填充

6、,最后一个向右移位的位放在状态寄存器的C位CPSR29中,如图3-2所示。操作数可以是通用寄存器或立即数(031)。3.1.5寄存器移位寻址,操作示例:movr0,R1,LSR # 4;R1的内容向右移动4位,然后传输到R0。其中最后移位的位被分配给程序状态寄存器的c位CPSR29。3.1.5寄存器移位寻址,3.1.5寄存器移位寻址,ROR操作格式:通用寄存器,ROR操作数ROR可以根据操作数指定的数字完成将通用寄存器的内容向右循环移位的操作,右端移出的位填充左侧的空位,移出的最后一位也放在状态寄存器的C位CPSR29中,如图3-3所示。操作数可以是通用寄存器或立即数(031)。操作示例:mo

7、vr0,R1,错误# 4;将R1的内容向右循环移位4位,然后将它们传输到R0。其中最后移位的位被分配给程序状态寄存器的c位CPSR29。3.1.5寄存器移位寻址,ASR操作格式为:通用寄存器,ASR操作数ASR可以完成通用寄存器内容的右移位操作,根据操作数指定的数字向右移位,最左边的位保持不变,最后向右移位的位放在状态寄存器的C位CPSR29中,如图3-4所示。操作数可以是通用寄存器或立即数(031)。当用于有符号数据时,这种移位可以保持符号位不变。3.1.5寄存器移位寻址,3.1.5寄存器移位寻址,操作示例:movr0,R1,ASR # 4;R1的内容向右移动4位,然后传输到R0,符号位保持

8、不变。最后移位的位也被发送到状态位C.RRX运算RRX运算的格式是通用寄存器,RRX操作数RRX可以通过扩展完成通用寄存器内容向右循环移位的操作,根据操作数指定的数字向右循环移位,左边的空位置由状态寄存器c位填充,右边移位的位置进入状态位c,如图3-5所示。操作数可以是通用寄存器或立即数(031)。3.1.5寄存器移位寻址,操作示例:movr0,R1,rrx # 2;R1的内容通过扩展被循环地向右移位两位,然后被传输到R0。3.1.5寄存器移位寻址,使用多寄存器寻址模式,一条指令可以完成多个寄存器值的传输。这种寻址方法可以一次寻址多个寄存器,这些寄存器从小到大排列,最多可以传输16个寄存器。例

9、子:R1!R2-R4,R5;R2R1R3R14R4R18R5R112该指令的后缀IA表示在每次加载/存储操作后,R1增加了字长,因此该指令可以将连续存储位置的值转移到R2R5。3.1.6多寄存器寻址,使用多寄存器寻址指令时,寄存器子集的顺序是从小到大排列的,连续的寄存器可以用“”连接;否则,用“,”分开书写。R1!R2-R4,R5,0x40000010,3.1.7堆栈寻址,堆栈是一种数据结构,在先进先出(FILO)模式下工作,使用一个称为堆栈指针的特殊寄存器来指示当前操作位置,堆栈指针始终指向堆栈顶部。当堆栈指针指向最后推入堆栈的数据时,它被称为完整堆栈。当堆栈指针指向下一个将放置数据的空位置

10、时,它被称为空堆栈。同时,根据生成模式,栈可以分为升序栈和降序栈。当堆栈从低位地址到高位地址生成时,它们被称为升序堆栈,当堆栈从高位地址到低位地址生成时,它们被称为降序堆栈。0 x12345678、3.1.7堆栈寻址。ARM微处理器支持这四种类型的堆栈工作模式,即:全升序模式:堆栈指针指向堆栈上的最后一个数据位置,从低位地址到高位地址生成。全减量模式:堆栈指针指向最后一个堆栈数据位置,从高地址到低地址生成。空升序模式:堆栈指针指向下一个堆栈数据的空位置,并从低地址到高地址生成。空下降模式:堆栈指针指向下一个堆栈数据的空位置,从高地址到低地址生成。3.1.8相对寻址类似于基址索引,以程序计数器P

11、C的当前值为基址,以指令中的地址标签为偏移量,相加得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用相对寻址方式:跳转到下一个子程序,执行下一个动作。从子程序3.2 ARM指令集返回,ARM微处理器的指令集为加载/存储类型,即指令集只能处理寄存器中的数据,处理结果仍需放回寄存器,而对系统内存的访问需要通过特殊的加载/存储指令来完成。ARM9指令集包括ARM指令集和Thumb指令集。首先介绍了ARM指令的基本格式和灵活操作数,然后介绍了条件码,然后对ARM指令集和Thumb指令集进行了类解释。ARM指令的基本格式如下:s,其中数字内的项目是必需的,数字内的项目是可选的。每个

12、项目的描述如下:操作码:指令助记符;条件:执行条件;s:是否影响CPSR登记册的价值;Rd:目标寄存器。Rn:第一个操作数的寄存器;Op2:第二个操作数;3.2.1指令格式,ARM指令的基本格式如下:3.2指令集介绍,ARM指令集的第二个操作数,灵活使用第二个操作数“op2”可以提高代码效率。它有以下形式:#immed_8r常量表达式;Rm寄存器模式。Rm,移位寄存器移位模式;S,3.2指令集介绍,ARM指令集的第二个操作数,#immed_8r常量表达式该常量必须对应于一个8位位图,也就是说,它必须是一个8位常量,可以通过将偶数循环移位到右边来获得。向右循环移位10位,移位前8位常量0 x12

13、,移位后常量0x04800000,3.2指令集介绍,ARM指令集的第二个操作数,#immed_8r常量表达式此常量必须对应8位位图,也就是说,它必须是一个8位常量,可以通过向右循环移位偶数获得。例如:movr0,# 1和R2 R1,#0x0f movr1,#0xc000通过将0 x03向右循环移位16位,可以获得0x 000。2.请列出8个位图中的2个直接数字。思考和实践?1。以下8位立即数字合法吗?0x0103c0000x12800000,0x 400003 b(0x ed周期向右移动2位)0 x0016C000(0 x5B周期向右移动18位),3.2指令集介绍,ARm指令集的第二个操作数,

14、Rm寄存器模式在寄存器模式中,操作数是寄存器的值。例如,SUBR1、R1、R2 MOVPC、R0、3.2.2条件代码。当处理器工作在ARM状态时,几乎所有的指令都根据CPSR条件码的状态和指令的条件域有条件地执行。当满足指令的执行条件时,执行该指令,否则忽略该指令。每个ARM指令包含4位条件码,位于指令的最高4位31336028。条件码有16种,每种都可以用两个字符来表示。这两个字符可以添加到指令助记符的后面,并与指令同时使用。例如,跳转指令B可以用后缀EQ更改为BEQ,这意味着“如果它相等就跳转”,也就是说,当CPSR的Z标志被设置时,跳转发生。在16个条件标志代码中,只能使用15个。3.2

15、.2条件代码,c代码:如果(a b)a;否则b。相应的装配代码:CMPR0,R1;将R0与R1 ADDIH R0、R0、#1进行比较;如果R0R1,R0=R0 1,R1 R1地址,# 1;如果R0R1,R1=R1 1,例如:3.2.2条件码,3.2.3 ARM内存访问指令,ARM微处理器内部没有内存,ARM除寄存器外没有其他内存单元(即R0R 15);在以ARM为核心的嵌入式系统中,所有外围模块都是ARM微处理器的不同地址单元,就像存储单元一样。不考虑这些模块的功能(如输入/输出、定时器、存储器等)。)和这些模块的位置(如片上或片外),ARM微处理器将它们视为外部存储器。它的操作过程与内存的操

16、作过程相同。3.2.3 ARM内存访问指令。因此,在ARM微处理器的数据传输中,只有两种数据源和数据目标:一种是ARM寄存器R0R15;另一个是外部存储器(它们可以是外围模块的寄存器、外部数据存储器或可访问程序存储器等)。)。我们把从内存到寄存器的数据传输称为加载,把从寄存器到内存的数据传输称为存储。3.2.3 ARM内存访问指令,3.2.3 ARM内存访问指令,加载/存储指令可分为三类:单数据加载/存储指令,批量数据加载/存储指令,数据交换指令,3.2.3 ARM内存访问指令,1单数据加载/存储指令(1)LDR指令格式:LDR条件目标寄存器,LDR指令,3.2.3 ARM内存访问指令,指令示例:LDR R3,R4;具有存储器地址R4的字数据被读入寄存器R3。LDR R3、R1、R2;具有存储器地址R1R2的字数据被读入寄存器R3。LDR R3,R1,8;具有存储器地址R1 8的字数据被读入寄存器R3。LDR R3,R1,R2!存储器地址为R1R2的字数据被读入寄存器R3,新地址R1 R2被写入R1。LDR R3,R1,8!具有存储器地址R1 8的字数据被读入寄存器R3,并且新地址R

温馨提示

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

评论

0/150

提交评论