




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 流水线技术流水线技术是现代微处理器普遍采用的是现代微处理器普遍采用的一种技术,它可以使得几条指令并行执行,一种技术,它可以使得几条指令并行执行,因此可以大大提高处理器的运行效率。因此可以大大提高处理器的运行效率。 从程序存储器中读取从程序存储器中读取指令,放入流水线中指令,放入流水线中 操作码和操作数被译码,决定执操作码和操作数被译码,决定执行什么功能,为下一个时钟周期行什么功能,为下一个时钟周期准备数据路径所需要的控制信号准备数据路径所需要的控制信号执行已译码的指令执行已译码的指令取取 指指译译 码码执执 行行ARM7ARM7的的3 3级流水线:级流水线: 流水线能够正常工作的条件是在任意
2、时刻,每一级所流水线能够正常工作的条件是在任意时刻,每一级所使用的硬件必须能够独立操作,不能多级同时占用同一使用的硬件必须能够独立操作,不能多级同时占用同一硬件资源。硬件资源。 在正常情况下,每条指令都被划分成这样在正常情况下,每条指令都被划分成这样3个时钟周期个时钟周期来完成,即指令执行时间(来完成,即指令执行时间(Latency)是)是3周期。周期。 流水线的执行使得程序计数器流水线的执行使得程序计数器PC必须在当前指令取指必须在当前指令取指前计数。对于前计数。对于ARM处理器的处理器的3级流水线,以当前级流水线,以当前PC取指取指后,后,PC值会增加为值会增加为PC4。 图图2-5 AR
3、M2-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数据类型存储图数据类型存储图 ARM体系结构支持体系结构支持7种处理器模
4、式种处理器模式 : ARM处理器具有特殊的两种工作状态:处理器具有特殊的两种工作状态:u ARM状态状态:32位,执行字对准的位,执行字对准的ARM指令;指令;u Thumb状态状态:16位,执行半字对准的位,执行半字对准的Thumb指令。指令。 ARM处理器的操作状态可以通过处理器的操作状态可以通过BX指令指令(分支和交换分支和交换指令)在指令)在ARM状态和状态和Thumb状态之间切换。状态之间切换。例:例:从从ARM状态切换到状态切换到Thumb状态:状态: LDR R0,=Label+1 BX R0从从Thumb状态切换到状态切换到ARM状态:状态: LDR R0,=Label BX
5、R0 ARM处理器共有处理器共有37个寄存器:个寄存器: u 31个个通用寄存器通用寄存器:32位,含程序计数器位,含程序计数器PC;u 6个个状态寄存器状态寄存器:32位,只使用了其中的位,只使用了其中的12位。位。 当编写用户程序时,当编写用户程序时,37个寄存器中仅有个寄存器中仅有15个通用寄存个通用寄存器器r0r14、程序计数器、程序计数器PC(r15)和当前程序状态寄存)和当前程序状态寄存器器CPSR需要考虑。其余寄存器仅用于系统级编程和异常需要考虑。其余寄存器仅用于系统级编程和异常处理(如中断)。处理(如中断)。 A AR RM M状状态态下下寄寄存存器器组组织织 不分组意味着在所
6、有处理器模式下,不分组意味着在所有处理器模式下,r0r7都可被同样访问,没有体系结构所隐含的特殊都可被同样访问,没有体系结构所隐含的特殊用途。用途。 分组意味着分组意味着r8r14的访问与当前处理器的模式的访问与当前处理器的模式相关。相关。 如果要访问如果要访问r8r14,而不依赖于当前处理器的,而不依赖于当前处理器的模式,就必须使用规定的寄存器名称。模式,就必须使用规定的寄存器名称。 名称的形式为:名称的形式为: r8_r14_ r8r12各有两组物理寄存器:一组为各有两组物理寄存器:一组为FIQ模式,另一组为模式,另一组为FIQ以外以外的模式。的模式。 寄存器寄存器r8r12没有指定特殊用
7、途,而使用没有指定特殊用途,而使用r8_fiqr12_fiq则允许快速中断。则允许快速中断。 寄存器寄存器r13和和r14的用途比较特殊:的用途比较特殊: u r13通常用作堆栈指针通常用作堆栈指针SP,被初始化成指向异常,被初始化成指向异常模式分配的堆栈。模式分配的堆栈。u r14通常用作子程序链接寄存器通常用作子程序链接寄存器LR。处理异常时,在程序入口处将处理异常时,在程序入口处将异常处理程序用到的其它寄存异常处理程序用到的其它寄存器的值压入堆栈,返回时重新器的值压入堆栈,返回时重新将这些值加载到寄存器中。将这些值加载到寄存器中。当执行分支指令当执行分支指令BL时,时,r15的的内容拷贝
8、到内容拷贝到r14中,从而成为中,从而成为子程序调用后的返回地址子程序调用后的返回地址 寄存器寄存器r15通常被用作程序计数器通常被用作程序计数器PC。 在在ARM状态下,状态下,PC的值保存在位的值保存在位31:2,而位而位1:0为为0;在;在Thumb状态下,状态下,PC的值保的值保存在位存在位31:1,而位,而位0为为0。 CPSR和和SPSR具有相同的格式具有相同的格式 标志位标志位含含 义义N当用两个补码表示的带符号数进行运算时,当用两个补码表示的带符号数进行运算时,N=1 表示运算的结果为负数;表示运算的结果为负数;N=0 表示运算的结果为正数或零;表示运算的结果为正数或零;ZZ=
9、1 表示运算的结果为零;表示运算的结果为零;Z=0表示运算的结果为非零;表示运算的结果为非零;C可以有可以有4种方法设置种方法设置C的值:的值: 加法运算(包括比较指令加法运算(包括比较指令CMNCMN):当运算结果产生了进位时(无符号数):当运算结果产生了进位时(无符号数溢出),溢出),C=1C=1,否则,否则C=0C=0。 减法运算(包括比较指令减法运算(包括比较指令CMPCMP):当运算时产生了借位(无符号数溢):当运算时产生了借位(无符号数溢出),出),C=0C=0,否则,否则C=1C=1。 对于包含移位操作的非加对于包含移位操作的非加/ /减运算指令,减运算指令,C C为移出值的最后
10、一位。为移出值的最后一位。 对于其他的非加对于其他的非加/ /减运算指令,减运算指令,C C的值通常不改变。的值通常不改变。V可以有可以有2种方法设置种方法设置V的值:的值: 对于加对于加/ /减法运算指令,当操作数和运算结果为二进制的补码表示的带减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,符号数时,V=1V=1表示符号位溢出。表示符号位溢出。 对于其他的非加对于其他的非加/ /减运算指令,减运算指令,V V的值通常不改变。的值通常不改变。Q在在ARM v5及以上版本的及以上版本的E系列处理器中,用系列处理器中,用Q标志位指示增强的标志位指示增强的DSP运算运算指令是否发生
11、了溢出。在其他版本的处理器中,指令是否发生了溢出。在其他版本的处理器中,Q标志位无定义。标志位无定义。ThumbThumb状状态态下下寄寄存存器器组组织织 ThumbThumb状态状态寄存器到寄存器到ARMARM寄存器寄存器的映射的映射 异常(异常(exception)是指由内部或外部源产生从而使)是指由内部或外部源产生从而使处理器需要处理的一个事件。处理器需要处理的一个事件。 u 例如,外部中断或试图实行未定义的指令都例如,外部中断或试图实行未定义的指令都会引起异常的发生。会引起异常的发生。 处理异常之前,处理器必须保存当前的状态,以便在处理异常之前,处理器必须保存当前的状态,以便在异常处理
12、完成后,能够使原来的出现重新执行。异常处理完成后,能够使原来的出现重新执行。 ARM支持支持7种类型的异常。对于每种异常,处理器将种类型的异常。对于每种异常,处理器将强制从异常对应的某个固定地址开始执行程序。这些固强制从异常对应的某个固定地址开始执行程序。这些固定地址称为定地址称为异常向量异常向量。 多个异常可能会同时发生,因此在多个异常可能会同时发生,因此在ARM中就通过给各中就通过给各个异常赋予不同的优先级来确定处理异常的顺序。个异常赋予不同的优先级来确定处理异常的顺序。 优先级按照从高到低的顺序排列如下:优先级按照从高到低的顺序排列如下: u复位复位u数据异常中止数据异常中止uFIQuI
13、RQu预取指异常中止预取指异常中止uSWI、未定义指令(这两种异常的指令编码互、未定义指令(这两种异常的指令编码互斥,不可能同时发生)斥,不可能同时发生) u在相应的链接寄存器在相应的链接寄存器LR (r14)中保存下一条中保存下一条指令的地址指令的地址u将将CPSR复制到相应的复制到相应的SPSR中中u强制使强制使CPSR模式位置成对应异常类型的值模式位置成对应异常类型的值u强制使程序计数器指向相应异常向量,取下强制使程序计数器指向相应异常向量,取下一条指令一条指令例子例子: : 用户模式到用户模式到 FIQFIQ模式模式* *spsr_fiqcpsrr7r4r5r2r1r0r3r6r15
14、(pc)r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_fiqr8_fiqr14 (lr)r13 (sp)r12r10r11r9r8用户模式用户模式 CPSR CPSR 复制到复制到 FIQ FIQ 模式模式 SPSRSPSRcpsrr15 (pc)r14 (lr)r13 (sp)r12r10r11r9r8r7r4r5r2r1r0r3r6r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_fiqr8_fiq返回一个从用户模式计算的地址,返回一个从用户模式计算的地址,PCPC值存储在值存储在FIQFIQ模式模式Registers in useR
15、egisters in use异常异常用户模式用户模式FIQ FIQ 模式模式spsr_fiq 与单片机等简单系统相比,现在一些复杂的嵌入式系统与单片机等简单系统相比,现在一些复杂的嵌入式系统中,存储系统的功能更加强大,可能包含有多种现代计算中,存储系统的功能更加强大,可能包含有多种现代计算机存储技术,如机存储技术,如Cache和和Write Buffer、MMU、存储保、存储保护机制、快速上下文切换等。护机制、快速上下文切换等。 基于基于ARM内核的嵌入式系统可能包含内核的嵌入式系统可能包含Flash、ROM、SRAM、SDRAM等多种类型的存储器,不同类型的存储等多种类型的存储器,不同类型
16、的存储器存取速度和数据宽度等都不尽相同。器存取速度和数据宽度等都不尽相同。 存储系统的设计可以是多种多样的,但是应当遵循一定存储系统的设计可以是多种多样的,但是应当遵循一定的规则,否则可能会引起一些不必要的麻烦。的规则,否则可能会引起一些不必要的麻烦。例如例如:u 可能使存储系统的实现比较困难;可能使存储系统的实现比较困难;u 可能导致向其它可能导致向其它ARM处理器的移植出现麻烦;处理器的移植出现麻烦;u 可能引起一些标准软件(如编译器)的不适应。可能引起一些标准软件(如编译器)的不适应。 基于系统设计和编程的考虑,关于基于系统设计和编程的考虑,关于ARM存储系统一般只存储系统一般只需涉及需
17、涉及地址空间地址空间、存储器格式存储器格式、存储器访问对准存储器访问对准以及以及存储存储器映射器映射I/O等方面的问题。等方面的问题。 ARM体系结构使用体系结构使用232个个8位字节位字节的单一、线性地址空间,的单一、线性地址空间,字节地址的范围为字节地址的范围为02321; 也可以将地址空间看作由也可以将地址空间看作由230个个32位的字位的字组成,字地址组成,字地址可被可被4整除,且按字对准,例如以整除,且按字对准,例如以A为字对准地址的字地为字对准地址的字地址由址由A、A1、A2、A3共共4个字节组成;个字节组成; 在在ARM体系结构体系结构v4以上版本中,也可以将地址空间看以上版本中
18、,也可以将地址空间看作由作由231个个16位的半字位的半字组成,半字地址可被组成,半字地址可被2整除,且按整除,且按半字对准,例如以半字对准,例如以A为字对准地址的半字地址由为字对准地址的半字地址由A、A1共共2个字节组成。个字节组成。 存储器格式是指字、半字、字节在存储器中存放的方式,存储器格式是指字、半字、字节在存储器中存放的方式,也反映了存储器中字、半字、字节之间的映射关系。也反映了存储器中字、半字、字节之间的映射关系。 存储器格式包括小端和大端两种格式。存储器格式包括小端和大端两种格式。 大、小端存储格式对程序的影响大、小端存储格式对程序的影响 对于对于非对准的取指非对准的取指,在,在
19、ARM工作状态下,未对准的地址工作状态下,未对准的地址写入写入R15后,结果将不可预知或忽略地址位后,结果将不可预知或忽略地址位1:0;在;在Thumb状态下,未对准的地址写入状态下,未对准的地址写入R15后,则通常忽略后,则通常忽略地址位地址位0。 对于对于非对准的数据访问非对准的数据访问,则体系结构可能定义成以下行,则体系结构可能定义成以下行为之一:为之一:u 不可预知;不可预知;u 忽略使访问非对准的低地址位;忽略使访问非对准的低地址位;u 忽略使访问非对准的低地址位,但使用这些位控制忽略使访问非对准的低地址位,但使用这些位控制加载数据的循环移位(适用于加载数据的循环移位(适用于LDR和
20、和SWP指令)。指令)。 ARM系统实现系统实现I/O功能的标准方法是使用存储器映射功能的标准方法是使用存储器映射I/O。 这种方法使用特定的存储器地址,对这些地址加载和存这种方法使用特定的存储器地址,对这些地址加载和存储,即可完成储,即可完成I/O操作。操作。 通常,对存储器映射通常,对存储器映射I/O地址加载对应输入,对对存储地址加载对应输入,对对存储器映射器映射I/O地址存储对应输出。地址存储对应输出。 另外,加载和存储也可执行控制功能,替代或附加到正另外,加载和存储也可执行控制功能,替代或附加到正常的常的I/O操作上。操作上。 指令地址码给出寄存器的编号,寄存器中的内容为操作指令地址码
21、给出寄存器的编号,寄存器中的内容为操作数。数。 例如例如: ADD R0,R1,R2;R0R1+R2 写操作数的顺序为:第一个寄存器写操作数的顺序为:第一个寄存器R0为为结果寄存器结果寄存器,第二个寄存器第二个寄存器R1为为第一操作数寄存器第一操作数寄存器,第三个寄存器,第三个寄存器R2为为第二操作数寄存器第二操作数寄存器。 注意注意 指令操作码后的地址码是立即数,即操作数本身。指令操作码后的地址码是立即数,即操作数本身。 例如例如: ADD R3,R3,#1;R3R3+1 AND R8,R7,#&FF;R8R77:0 立即数的表示以立即数的表示以“#”为前缀,十六进制的立即数在为前缀
22、,十六进制的立即数在“#”后面加后面加“&”符号。符号。 注意注意 寄存器移位寻址是寄存器移位寻址是ARM指令集特有的寻址方式。第指令集特有的寻址方式。第2个个操作数与第操作数与第1个操作数结合之前,选择进行移位操作。个操作数结合之前,选择进行移位操作。 例如例如: ADD R3,R2,R1,LSL #3;R3R2+8R1 可采取的移位操作包括:可采取的移位操作包括:l LSL:逻辑左移(:逻辑左移(Logical Shift Left)。寄存器中字的低端)。寄存器中字的低端空出的位补空出的位补0。l LSR:逻辑右移(:逻辑右移(Logical Shift Right)。寄存器中字的
23、高)。寄存器中字的高端空出的位补端空出的位补0。l ASR:算术右移(:算术右移(Arithmetic Shift Right)。算术移位的对)。算术移位的对象是带符号数。在移位过程中必须保持操作数的符号不变。若源象是带符号数。在移位过程中必须保持操作数的符号不变。若源操作数为正数,则字的高端空出的位补操作数为正数,则字的高端空出的位补0;若源操作数为负数,;若源操作数为负数,则字的高端空出的位补则字的高端空出的位补1。l ROR:循环右移(:循环右移(ROtate Right)。从字的最低端移出的位)。从字的最低端移出的位填入字的高端空出的位。填入字的高端空出的位。l RRX:扩展为:扩展为
24、1的循环右移(的循环右移(Rotate Right eXtended by 1 place)。操作数右移)。操作数右移1位,空位(位位,空位(位31)用原)用原C标志填充。标志填充。移移位位操操作作过过程程 指令地址码给出寄存器的编号,寄存器为地址指针,存指令地址码给出寄存器的编号,寄存器为地址指针,存放操作数的有效地址。放操作数的有效地址。 例如例如:LDR R0,R1;R0R1STRR0,R1;R0R1 基址寻址基址寻址是将基址寄存器的内容与指令中给出的位移量是将基址寄存器的内容与指令中给出的位移量相加,形成操作数有效地址。相加,形成操作数有效地址。 基址寻址用于访问基址附近的存储单元。基
25、址寻址用于访问基址附近的存储单元。 包括包括基址加偏移量寻址基址加偏移量寻址和和基址加索引寻址基址加索引寻址,可以将寄存,可以将寄存器间接寻址看作是位移量为器间接寻址看作是位移量为0的基址加偏移量寻址。的基址加偏移量寻址。 基址加偏移量寻址基址加偏移量寻址中的偏移量最大为中的偏移量最大为4KB,可分为可分为前索引寻址前索引寻址和和后索引寻址后索引寻址。 前索引寻址举例:前索引寻址举例:LDRR0,R1,#4;R0R1+4 例:例:LDRR0,R1,#4!;R0R1;R1R1+4 后索引寻址举例:后索引寻址举例:LDR R0,R1,#4;R0R1;R1R1+4这种改变基址寄存器指向下一个传送的地
26、址对数据块传这种改变基址寄存器指向下一个传送的地址对数据块传送很有用,还可以采用带自动索引的前索引寻址实现。送很有用,还可以采用带自动索引的前索引寻址实现。注意注意 基址加索引寻址基址加索引寻址是指令指定一个基址寄存器,是指令指定一个基址寄存器,再指定另一个寄存器(称为索引),其值作为再指定另一个寄存器(称为索引),其值作为位移加到基址上形成存储器地址。位移加到基址上形成存储器地址。 例:例:LDR R0,R1,R2;R0R1+R2 多寄存器寻址多寄存器寻址是指一次可以传动多个寄存器的值,允许是指一次可以传动多个寄存器的值,允许一条指令可以传送一条指令可以传送16个个寄存器的任何子集,包括寄存
27、器的任何子集,包括16个寄个寄存器。存器。 例:例:LDMIAR1,R0,R2,R5;R0R1;R2R1+4;R5R1+8由于传送的数据总是由于传送的数据总是32位的字,因此基址寄存器位的字,因此基址寄存器R1应应当字对准。当字对准。注意注意 堆栈是一种按照特定顺序进行存取的存储区。这种特定的堆栈是一种按照特定顺序进行存取的存储区。这种特定的顺序是指顺序是指“后进先出后进先出”(LIFO)或)或“先进后出先进后出”(FILO)。)。 使用堆栈时需要使用一个专门的寄存器作为使用堆栈时需要使用一个专门的寄存器作为堆栈指针堆栈指针,栈,栈指针所指定的存储单元就是堆栈的指针所指定的存储单元就是堆栈的栈
28、顶栈顶。 如果堆栈指针指向最后压入堆栈的有效数据项,就称为如果堆栈指针指向最后压入堆栈的有效数据项,就称为满满堆栈堆栈(full stack);如果堆栈指针指向下一个数据项放入);如果堆栈指针指向下一个数据项放入的空位置,就称为的空位置,就称为空堆栈空堆栈(empty stack)。)。 另外,根据堆栈存储区地址增长的方向,可将堆栈分为另外,根据堆栈存储区地址增长的方向,可将堆栈分为递递增堆栈增堆栈(ascending stack)和)和递减堆栈递减堆栈(descending stack)。)。 以上表示递增、递减、满、空的堆栈的各种组合就产生了以上表示递增、递减、满、空的堆栈的各种组合就产生
29、了4种堆栈类型。种堆栈类型。 ARM支持所有这支持所有这4种类型的堆栈,即种类型的堆栈,即满递增满递增、空递增空递增、满满递减递减、空递减空递减。 ARM指令使用指令使用push向堆栈写数据,称为向堆栈写数据,称为进栈进栈;使用;使用pop从堆栈读数据,称为从堆栈读数据,称为出栈出栈。 堆栈指针指向最后堆栈指针指向最后压入的数据且由低压入的数据且由低地址向高地址生成地址向高地址生成堆栈指针指向最后堆栈指针指向最后压入的数据且由高压入的数据且由高地址向低地址生成地址向低地址生成堆栈指针指向下一个将堆栈指针指向下一个将要放入数据的空位置且要放入数据的空位置且由低地址向高地址生成由低地址向高地址生成
30、堆栈指针指向下一个将堆栈指针指向下一个将要放入数据的空位置且要放入数据的空位置且由高地址向低地址生成由高地址向低地址生成 从从堆栈的角度堆栈的角度来看,多寄存器传送指令是把一块数据从来看,多寄存器传送指令是把一块数据从存储器的某一个位置拷贝到另一位置。存储器的某一个位置拷贝到另一位置。 从从块拷贝块拷贝的角度来看,指令还要基于数据存储在基址寄的角度来看,指令还要基于数据存储在基址寄存器地址之上还是之下,地址在存储第一个值之前或之后存器地址之上还是之下,地址在存储第一个值之前或之后增加或减少。这两种角度的映射均取决于执行增加或减少。这两种角度的映射均取决于执行加载操作加载操作还还是是存储操作存储
31、操作。 表表2-4 2-4 多寄存器加载和存储指令映射多寄存器加载和存储指令映射 例如例如:LDMIAR0!,R2-R9;将数据加载到将数据加载到R2R9STMIAR1,R2-R9;将数据存入存储器将数据存入存储器执行指令后,由于引用自动索引执行指令后,由于引用自动索引“!”,R0的值共增的值共增加加32,而,而R1不变。不变。 注意注意多寄存器指令的后缀含义如下:多寄存器指令的后缀含义如下:I:IncrementD:Decrement or Descending stackA:After or Ascending stackB:BeforeF:FullE:Empty例如例如“FD”即表明是满
32、递减堆栈寻址方式(即表明是满递减堆栈寻址方式(full descending stack)。)。 可以将相对寻址看作是以程序计数器可以将相对寻址看作是以程序计数器PC为基址的一种为基址的一种基址寻址方式。基址寻址方式。 指令的地址码作为位移量,与指令的地址码作为位移量,与PC相加得到操作数的有相加得到操作数的有效地址。效地址。 位移量指出了操作数与当前指令之间的相对位置。位移量指出了操作数与当前指令之间的相对位置。 例:例:BL SUBR;转移到转移到SUBR;返回到此返回到此SUBR;子程序入口子程序入口地址地址MOV PC,R14;返回返回 ARM指令集采用指令集采用32位二进制编码方式,
33、大部分指令位二进制编码方式,大部分指令编码中定义了第一操作数、第二操作数、目的操作数、编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的条件标志影响位以及每条指令所对应的不同功能实现的二进制位。二进制位。 每条每条ARM指令都具有不同的编码方式,与不同的指令指令都具有不同的编码方式,与不同的指令功能相对应。功能相对应。 ARMARM指指令令集集编编码码 条件执行条件执行是指只有在当前程序状态寄存器是指只有在当前程序状态寄存器CPSR中的条件码标志满足指定的条件时,带条中的条件码标志满足指定的条件时,带条件码的指令才能执行。件码的指令才能执行。 条件
34、转移是绝大多数指令集的标准特征,但条件转移是绝大多数指令集的标准特征,但ARM指令集将条件执行扩展到所有指令,包括监指令集将条件执行扩展到所有指令,包括监控调用和协处理器指令。控调用和协处理器指令。 图图2-17 ARM2-17 ARM的条件代码域的条件代码域操作码操作码31:28助记符后缀助记符后缀标志标志含义含义0000EQZ置位置位相等相等0001NEZ清零清零不等不等0010CS/HSC置位置位大于或等于(无符号大于或等于(无符号=)0011CC/LOC清零清零小于(无符号小于(无符号)1001LSC清零或清零或Z置位置位小于或等于(无符号小于或等于(无符号=1011LTN和和V不同不
35、同带符号带符号1101LEZ置位或置位或N和和V不同不同带符号带符号=1110AL任何任何总是(缺省)总是(缺省)1111NV无无从不(不要使用)从不(不要使用)对于条件执行,需要说明的有以下两点:对于条件执行,需要说明的有以下两点: 注意注意u几乎所有的几乎所有的ARM数据处理指令都可以根据执行数据处理指令都可以根据执行结果来选择是否更新条件码标志。当指令中包结果来选择是否更新条件码标志。当指令中包含后缀含后缀“S”时,指令将更新条件码标志。时,指令将更新条件码标志。u可以根据另一条指令设置的标志,有条件地执可以根据另一条指令设置的标志,有条件地执行某条指令。行某条指令。 ARM指令集是指令
36、集是Load/Store型,只能通过型,只能通过Load/Store指令实现对存储器的访问,其它指令实现对存储器的访问,其它类型的指令都基于寄存器完成。类型的指令都基于寄存器完成。操作码;指令操作码;指令助记符,如助记符,如ADD、LDR等等可选的条件码;可选的条件码;执行条件,如执行条件,如EQ、NE等等可选后缀;若指定可选后缀;若指定S,则根据指令执行结果更则根据指令执行结果更新新CPSR中的条件码中的条件码目标寄存器目标寄存器存放第一操作存放第一操作数的寄存器数的寄存器第二操作数第二操作数例例:LDR R0, R1 BEQDATAEVENADDSR2,R1,#1SUBNES R2,R1,
37、#0 x20 ARM指令使用的基本格式如下所示:指令使用的基本格式如下所示: S, , LDR和和STR为单一数据传送指令,可传送为单一数据传送指令,可传送字字和和无符号字节无符号字节、半字半字和和带符号字节带符号字节、双字双字。 (1)字和无符号字节)字和无符号字节 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)字和无符
38、号字节)字和无符号字节 u 指令用于指令用于加载加载或或存储存储寄存器寄存器32位字或位字或8位无符号字节。位无符号字节。u 对于对于零偏移零偏移形式,形式,Rn的值作为传送数据的地址。的值作为传送数据的地址。u 对于对于前索引偏移前索引偏移形式,在传送数据之前,将偏移量加到形式,在传送数据之前,将偏移量加到Rn中,结中,结果作为传送数据的存储器地址。若使用果作为传送数据的存储器地址。若使用“!”,则结果写回到,则结果写回到Rn,且且Rn不允许是不允许是R15。u 对于对于程序相对偏移程序相对偏移形式,汇编器由形式,汇编器由PC计算偏移量,并将计算偏移量,并将PC作为作为Rn生成前索引指令。不
39、能使用后缀生成前索引指令。不能使用后缀“!”。u 对于对于后索引后索引形式,形式,Rn的值作为传送数据的存储器地址。数据传送的值作为传送数据的存储器地址。数据传送之后,将偏移量加到之后,将偏移量加到Rn中,结果写回到中,结果写回到Rn。Rn不允许是不允许是R15。 指令说明:指令说明:(1)字和无符号字节)字和无符号字节 LDR R8,R10LDRNE R2,R5,#960!STR R2,R9,#CONSTRB R0, R3,-R8,ASR #2 例:例:(2)半字和带符号字节)半字和带符号字节u op cond type Rd, Rn;零偏移零偏移u op cond type Rd, Rn,
40、 offset !;前索引偏移前索引偏移u op cond type Rd, label;程序相对偏移程序相对偏移u op cond type Rd, Rn, offset;后索引偏移后索引偏移 句法:句法:(2)半字和带符号字节)半字和带符号字节u 指令用于指令用于加载加载寄存器寄存器16位半字或带符号位半字或带符号8位字节,位字节,存储存储寄寄存器存器16位半字。位半字。u 带符号加载带符号加载是指带符号扩展到是指带符号扩展到32位。位。u 无符号半字加载无符号半字加载是指零扩展到是指零扩展到32位。位。u 半字传送的地址必须是半字传送的地址必须是偶数偶数,即按照半字对准。,即按照半字对准
41、。u 不能将半字或字节加载到不能将半字或字节加载到R15。 。 指令说明:指令说明:(2)字和无符号字节)字和无符号字节 LDREQSHR11,R6LDRHR1,R0,#12STRHR4,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 指令用于加载或存储两个相邻
42、寄存器指令用于加载或存储两个相邻寄存器64位双字。位双字。u 对于双字传送,地址必须是对于双字传送,地址必须是8的倍数。的倍数。 指令说明:指令说明:(3)双字)双字 LDRDR6,R11LDRDR1,R6STRDR4,R9,#24STRDR14,R9,#24STRDR2,R3,R6 例:例:op cond mode Rn !, reglist 句法:句法:u 指令用于加载或存储多个寄存器,可传送指令用于加载或存储多个寄存器,可传送R0R15的的任何组合。任何组合。u 指令忽略地址的位指令忽略地址的位1:0。u 到到R15的加载将引起处理器转移到加载地址处的指令的加载将引起处理器转移到加载地址
43、处的指令u 如果如果Rn包含在寄存器列表中,且用包含在寄存器列表中,且用“!”表明要写回,表明要写回,则若则若op是是STM,且,且Rn是寄存器列表中数字最小的寄存器,是寄存器列表中数字最小的寄存器,则则Rn的初值被保存。否则,的初值被保存。否则,Rn的加载和存储值不可预知。的加载和存储值不可预知。 指令说明:指令说明:LDMIAR8,R0,R2,R9STMDBR1!, R3-R6,R11,R12STMFDR13!, R0,R4-R7,LRLDMFDR13!, R0,R4-R7,PCSTMIAR5!,R5,R4,R9LDMDAR2, 例:例:PLD RnFlexoffset 句法:句法:u 指
44、令用于指令用于Cache预加载,提示存储系统从后面的预加载,提示存储系统从后面的几条指令所指定的存储器地址加载,用这种方法可几条指令所指定的存储器地址加载,用这种方法可以加速以后的存储器访问。以加速以后的存储器访问。u 指令没有地址的对准限制。指令没有地址的对准限制。 指令说明:指令说明:PLDR2PLDR0,#CON;CON范围为范围为4KB 例:例:SWP cond B Rd, Rm, Rn 句法:句法:u 指令用于在寄存器和存储器之间进行数据交换,指令用于在寄存器和存储器之间进行数据交换,可以使用可以使用SWP来实现信号量。来实现信号量。u对于非字对准的处理与对于非字对准的处理与LDR、
45、STR指令中的处理指令中的处理方法相同。方法相同。 指令说明:指令说明: 例:例:SWPBR1,R1,R0;交换字节交换字节 ARM数据处理指令可以完成的功能包括:数据处理指令可以完成的功能包括:u数据传送数据传送u算术运算算术运算u逻辑运算逻辑运算u比较比较u测试测试u乘法乘法 ARM数据处理指令的特点数据处理指令的特点 u操作数为操作数为32位,来自寄存器或定义的立即数。对于位,来自寄存器或定义的立即数。对于操作数可进行符号扩展和零扩展。操作数可进行符号扩展和零扩展。u处理结果除了长乘法指令为处理结果除了长乘法指令为64位之外,均为位之外,均为32位,位,存放在寄存器中。存放在寄存器中。u
46、大多数大多数ARM通用数据处理指令都有一个灵活的第二通用数据处理指令都有一个灵活的第二操作数(操作数(flexible second operand)。第二操作)。第二操作数数operand2可以是可以是 立即数形式立即数形式 或或 寄存器形式寄存器形式 。 3232位立即数位立即数 Rm,#shift uASR:算术右移。即将寄存器内容除以算术右移。即将寄存器内容除以2n。uLSR:逻辑右移。即将寄存器内容除以逻辑右移。即将寄存器内容除以2n。uLSL:逻辑左移。即将寄存器内容乘以逻辑左移。即将寄存器内容乘以2n。uROR:循环右移。循环右移。uRRX:带扩展的循环右移。将寄存器内容循环带扩
47、展的循环右移。将寄存器内容循环右移右移1位,进位标志拷贝到位位,进位标志拷贝到位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”的情况下,
48、拷贝的情况下,拷贝SPSR到到CPSR,利用这点可从异常返回。利用这点可从异常返回。u 在有寄存器控制移位的任何数据处理指令中,不能将在有寄存器控制移位的任何数据处理指令中,不能将R15作为作为Rd或任何操作数来使用。或任何操作数来使用。 指令说明:指令说明:ADD、SUB、RSB、ADC、SBC、RSC ADDR2,R1,R3SUBSR8,R6,#240RSBR4,R4,#1280ADCHIR11,R0,R3RSCLESR0,R5,R0,LSL R4RSCLESR0,R15,R0,LSL R4 例:例:ADD、SUB、RSB、ADC、SBC、RSC AND、ORR、EOR、BIC op co
49、nd S Rd, Rn, Operand2 句法:句法:u 指令用于与、或、异或、位清零等逻辑运算。指令用于与、或、异或、位清零等逻辑运算。 u BIC指令用于将指令用于将Rn中的位与中的位与Operand2值中的相应位值中的相应位的反码进行的反码进行“与与”操作。操作。u 若指定若指定S,则指令将根据结果更新标志,则指令将根据结果更新标志N和和Z;计算;计算Operand2时更新标志时更新标志C;不影响标志;不影响标志V。u 关于关于R15的使用与算术运算指令相同。的使用与算术运算指令相同。 指令说明:指令说明:AND、ORR、EOR、BIC ANDR9,R2,#0 xFF00ORREQR2
50、,R0,R5EORSR0,R0,R3,ROR R6BICNESR8,R10,R0,RRXEORSR0,R15,R3,ROR R6 例:例:AND、ORR、EOR、BICMOV、MVN op cond S Rd, Operand2 句法:句法:u 指令用于数据传送。指令用于数据传送。u MOV指令将指令将Operand2的值拷贝到的值拷贝到Rd;u MVN指令对指令对Operand2的值按位取非后,将结果拷的值按位取非后,将结果拷贝到贝到Rd。u 关于条件码标志的影响与逻辑运算指令相同。关于条件码标志的影响与逻辑运算指令相同。u关于关于R15的使用与算术运算指令相同。的使用与算术运算指令相同。
51、指令说明:指令说明:MOV、MVNMOVR5,R2MVNNER11,#0 x0F000000MOVSR0,R0,ASR R3 例:例:MOV、MVNCMP、CMN op cond S Rd, Operand2 句法:句法:u 指令用于比较操作,根据结果更新条件码标志,结指令用于比较操作,根据结果更新条件码标志,结果并不放入寄存器。果并不放入寄存器。u 其中,其中,CMP指令从指令从Rn的值中减去的值中减去Operand2的值,的值,结果丢弃;结果丢弃;CMN指令将指令将Operand2的值加到的值加到Rn的值中,的值中,结果丢弃。结果丢弃。u如果将如果将R15用作用作Rn,则使用的值是指令的地
52、址加,则使用的值是指令的地址加8。在控制寄存器移位的操作中,不能使用在控制寄存器移位的操作中,不能使用R15。 指令说明:指令说明:CMP、CMNCMPR2,R9CMNR0,#6400CMPGTR13,R7,LSL #2CMPR2,R15,ASR R0 例:例:CMP、CMNTST、TEQ op cond S Rd, Operand2 句法:句法:u 指令用于测试操作,根据结果更新条件码标志,结果指令用于测试操作,根据结果更新条件码标志,结果不放入寄存器。不放入寄存器。u 其中,其中,TST指令对指令对Rn的值与的值与Operand2的值进行按位的值进行按位“与与”操作,结果丢弃;操作,结果丢
53、弃;TEQ指令对指令对Rn的值与的值与Operand2的值进行按位的值进行按位“异或异或”操作,结果丢弃。操作,结果丢弃。u 关于条件码标志的影响与算术运算指令相同。关于条件码标志的影响与算术运算指令相同。u 关于关于R15的使用与比较指令相同。的使用与比较指令相同。 指令说明:指令说明:TST、TEQ TSTR0,#0 x3F8TEQEQR10,R9TSTNER1,R5,ASR R1TEQR15,R1,ROR R0 例:例:TST、TEQMUL、MLA MUL cond S Rd, Rm, RsMLA cond S Rd, Rm, Rs, Rn 句法:句法:u 指令用于进行乘法和乘加指令用于
54、进行乘法和乘加32位位32位运算,结果为位运算,结果为低低32位。位。u 如果指定如果指定S,则指令根据结果更新标志,则指令根据结果更新标志N和和Z;不影;不影响标志响标志V;在;在ARMv4之前版本中标志之前版本中标志C不可靠;在不可靠;在ARMv5以后版本中不影响标志以后版本中不影响标志C。u R15不能用作不能用作Rd、Rm、Rs或或Rn。Rd不能与不能与Rm相同。相同。 指令说明:指令说明:MUL、MLA MULR10,R2,R5MLAR10,R2,R1,R5MULSR0,R2,R2MULLTR2,R3,R2MLAVCSR8,R6,R3,R8MULR15,R0,R3MLAR1,R1,R
55、6 例:例:MUL、MLACLZ cond Rd, Rm 句法:句法:u 指令用于对指令用于对Rm中值的前导零的个数进行计数,中值的前导零的个数进行计数,结果放入结果放入Rd中。若中。若Rm内容为内容为0,则结果为,则结果为32;若若Rm位位31为为1,则结果为,则结果为0。u 指令不影响条件码标志。指令不影响条件码标志。u Rd不允许是不允许是R15。 指令说明:指令说明:BcondlabelBLcondlabel 句法:句法:u 指令用于分支和带链接分支的操作。指令用于分支和带链接分支的操作。u 其中,其中,B指令引起处理器转移到指令引起处理器转移到label;BL指令将指令将下一条指令的
56、地址拷贝到下一条指令的地址拷贝到R14(LR,链接寄存器),链接寄存器),并引起处理器转移到并引起处理器转移到label。 指令说明:指令说明:Bloop ABLsub 例:例:BXcondRm 句法:句法:u 指令用于实现分支,并可选地交换指令集。指令用于实现分支,并可选地交换指令集。BX指指令将引起处理器转移到令将引起处理器转移到Rm中的地址。若中的地址。若Rm的位的位0为为1,则指令集变换到,则指令集变换到Thumb指令集。指令集。 指令说明:指令说明:BXR6 例:例:BLX condRm 句法:句法:u 指令用于实现带链接分支,并可选地交换指令集。指令用于实现带链接分支,并可选地交换
57、指令集。u BLX指令具体用途有:指令具体用途有:u将下一条指令的地址拷贝到将下一条指令的地址拷贝到R14(LR,链接寄存器)中;,链接寄存器)中;u转移到转移到label或或Rm中的地址;中的地址;u切换到切换到Thumb指令集,条件是指令集,条件是Rm的位的位0为为1或者使用或者使用“BLX label”的形式。的形式。u 机器级的机器级的“BLX label”指令的转移不能超过当前指指令的转移不能超过当前指令地址的令地址的32Mb范围。范围。 指令说明:指令说明:BLX R0BLX thumbsub 例:例: ARM支持支持16个协处理器,如用于控制片上功能(如个协处理器,如用于控制片上
58、功能(如cache、MMU)的系统协处理器、浮点协处理器以及)的系统协处理器、浮点协处理器以及其它一些专用的协处理器。其它一些专用的协处理器。 每个协处理器均忽略每个协处理器均忽略ARM处理器和其它协处理器的处理器和其它协处理器的指令。指令。 如果协处理器没有接受如果协处理器没有接受ARM的协处理器指令,则的协处理器指令,则ARM将产生未定义指令中止的陷阱,以此可用来实现将产生未定义指令中止的陷阱,以此可用来实现“协处理器丢失协处理器丢失”的软件仿真。的软件仿真。 SWIcond immed_24 句法:句法:u SWI指令引起处理器指令引起处理器SWI异常,即处理器变为管异常,即处理器变为管
59、理模式,理模式,CPSR内容保存到管理模式的内容保存到管理模式的SPSR中,执中,执行转移到行转移到SWI向量。这条指令不影响条件码标志。向量。这条指令不影响条件码标志。 指令说明:指令说明:软件中断指令软件中断指令SWI BKPTimmed_16 句法:句法:u BKPT指令引起处理器进入调试模式,调试工具指令引起处理器进入调试模式,调试工具可利用这条指令到达特定的地址时查询系统状态。可利用这条指令到达特定的地址时查询系统状态。 指令说明:指令说明:断点指令断点指令BKPT MRS cond Rd, psrMSR cond psr_fields, #immed_8rMSR cond psr_
60、fields, Rm 句法:句法:u PSR操作指令操作指令MRS和和MSR配合使用,可用来更新配合使用,可用来更新PSR的读修改写序列的一部分,如改变处理器的读修改写序列的一部分,如改变处理器模式或清除标志模式或清除标志Q。 指令说明:指令说明:PSR操作指令操作指令MRS、MSR ADR cond register, exprADRL cond register, exprLDR cond register, =expr | label-expr 句法:句法:u ADR、ADRL和和LDR伪指令都是将一个地址加载伪指令都是将一个地址加载到一个寄存器中。到一个寄存器中。 指令说明:指令说明:startMOVR0,#10ADRR4,start;= S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年农村父母赠与子女房产合同3篇
- 离婚协议书:离婚后子女抚养权及探望权协议
- 农村留守儿童监护责任共同承担协议书
- 离婚协议及子女抚养权确定与借款清偿明确合同
- 离婚抚养费协议模板定制合同
- 离婚抚养权分配与子女监护、探望、教育费用协议书
- 工业园区租赁及综合物业维护管理合同
- 男方赌博成瘾离婚财产分割及子女抚养权协议
- 企业税务筹划与税务筹划咨询与实施顾问服务合同
- 离婚后共有房产评估、分割及过渡安置协议
- 【音乐】七年级开学第一课音乐课件
- 防火防烟分区检查
- 人工智能在智能体育中的应用
- 服装季度分析报告
- 农产品营销的渠道策略讲义
- 工程总承包(EPC)模式市场应用现状
- 食品安全管理制度小卖部
- 初中语文阅读ppt课件ppt
- 学生上下学交通方式台账
- 建筑垃圾处理及清运方案
- 路边停车经营管理方案
评论
0/150
提交评论