第二章 嵌入式处理器(下)_第1页
第二章 嵌入式处理器(下)_第2页
第二章 嵌入式处理器(下)_第3页
第二章 嵌入式处理器(下)_第4页
第二章 嵌入式处理器(下)_第5页
已阅读5页,还剩162页未读 继续免费阅读

下载本文档

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

文档简介

1、 流水线技术流水线技术是现代微处理器普遍采用的是现代微处理器普遍采用的 一种技术,它可以使得几条指令并行执行,一种技术,它可以使得几条指令并行执行, 因此可以大大提高处理器的运行效率。因此可以大大提高处理器的运行效率。 从程序存储器中读取从程序存储器中读取 指令,放入流水线中指令,放入流水线中 操作码和操作数被译码,决定执操作码和操作数被译码,决定执 行什么功能,为下一个时钟周期行什么功能,为下一个时钟周期 准备数据路径所需要的控制信号准备数据路径所需要的控制信号 执行已译码的指令执行已译码的指令 取取 指指 译译 码码 执执 行行 ARM7ARM7的的3 3级流水线:级流水线: 流水线能够正

2、常工作的条件是在任意时刻,每一级所流水线能够正常工作的条件是在任意时刻,每一级所 使用的硬件必须能够独立操作,不能多级同时占用同一使用的硬件必须能够独立操作,不能多级同时占用同一 硬件资源。硬件资源。 在正常情况下,每条指令都被划分成这样在正常情况下,每条指令都被划分成这样3个时钟周期个时钟周期 来完成,即指令执行时间(来完成,即指令执行时间(Latency)是)是3周期。周期。 流水线的执行使得程序计数器流水线的执行使得程序计数器PC必须在当前指令取指必须在当前指令取指 前计数。对于前计数。对于ARM处理器的处理器的3级流水线,以当前级流水线,以当前PC取指取指 后,后,PC值会增加为值会增

3、加为PC4。 图图2-5 ARM2-5 ARM单周期指令的多级流水线操作单周期指令的多级流水线操作 图图2-6 ARM2-6 ARM多周期指令的多级流水线操作多周期指令的多级流水线操作 图图2-7 ARM2-7 ARM分支指令的流水线操作分支指令的流水线操作 ARM处理器支持以下数据类型:处理器支持以下数据类型: u Byte字节,字节,8位;位; u Halfword半字,半字,16位(半字必须与位(半字必须与 2字节边界对准);字节边界对准); u Word字,字,32位(字必须与位(字必须与4字字 节边界对准)。节边界对准)。 图图2-8 ARM2-8 ARM数据类型存储图数据类型存储图

4、 ARM体系结构支持体系结构支持7种处理器模式种处理器模式 : ARM处理器具有特殊的两种工作状态:处理器具有特殊的两种工作状态: u ARM状态状态:32位,执行字对准的位,执行字对准的ARM指令;指令; u Thumb状态状态:16位,执行半字对准的位,执行半字对准的Thumb指令。指令。 ARM处理器的操作状态可以通过处理器的操作状态可以通过BX指令指令(分支和交换分支和交换 指令)在指令)在ARM状态和状态和Thumb状态之间切换。状态之间切换。 例:例: 从从ARM状态切换到状态切换到Thumb状态:状态: LDR R0,=Label+1 BX R0 从从Thumb状态切换到状态切换

5、到ARM状态:状态: LDR R0,=Label BX R0 ARM处理器共有处理器共有37个寄存器:个寄存器: u 31个个通用寄存器通用寄存器:32位,含程序计数器位,含程序计数器PC; u 6个个状态寄存器状态寄存器:32位,只使用了其中的位,只使用了其中的12位。位。 当编写用户程序时,当编写用户程序时,37个寄存器中仅有个寄存器中仅有15个通用寄存个通用寄存 器器r0r14、程序计数器、程序计数器PC(r15)和当前程序状态寄存)和当前程序状态寄存 器器CPSR需要考虑。其余寄存器仅用于系统级编程和异常需要考虑。其余寄存器仅用于系统级编程和异常 处理(如中断)。处理(如中断)。 A

6、A R R M M 状状 态态 下下 寄寄 存存 器器 组组 织织 不分组意味着在所有处理器模式下,不分组意味着在所有处理器模式下,r0r7 都可被同样访问,没有体系结构所隐含的特殊都可被同样访问,没有体系结构所隐含的特殊 用途。用途。 分组意味着分组意味着r8r14的访问与当前处理器的模式的访问与当前处理器的模式 相关。相关。 如果要访问如果要访问r8r14,而不依赖于当前处理器的,而不依赖于当前处理器的 模式,就必须使用规定的寄存器名称。模式,就必须使用规定的寄存器名称。 名称的形式为:名称的形式为: r8_r14_ r8r12各有两组物理寄存器:一组为各有两组物理寄存器:一组为FIQ 模

7、式,另一组为模式,另一组为FIQ以外以外的模式。的模式。 寄存器寄存器r8r12没有指定特殊用途,而使用没有指定特殊用途,而使用 r8_fiqr12_fiq则允许快速中断。则允许快速中断。 寄存器寄存器r13和和r14的用途比较特殊:的用途比较特殊: u r13通常用作堆栈指针通常用作堆栈指针SP,被初始化成指向异常,被初始化成指向异常 模式分配的堆栈。模式分配的堆栈。 u r14通常用作子程序链接寄存器通常用作子程序链接寄存器LR。 处理异常时,在程序入口处将处理异常时,在程序入口处将 异常处理程序用到的其它寄存异常处理程序用到的其它寄存 器的值压入堆栈,返回时重新器的值压入堆栈,返回时重新

8、 将这些值加载到寄存器中。将这些值加载到寄存器中。 当执行分支指令当执行分支指令BL时,时,r15的的 内容拷贝到内容拷贝到r14中,从而成为中,从而成为 子程序调用后的返回地址子程序调用后的返回地址 寄存器寄存器r15通常被用作程序计数器通常被用作程序计数器PC。 在在ARM状态下,状态下,PC的值保存在位的值保存在位31:2, 而位而位1:0为为0;在;在Thumb状态下,状态下,PC的值保的值保 存在位存在位31:1,而位,而位0为为0。 CPSR和和SPSR具有相同的格式具有相同的格式 标志位标志位含含 义义 N当用两个补码表示的带符号数进行运算时,当用两个补码表示的带符号数进行运算时

9、,N=1 表示运算的结果为负数;表示运算的结果为负数; N=0 表示运算的结果为正数或零;表示运算的结果为正数或零; ZZ=1 表示运算的结果为零;表示运算的结果为零;Z=0表示运算的结果为非零;表示运算的结果为非零; C可以有可以有4种方法设置种方法设置C的值:的值: 加法运算(包括比较指令加法运算(包括比较指令CMNCMN):当运算结果产生了进位时(无符号数):当运算结果产生了进位时(无符号数 溢出),溢出),C=1C=1,否则,否则C=0C=0。 减法运算(包括比较指令减法运算(包括比较指令CMPCMP):当运算时产生了借位(无符号数溢):当运算时产生了借位(无符号数溢 出),出),C=

10、0C=0,否则,否则C=1C=1。 对于包含移位操作的非加对于包含移位操作的非加/ /减运算指令,减运算指令,C C为移出值的最后一位。为移出值的最后一位。 对于其他的非加对于其他的非加/ /减运算指令,减运算指令,C C的值通常不改变。的值通常不改变。 V可以有可以有2种方法设置种方法设置V的值:的值: 对于加对于加/ /减法运算指令,当操作数和运算结果为二进制的补码表示的带减法运算指令,当操作数和运算结果为二进制的补码表示的带 符号数时,符号数时,V=1V=1表示符号位溢出。表示符号位溢出。 对于其他的非加对于其他的非加/ /减运算指令,减运算指令,V V的值通常不改变。的值通常不改变。

11、Q在在ARM v5及以上版本的及以上版本的E系列处理器中,用系列处理器中,用Q标志位指示增强的标志位指示增强的DSP运算运算 指令是否发生了溢出。在其他版本的处理器中,指令是否发生了溢出。在其他版本的处理器中,Q标志位无定义。标志位无定义。 ThumbThumb 状状 态态 下下 寄寄 存存 器器 组组 织织 ThumbThumb状态状态 寄存器到寄存器到 ARMARM寄存器寄存器 的映射的映射 异常(异常(exception)是指由内部或外部源产生从而使)是指由内部或外部源产生从而使 处理器需要处理的一个事件。处理器需要处理的一个事件。 u 例如,外部中断或试图实行未定义的指令都例如,外部中

12、断或试图实行未定义的指令都 会引起异常的发生。会引起异常的发生。 处理异常之前,处理器必须保存当前的状态,以便在处理异常之前,处理器必须保存当前的状态,以便在 异常处理完成后,能够使原来的出现重新执行。异常处理完成后,能够使原来的出现重新执行。 ARM支持支持7种类型的异常。对于每种异常,处理器将种类型的异常。对于每种异常,处理器将 强制从异常对应的某个固定地址开始执行程序。这些固强制从异常对应的某个固定地址开始执行程序。这些固 定地址称为定地址称为异常向量异常向量。 多个异常可能会同时发生,因此在多个异常可能会同时发生,因此在ARM中就通过给各中就通过给各 个异常赋予不同的优先级来确定处理异

13、常的顺序。个异常赋予不同的优先级来确定处理异常的顺序。 优先级按照从高到低的顺序排列如下:优先级按照从高到低的顺序排列如下: u复位复位 u数据异常中止数据异常中止 uFIQ uIRQ u预取指异常中止预取指异常中止 uSWI、未定义指令(这两种异常的指令编码互、未定义指令(这两种异常的指令编码互 斥,不可能同时发生)斥,不可能同时发生) u在相应的链接寄存器在相应的链接寄存器LR (r14)中保存下一条中保存下一条 指令的地址指令的地址 u将将CPSR复制到相应的复制到相应的SPSR中中 u强制使强制使CPSR模式位置成对应异常类型的值模式位置成对应异常类型的值 u强制使程序计数器指向相应异

14、常向量,取下强制使程序计数器指向相应异常向量,取下 一条指令一条指令 例子例子: : 用户模式到用户模式到 FIQFIQ模式模式* * spsr_fiq cpsr r7 r4 r5 r2 r1 r0 r3 r6 r15 (pc) r14_fiq r13_fiq r12_fiq r10_fiq r11_fiq r9_fiq r8_fiq r14 (lr) r13 (sp) r12 r10 r11 r9 r8 用户模式用户模式 CPSR CPSR 复制到复制到 FIQ FIQ 模式模式 SPSRSPSR cpsr r15 (pc) r14 (lr) r13 (sp) r12 r10 r11 r9

15、r8 r7 r4 r5 r2 r1 r0 r3 r6 r14_fiq r13_fiq r12_fiq r10_fiq r11_fiq r9_fiq r8_fiq 返回一个从用户模式计算的地址,返回一个从用户模式计算的地址, PCPC值存储在值存储在FIQFIQ模式模式 Registers in use Registers in use 异常异常 用户模式用户模式 FIQ FIQ 模式模式 spsr_fiq 与单片机等简单系统相比,现在一些复杂的嵌入式系统与单片机等简单系统相比,现在一些复杂的嵌入式系统 中,存储系统的功能更加强大,可能包含有多种现代计算中,存储系统的功能更加强大,可能包含有多种

16、现代计算 机存储技术,如机存储技术,如Cache和和Write Buffer、MMU、存储保、存储保 护机制、快速上下文切换等。护机制、快速上下文切换等。 基于基于ARM内核的嵌入式系统可能包含内核的嵌入式系统可能包含Flash、ROM、 SRAM、SDRAM等多种类型的存储器,不同类型的存储等多种类型的存储器,不同类型的存储 器存取速度和数据宽度等都不尽相同。器存取速度和数据宽度等都不尽相同。 存储系统的设计可以是多种多样的,但是应当遵循一定存储系统的设计可以是多种多样的,但是应当遵循一定 的规则,否则可能会引起一些不必要的麻烦。的规则,否则可能会引起一些不必要的麻烦。 例如例如: u 可能

17、使存储系统的实现比较困难;可能使存储系统的实现比较困难; u 可能导致向其它可能导致向其它ARM处理器的移植出现麻烦;处理器的移植出现麻烦; u 可能引起一些标准软件(如编译器)的不适应。可能引起一些标准软件(如编译器)的不适应。 基于系统设计和编程的考虑,关于基于系统设计和编程的考虑,关于ARM存储系统一般只存储系统一般只 需涉及需涉及地址空间地址空间、存储器格式存储器格式、存储器访问对准存储器访问对准以及以及存储存储 器映射器映射I/O等方面的问题。等方面的问题。 ARM体系结构使用体系结构使用232个个8位字节位字节的单一、线性地址空间,的单一、线性地址空间, 字节地址的范围为字节地址的

18、范围为02321; 也可以将地址空间看作由也可以将地址空间看作由230个个32位的字位的字组成,字地址组成,字地址 可被可被4整除,且按字对准,例如以整除,且按字对准,例如以A为字对准地址的字地为字对准地址的字地 址由址由A、A1、A2、A3共共4个字节组成;个字节组成; 在在ARM体系结构体系结构v4以上版本中,也可以将地址空间看以上版本中,也可以将地址空间看 作由作由231个个16位的半字位的半字组成,半字地址可被组成,半字地址可被2整除,且按整除,且按 半字对准,例如以半字对准,例如以A为字对准地址的半字地址由为字对准地址的半字地址由A、A1 共共2个字节组成。个字节组成。 存储器格式是

19、指字、半字、字节在存储器中存放的方式,存储器格式是指字、半字、字节在存储器中存放的方式, 也反映了存储器中字、半字、字节之间的映射关系。也反映了存储器中字、半字、字节之间的映射关系。 存储器格式包括小端和大端两种格式。存储器格式包括小端和大端两种格式。 大、小端存储格式对程序的影响大、小端存储格式对程序的影响 对于对于非对准的取指非对准的取指,在,在ARM工作状态下,未对准的地址工作状态下,未对准的地址 写入写入R15后,结果将不可预知或忽略地址位后,结果将不可预知或忽略地址位1:0;在;在 Thumb状态下,未对准的地址写入状态下,未对准的地址写入R15后,则通常忽略后,则通常忽略 地址位地

20、址位0。 对于对于非对准的数据访问非对准的数据访问,则体系结构可能定义成以下行,则体系结构可能定义成以下行 为之一:为之一: u 不可预知;不可预知; u 忽略使访问非对准的低地址位;忽略使访问非对准的低地址位; u 忽略使访问非对准的低地址位,但使用这些位控制忽略使访问非对准的低地址位,但使用这些位控制 加载数据的循环移位(适用于加载数据的循环移位(适用于LDR和和SWP指令)。指令)。 ARM系统实现系统实现I/O功能的标准方法是使用存储器映射功能的标准方法是使用存储器映射 I/O。 这种方法使用特定的存储器地址,对这些地址加载和存这种方法使用特定的存储器地址,对这些地址加载和存 储,即可

21、完成储,即可完成I/O操作。操作。 通常,对存储器映射通常,对存储器映射I/O地址加载对应输入,对对存储地址加载对应输入,对对存储 器映射器映射I/O地址存储对应输出。地址存储对应输出。 另外,加载和存储也可执行控制功能,替代或附加到正另外,加载和存储也可执行控制功能,替代或附加到正 常的常的I/O操作上。操作上。 指令地址码给出寄存器的编号,寄存器中的内容为操作指令地址码给出寄存器的编号,寄存器中的内容为操作 数。数。 例如例如: ADD R0,R1,R2;R0R1+R2 写操作数的顺序为:第一个寄存器写操作数的顺序为:第一个寄存器R0为为结果寄存器结果寄存器, 第二个寄存器第二个寄存器R1

22、为为第一操作数寄存器第一操作数寄存器,第三个寄存器,第三个寄存器 R2为为第二操作数寄存器第二操作数寄存器。 注意注意 指令操作码后的地址码是立即数,即操作数本身。指令操作码后的地址码是立即数,即操作数本身。 例如例如: ADD R3,R3,#1;R3R3+1 AND R8,R7,#R8R77:0 立即数的表示以立即数的表示以“#”为前缀,十六进制的立即数在为前缀,十六进制的立即数在 “#”后面加后面加“R3R2+8R1 可采取的移位操作包括:可采取的移位操作包括: l LSL:逻辑左移(:逻辑左移(Logical Shift Left)。寄存器中字的低端)。寄存器中字的低端 空出的位补空出的

23、位补0。 l LSR:逻辑右移(:逻辑右移(Logical Shift Right)。寄存器中字的高)。寄存器中字的高 端空出的位补端空出的位补0。 l ASR:算术右移(:算术右移(Arithmetic Shift Right)。算术移位的对)。算术移位的对 象是带符号数。在移位过程中必须保持操作数的符号不变。若源象是带符号数。在移位过程中必须保持操作数的符号不变。若源 操作数为正数,则字的高端空出的位补操作数为正数,则字的高端空出的位补0;若源操作数为负数,;若源操作数为负数, 则字的高端空出的位补则字的高端空出的位补1。 l ROR:循环右移(:循环右移(ROtate Right)。从字

24、的最低端移出的位)。从字的最低端移出的位 填入字的高端空出的位。填入字的高端空出的位。 l RRX:扩展为:扩展为1的循环右移(的循环右移(Rotate Right eXtended by 1 place)。操作数右移)。操作数右移1位,空位(位位,空位(位31)用原)用原C标志填充。标志填充。 移移 位位 操操 作作 过过 程程 指令地址码给出寄存器的编号,寄存器为地址指针,存指令地址码给出寄存器的编号,寄存器为地址指针,存 放操作数的有效地址。放操作数的有效地址。 例如例如: LDR R0,R1;R0R1 STRR0,R1;R0R1 基址寻址基址寻址是将基址寄存器的内容与指令中给出的位移量

25、是将基址寄存器的内容与指令中给出的位移量 相加,形成操作数有效地址。相加,形成操作数有效地址。 基址寻址用于访问基址附近的存储单元。基址寻址用于访问基址附近的存储单元。 包括包括基址加偏移量寻址基址加偏移量寻址和和基址加索引寻址基址加索引寻址,可以将寄存,可以将寄存 器间接寻址看作是位移量为器间接寻址看作是位移量为0的基址加偏移量寻址。的基址加偏移量寻址。 基址加偏移量寻址基址加偏移量寻址中的偏移量最大为中的偏移量最大为4KB, 可分为可分为前索引寻址前索引寻址和和后索引寻址后索引寻址。 前索引寻址举例:前索引寻址举例: LDRR0,R1,#4;R0R1+4 例:例: LDRR0,R1,#4!

26、;R0R1 ;R1R1+4 后索引寻址举例:后索引寻址举例: LDR R0,R1,#4;R0R1 ;R1R1+4 这种改变基址寄存器指向下一个传送的地址对数据块传这种改变基址寄存器指向下一个传送的地址对数据块传 送很有用,还可以采用带自动索引的前索引寻址实现。送很有用,还可以采用带自动索引的前索引寻址实现。 注意注意 基址加索引寻址基址加索引寻址是指令指定一个基址寄存器,是指令指定一个基址寄存器, 再指定另一个寄存器(称为索引),其值作为再指定另一个寄存器(称为索引),其值作为 位移加到基址上形成存储器地址。位移加到基址上形成存储器地址。 例:例: LDR R0,R1,R2;R0R1+R2 多

27、寄存器寻址多寄存器寻址是指一次可以传动多个寄存器的值,允许是指一次可以传动多个寄存器的值,允许 一条指令可以传送一条指令可以传送16个个寄存器的任何子集,包括寄存器的任何子集,包括16个寄个寄 存器。存器。 例:例: LDMIAR1,R0,R2,R5;R0R1 ;R2R1+4 ;R5R1+8 由于传送的数据总是由于传送的数据总是32位的字,因此基址寄存器位的字,因此基址寄存器R1应应 当字对准。当字对准。 注意注意 堆栈是一种按照特定顺序进行存取的存储区。这种特定的堆栈是一种按照特定顺序进行存取的存储区。这种特定的 顺序是指顺序是指“后进先出后进先出”(LIFO)或)或“先进后出先进后出”(F

28、ILO)。)。 使用堆栈时需要使用一个专门的寄存器作为使用堆栈时需要使用一个专门的寄存器作为堆栈指针堆栈指针,栈,栈 指针所指定的存储单元就是堆栈的指针所指定的存储单元就是堆栈的栈顶栈顶。 如果堆栈指针指向最后压入堆栈的有效数据项,就称为如果堆栈指针指向最后压入堆栈的有效数据项,就称为满满 堆栈堆栈(full stack);如果堆栈指针指向下一个数据项放入);如果堆栈指针指向下一个数据项放入 的空位置,就称为的空位置,就称为空堆栈空堆栈(empty stack)。)。 另外,根据堆栈存储区地址增长的方向,可将堆栈分为另外,根据堆栈存储区地址增长的方向,可将堆栈分为递递 增堆栈增堆栈(ascen

29、ding stack)和)和递减堆栈递减堆栈(descending stack)。)。 以上表示递增、递减、满、空的堆栈的各种组合就产生了以上表示递增、递减、满、空的堆栈的各种组合就产生了 4种堆栈类型。种堆栈类型。 ARM支持所有这支持所有这4种类型的堆栈,即种类型的堆栈,即满递增满递增、空递增空递增、满满 递减递减、空递减空递减。 ARM指令使用指令使用push向堆栈写数据,称为向堆栈写数据,称为进栈进栈;使用;使用pop 从堆栈读数据,称为从堆栈读数据,称为出栈出栈。 堆栈指针指向最后堆栈指针指向最后 压入的数据且由低压入的数据且由低 地址向高地址生成地址向高地址生成 堆栈指针指向最后堆

30、栈指针指向最后 压入的数据且由高压入的数据且由高 地址向低地址生成地址向低地址生成 堆栈指针指向下一个将堆栈指针指向下一个将 要放入数据的空位置且要放入数据的空位置且 由低地址向高地址生成由低地址向高地址生成 堆栈指针指向下一个将堆栈指针指向下一个将 要放入数据的空位置且要放入数据的空位置且 由高地址向低地址生成由高地址向低地址生成 从从堆栈的角度堆栈的角度来看,多寄存器传送指令是把一块数据从来看,多寄存器传送指令是把一块数据从 存储器的某一个位置拷贝到另一位置。存储器的某一个位置拷贝到另一位置。 从从块拷贝块拷贝的角度来看,指令还要基于数据存储在基址寄的角度来看,指令还要基于数据存储在基址寄

31、 存器地址之上还是之下,地址在存储第一个值之前或之后存器地址之上还是之下,地址在存储第一个值之前或之后 增加或减少。这两种角度的映射均取决于执行增加或减少。这两种角度的映射均取决于执行加载操作加载操作还还 是是存储操作存储操作。 表表2-4 2-4 多寄存器加载和存储指令映射多寄存器加载和存储指令映射 例如例如: LDMIAR0!,R2-R9;将数据加载到将数据加载到R2R9 STMIAR1,R2-R9;将数据存入存储器将数据存入存储器 执行指令后,由于引用自动索引执行指令后,由于引用自动索引“!”,R0的值共增的值共增 加加32,而,而R1不变。不变。 注意注意 多寄存器指令的后缀含义如下:

32、多寄存器指令的后缀含义如下: I:Increment D:Decrement or Descending stack A:After or Ascending stack B:Before F:Full E:Empty 例如例如“FD”即表明是满递减堆栈寻址方式(即表明是满递减堆栈寻址方式(full descending stack)。)。 可以将相对寻址看作是以程序计数器可以将相对寻址看作是以程序计数器PC为基址的一种为基址的一种 基址寻址方式。基址寻址方式。 指令的地址码作为位移量,与指令的地址码作为位移量,与PC相加得到操作数的有相加得到操作数的有 效地址。效地址。 位移量指出了操作数与

33、当前指令之间的相对位置。位移量指出了操作数与当前指令之间的相对位置。 例:例: BL SUBR;转移到转移到SUBR ;返回到此返回到此 SUBR;子程序入口子程序入口 地址地址 MOV PC,R14;返回返回 ARM指令集采用指令集采用32位二进制编码方式,大部分指令位二进制编码方式,大部分指令 编码中定义了第一操作数、第二操作数、目的操作数、编码中定义了第一操作数、第二操作数、目的操作数、 条件标志影响位以及每条指令所对应的不同功能实现的条件标志影响位以及每条指令所对应的不同功能实现的 二进制位。二进制位。 每条每条ARM指令都具有不同的编码方式,与不同的指令指令都具有不同的编码方式,与不

34、同的指令 功能相对应。功能相对应。 ARMARM 指指 令令 集集 编编 码码 条件执行条件执行是指只有在当前程序状态寄存器是指只有在当前程序状态寄存器 CPSR中的条件码标志满足指定的条件时,带条中的条件码标志满足指定的条件时,带条 件码的指令才能执行。件码的指令才能执行。 条件转移是绝大多数指令集的标准特征,但条件转移是绝大多数指令集的标准特征,但 ARM指令集将条件执行扩展到所有指令,包括监指令集将条件执行扩展到所有指令,包括监 控调用和协处理器指令。控调用和协处理器指令。 图图2-17 ARM2-17 ARM的条件代码域的条件代码域 操作码操作码31:28助记符后缀助记符后缀标志标志含

35、义含义 0000EQZ置位置位相等相等 0001NEZ清零清零不等不等 0010 CS/HSC置位置位大于或等于(无符号大于或等于(无符号=) 0011CC/LOC清零清零小于(无符号小于(无符号) 1001 LSC清零或清零或Z置位置位小于或等于(无符号小于或等于(无符号= 1011LTN和和V不同不同带符号带符号 1101 LEZ置位或置位或N和和V不同不同带符号带符号= 1110AL任何任何总是(缺省)总是(缺省) 1111NV无无从不(不要使用)从不(不要使用) 对于条件执行,需要说明的有以下两点:对于条件执行,需要说明的有以下两点: 注意注意 u几乎所有的几乎所有的ARM数据处理指令

36、都可以根据执行数据处理指令都可以根据执行 结果来选择是否更新条件码标志。当指令中包结果来选择是否更新条件码标志。当指令中包 含后缀含后缀“S”时,指令将更新条件码标志。时,指令将更新条件码标志。 u可以根据另一条指令设置的标志,有条件地执可以根据另一条指令设置的标志,有条件地执 行某条指令。行某条指令。 ARM指令集是指令集是Load/Store型,只能通过型,只能通过 Load/Store指令实现对存储器的访问,其它指令实现对存储器的访问,其它 类型的指令都基于寄存器完成。类型的指令都基于寄存器完成。 操作码;指令操作码;指令 助记符,如助记符,如 ADD、LDR等等 可选的条件码;可选的条

37、件码; 执行条件,如执行条件,如EQ、 NE等等 可选后缀;若指定可选后缀;若指定S, 则根据指令执行结果更则根据指令执行结果更 新新CPSR中的条件码中的条件码 目标寄存器目标寄存器 存放第一操作存放第一操作 数的寄存器数的寄存器 第二操作数第二操作数 例例: LDR R0, R1 BEQDATAEVEN ADDSR2,R1,#1 SUBNES R2,R1,#0 x20 ARM指令使用的基本格式如下所示:指令使用的基本格式如下所示: S, , LDR和和STR为单一数据传送指令,可传送为单一数据传送指令,可传送 字字和和无符号字节无符号字节、半字半字和和带符号字节带符号字节、双字双字。 (1

38、)字和无符号字节)字和无符号字节 u op cond B T Rd, Rn ;零偏移零偏移 u op cond B Rd, Rn, Flexoffset ! ;前索引偏移前索引偏移 u op cond B Rd, label ;程序相对偏移程序相对偏移 u op cond B T Rd, Rn ,Flexoffset ;后索引偏移后索引偏移 句法:句法: (1)字和无符号字节)字和无符号字节 u 指令用于指令用于加载加载或或存储存储寄存器寄存器32位字或位字或8位无符号字节。位无符号字节。 u 对于对于零偏移零偏移形式,形式,Rn的值作为传送数据的地址。的值作为传送数据的地址。 u 对于对于前

39、索引偏移前索引偏移形式,在传送数据之前,将偏移量加到形式,在传送数据之前,将偏移量加到Rn中,结中,结 果作为传送数据的存储器地址。若使用果作为传送数据的存储器地址。若使用“!”,则结果写回到,则结果写回到Rn, 且且Rn不允许是不允许是R15。 u 对于对于程序相对偏移程序相对偏移形式,汇编器由形式,汇编器由PC计算偏移量,并将计算偏移量,并将PC作为作为 Rn生成前索引指令。不能使用后缀生成前索引指令。不能使用后缀“!”。 u 对于对于后索引后索引形式,形式,Rn的值作为传送数据的存储器地址。数据传送的值作为传送数据的存储器地址。数据传送 之后,将偏移量加到之后,将偏移量加到Rn中,结果写

40、回到中,结果写回到Rn。Rn不允许是不允许是R15。 指令说明:指令说明: (1)字和无符号字节)字和无符号字节 LDR R8,R10 LDRNE R2,R5,#960! STR R2,R9,#CON STRB R0, R3,-R8,ASR #2 例:例: (2)半字和带符号字节)半字和带符号字节 u op cond type Rd, Rn;零偏移零偏移 u op cond type Rd, Rn, offset !;前索引偏移前索引偏移 u op cond type Rd, label;程序相对偏移程序相对偏移 u op cond type Rd, Rn, offset;后索引偏移后索引偏移

41、 句法:句法: (2)半字和带符号字节)半字和带符号字节 u 指令用于指令用于加载加载寄存器寄存器16位半字或带符号位半字或带符号8位字节,位字节,存储存储寄寄 存器存器16位半字。位半字。 u 带符号加载带符号加载是指带符号扩展到是指带符号扩展到32位。位。 u 无符号半字加载无符号半字加载是指零扩展到是指零扩展到32位。位。 u 半字传送的地址必须是半字传送的地址必须是偶数偶数,即按照半字对准。,即按照半字对准。 u 不能将半字或字节加载到不能将半字或字节加载到R15。 。 指令说明:指令说明: (2)字和无符号字节)字和无符号字节 LDREQSHR11,R6 LDRHR1,R0,#12

42、STRHR4,R0,R1! LDRSBR1,R6,R3,LSL #4 例:例: (3)双字)双字 u op cond D Rd, Rn;零偏移零偏移 u op cond D Rd, Rn, offset !;前索引偏移前索引偏移 u op cond D Rd, label;程序相对偏移程序相对偏移 u op cond D Rd, Rn, offset;后索引偏移后索引偏移 句法:句法: (3)双字)双字 u 指令用于加载或存储两个相邻寄存器指令用于加载或存储两个相邻寄存器64位双字。位双字。 u 对于双字传送,地址必须是对于双字传送,地址必须是8的倍数。的倍数。 指令说明:指令说明: (3)双

43、字)双字 LDRDR6,R11 LDRDR1,R6 STRDR4,R9,#24 STRDR14,R9,#24 STRDR2,R3,R6 例:例: op cond mode Rn !, reglist 句法:句法: u 指令用于加载或存储多个寄存器,可传送指令用于加载或存储多个寄存器,可传送R0R15的的 任何组合。任何组合。 u 指令忽略地址的位指令忽略地址的位1:0。 u 到到R15的加载将引起处理器转移到加载地址处的指令的加载将引起处理器转移到加载地址处的指令 u 如果如果Rn包含在寄存器列表中,且用包含在寄存器列表中,且用“!”表明要写回,表明要写回, 则若则若op是是STM,且,且Rn

44、是寄存器列表中数字最小的寄存器,是寄存器列表中数字最小的寄存器, 则则Rn的初值被保存。否则,的初值被保存。否则,Rn的加载和存储值不可预知。的加载和存储值不可预知。 指令说明:指令说明: LDMIAR8,R0,R2,R9 STMDBR1!, R3-R6,R11,R12 STMFDR13!, R0,R4-R7,LR LDMFDR13!, R0,R4-R7,PC STMIAR5!,R5,R4,R9 LDMDAR2, 例:例: PLD RnFlexoffset 句法:句法: u 指令用于指令用于Cache预加载,提示存储系统从后面的预加载,提示存储系统从后面的 几条指令所指定的存储器地址加载,用这

45、种方法可几条指令所指定的存储器地址加载,用这种方法可 以加速以后的存储器访问。以加速以后的存储器访问。 u 指令没有地址的对准限制。指令没有地址的对准限制。 指令说明:指令说明: PLDR2 PLDR0,#CON;CON范围为范围为4KB 例:例: SWP cond B Rd, Rm, Rn 句法:句法: u 指令用于在寄存器和存储器之间进行数据交换,指令用于在寄存器和存储器之间进行数据交换, 可以使用可以使用SWP来实现信号量。来实现信号量。 u对于非字对准的处理与对于非字对准的处理与LDR、STR指令中的处理指令中的处理 方法相同。方法相同。 指令说明:指令说明: 例:例:SWPBR1,R

46、1,R0;交换字节交换字节 ARM数据处理指令可以完成的功能包括:数据处理指令可以完成的功能包括: u数据传送数据传送 u算术运算算术运算 u逻辑运算逻辑运算 u比较比较 u测试测试 u乘法乘法 ARM数据处理指令的特点数据处理指令的特点 u操作数为操作数为32位,来自寄存器或定义的立即数。对于位,来自寄存器或定义的立即数。对于 操作数可进行符号扩展和零扩展。操作数可进行符号扩展和零扩展。 u处理结果除了长乘法指令为处理结果除了长乘法指令为64位之外,均为位之外,均为32位,位, 存放在寄存器中。存放在寄存器中。 u大多数大多数ARM通用数据处理指令都有一个灵活的第二通用数据处理指令都有一个灵

47、活的第二 操作数(操作数(flexible second operand)。第二操作)。第二操作 数数operand2可以是可以是 立即数形式立即数形式 或或 寄存器形式寄存器形式 。 3232位立即数位立即数 Rm,#shift uASR:算术右移。即将寄存器内容除以算术右移。即将寄存器内容除以2n。 uLSR:逻辑右移。即将寄存器内容除以逻辑右移。即将寄存器内容除以2n。 uLSL:逻辑左移。即将寄存器内容乘以逻辑左移。即将寄存器内容乘以2n。 uROR:循环右移。循环右移。 uRRX:带扩展的循环右移。将寄存器内容循环带扩展的循环右移。将寄存器内容循环 右移右移1位,进位标志拷贝到位位,

48、进位标志拷贝到位31。 图图2-18 2-18 移位操作过程移位操作过程 ADD、SUB、RSB、ADC、SBC、RSC op cond S Rd, Rn, Operand2 句法:句法: u 指令用于加、减、反减等算术运算,包括带进位的算指令用于加、减、反减等算术运算,包括带进位的算 术运算。术运算。 u 算术运算中如果使用算术运算中如果使用R15作为作为Rn,则其值为指令的地,则其值为指令的地 址加址加8。如果使用。如果使用R15作为作为Rd,则执行转移到结果相应的,则执行转移到结果相应的 地址;或者在使用地址;或者在使用“S”的情况下,拷贝的情况下,拷贝SPSR到到CPSR, 利用这点可

49、从异常返回。利用这点可从异常返回。 u 在有寄存器控制移位的任何数据处理指令中,不能将在有寄存器控制移位的任何数据处理指令中,不能将 R15作为作为Rd或任何操作数来使用。或任何操作数来使用。 指令说明:指令说明: ADD、SUB、RSB、ADC、SBC、RSC ADDR2,R1,R3 SUBSR8,R6,#240 RSBR4,R4,#1280 ADCHIR11,R0,R3 RSCLESR0,R5,R0,LSL R4 RSCLESR0,R15,R0,LSL R4 例:例: ADD、SUB、RSB、ADC、SBC、RSC AND、ORR、EOR、BIC op cond S Rd, Rn, Ope

50、rand2 句法:句法: u 指令用于与、或、异或、位清零等逻辑运算。指令用于与、或、异或、位清零等逻辑运算。 u BIC指令用于将指令用于将Rn中的位与中的位与Operand2值中的相应位值中的相应位 的反码进行的反码进行“与与”操作。操作。 u 若指定若指定S,则指令将根据结果更新标志,则指令将根据结果更新标志N和和Z;计算;计算 Operand2时更新标志时更新标志C;不影响标志;不影响标志V。 u 关于关于R15的使用与算术运算指令相同。的使用与算术运算指令相同。 指令说明:指令说明: AND、ORR、EOR、BIC ANDR9,R2,#0 xFF00 ORREQR2,R0,R5 EO

51、RSR0,R0,R3,ROR R6 BICNESR8,R10,R0,RRX EORSR0,R15,R3,ROR R6 例:例: AND、ORR、EOR、BIC MOV、MVN op cond S Rd, Operand2 句法:句法: u 指令用于数据传送。指令用于数据传送。 u MOV指令将指令将Operand2的值拷贝到的值拷贝到Rd; u MVN指令对指令对Operand2的值按位取非后,将结果拷的值按位取非后,将结果拷 贝到贝到Rd。 u 关于条件码标志的影响与逻辑运算指令相同。关于条件码标志的影响与逻辑运算指令相同。 u关于关于R15的使用与算术运算指令相同。的使用与算术运算指令相同

52、。 指令说明:指令说明: MOV、MVN MOVR5,R2 MVNNER11,#0 x0F000000 MOVSR0,R0,ASR R3 例:例: MOV、MVN CMP、CMN op cond S Rd, Operand2 句法:句法: u 指令用于比较操作,根据结果更新条件码标志,结指令用于比较操作,根据结果更新条件码标志,结 果并不放入寄存器。果并不放入寄存器。 u 其中,其中,CMP指令从指令从Rn的值中减去的值中减去Operand2的值,的值, 结果丢弃;结果丢弃;CMN指令将指令将Operand2的值加到的值加到Rn的值中,的值中, 结果丢弃。结果丢弃。 u如果将如果将R15用作用

53、作Rn,则使用的值是指令的地址加,则使用的值是指令的地址加8。 在控制寄存器移位的操作中,不能使用在控制寄存器移位的操作中,不能使用R15。 指令说明:指令说明: CMP、CMN CMPR2,R9 CMNR0,#6400 CMPGTR13,R7,LSL #2 CMPR2,R15,ASR R0 例:例: CMP、CMN TST、TEQ op cond S Rd, Operand2 句法:句法: u 指令用于测试操作,根据结果更新条件码标志,结果指令用于测试操作,根据结果更新条件码标志,结果 不放入寄存器。不放入寄存器。 u 其中,其中,TST指令对指令对Rn的值与的值与Operand2的值进行按

54、位的值进行按位 “与与”操作,结果丢弃;操作,结果丢弃;TEQ指令对指令对Rn的值与的值与 Operand2的值进行按位的值进行按位“异或异或”操作,结果丢弃。操作,结果丢弃。 u 关于条件码标志的影响与算术运算指令相同。关于条件码标志的影响与算术运算指令相同。 u 关于关于R15的使用与比较指令相同。的使用与比较指令相同。 指令说明:指令说明: TST、TEQ TSTR0,#0 x3F8 TEQEQR10,R9 TSTNER1,R5,ASR R1 TEQR15,R1,ROR R0 例:例: TST、TEQ MUL、MLA MUL cond S Rd, Rm, Rs MLA cond S Rd

55、, Rm, Rs, Rn 句法:句法: u 指令用于进行乘法和乘加指令用于进行乘法和乘加32位位32位运算,结果为位运算,结果为 低低32位。位。 u 如果指定如果指定S,则指令根据结果更新标志,则指令根据结果更新标志N和和Z;不影;不影 响标志响标志V;在;在ARMv4之前版本中标志之前版本中标志C不可靠;在不可靠;在 ARMv5以后版本中不影响标志以后版本中不影响标志C。 u R15不能用作不能用作Rd、Rm、Rs或或Rn。Rd不能与不能与Rm 相同。相同。 指令说明:指令说明: MUL、MLA MULR10,R2,R5 MLAR10,R2,R1,R5 MULSR0,R2,R2 MULLT

56、R2,R3,R2 MLAVCSR8,R6,R3,R8 MULR15,R0,R3 MLAR1,R1,R6 例:例: MUL、MLA CLZ cond Rd, Rm 句法:句法: u 指令用于对指令用于对Rm中值的前导零的个数进行计数,中值的前导零的个数进行计数, 结果放入结果放入Rd中。若中。若Rm内容为内容为0,则结果为,则结果为32; 若若Rm位位31为为1,则结果为,则结果为0。 u 指令不影响条件码标志。指令不影响条件码标志。 u Rd不允许是不允许是R15。 指令说明:指令说明: Bcondlabel BLcondlabel 句法:句法: u 指令用于分支和带链接分支的操作。指令用于分

57、支和带链接分支的操作。 u 其中,其中,B指令引起处理器转移到指令引起处理器转移到label;BL指令将指令将 下一条指令的地址拷贝到下一条指令的地址拷贝到R14(LR,链接寄存器),链接寄存器), 并引起处理器转移到并引起处理器转移到label。 指令说明:指令说明: Bloop A BLsub 例:例: BXcondRm 句法:句法: u 指令用于实现分支,并可选地交换指令集。指令用于实现分支,并可选地交换指令集。BX指指 令将引起处理器转移到令将引起处理器转移到Rm中的地址。若中的地址。若Rm的位的位0 为为1,则指令集变换到,则指令集变换到Thumb指令集。指令集。 指令说明:指令说明

58、: BXR6 例:例: BLX condRm 句法:句法: u 指令用于实现带链接分支,并可选地交换指令集。指令用于实现带链接分支,并可选地交换指令集。 u BLX指令具体用途有:指令具体用途有: u将下一条指令的地址拷贝到将下一条指令的地址拷贝到R14(LR,链接寄存器)中;,链接寄存器)中; u转移到转移到label或或Rm中的地址;中的地址; u切换到切换到Thumb指令集,条件是指令集,条件是Rm的位的位0为为1或者使用或者使用 “BLX label”的形式。的形式。 u 机器级的机器级的“BLX label”指令的转移不能超过当前指指令的转移不能超过当前指 令地址的令地址的32Mb范

59、围。范围。 指令说明:指令说明: BLX R0 BLX thumbsub 例:例: ARM支持支持16个协处理器,如用于控制片上功能(如个协处理器,如用于控制片上功能(如 cache、MMU)的系统协处理器、浮点协处理器以及)的系统协处理器、浮点协处理器以及 其它一些专用的协处理器。其它一些专用的协处理器。 每个协处理器均忽略每个协处理器均忽略ARM处理器和其它协处理器的处理器和其它协处理器的 指令。指令。 如果协处理器没有接受如果协处理器没有接受ARM的协处理器指令,则的协处理器指令,则 ARM将产生未定义指令中止的陷阱,以此可用来实现将产生未定义指令中止的陷阱,以此可用来实现 “协处理器丢

60、失协处理器丢失”的软件仿真。的软件仿真。 SWIcond immed_24 句法:句法: u SWI指令引起处理器指令引起处理器SWI异常,即处理器变为管异常,即处理器变为管 理模式,理模式,CPSR内容保存到管理模式的内容保存到管理模式的SPSR中,执中,执 行转移到行转移到SWI向量。这条指令不影响条件码标志。向量。这条指令不影响条件码标志。 指令说明:指令说明: 软件中断指令软件中断指令SWI BKPTimmed_16 句法:句法: u BKPT指令引起处理器进入调试模式,调试工具指令引起处理器进入调试模式,调试工具 可利用这条指令到达特定的地址时查询系统状态。可利用这条指令到达特定的地

温馨提示

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

评论

0/150

提交评论