




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式系统 第二章 嵌入式处理器下第1页,共167页,2022年,5月20日,19点22分,星期三第二章 嵌入式处理器2.1 引言 2.2 嵌入式处理器概述 2.3ARM处理器基础 2.5ARM程序设计基础2.4ARM指令系统第2页,共167页,2022年,5月20日,19点22分,星期三2.4 ARM指令系统 2.4.1 ARM编程模型 2.4.2 ARM寻址方式 2.4.3 ARM指令集 2.4.4 Thumb指令集第3页,共167页,2022年,5月20日,19点22分,星期三2.4.1 ARM编程模型2.4 ARM指令系统 流水线 数据类型 处理器模式 处理器工作状态 寄存器组织 异常
2、 存储器和存储器映射I/O 第4页,共167页,2022年,5月20日,19点22分,星期三1. 流水线 2.4.1 ARM编程模型 流水线技术是现代微处理器普遍采用的一种技术,它可以使得几条指令并行执行,因此可以大大提高处理器的运行效率。 第5页,共167页,2022年,5月20日,19点22分,星期三1. 流水线 2.4.1 ARM编程模型从程序存储器中读取指令,放入流水线中 操作码和操作数被译码,决定执行什么功能,为下一个时钟周期准备数据路径所需要的控制信号执行已译码的指令取 指译 码执 行ARM7的3级流水线: 第6页,共167页,2022年,5月20日,19点22分,星期三1. 流水
3、线 流水线能够正常工作的条件是在任意时刻,每一级所使用的硬件必须能够独立操作,不能多级同时占用同一硬件资源。 在正常情况下,每条指令都被划分成这样3个时钟周期来完成,即指令执行时间(Latency)是3周期。 流水线的执行使得程序计数器PC必须在当前指令取指前计数。对于ARM处理器的3级流水线,以当前PC取指后,PC值会增加为PC4。 2.4.1 ARM编程模型第7页,共167页,2022年,5月20日,19点22分,星期三1. 流水线图2-5 ARM单周期指令的多级流水线操作2.4.1 ARM编程模型第8页,共167页,2022年,5月20日,19点22分,星期三1. 流水线图2-6 ARM
4、多周期指令的多级流水线操作 2.4.1 ARM编程模型第9页,共167页,2022年,5月20日,19点22分,星期三1. 流水线图2-7 ARM分支指令的流水线操作 2.4.1 ARM编程模型第10页,共167页,2022年,5月20日,19点22分,星期三2. 数据类型 ARM处理器支持以下数据类型:2.4.1 ARM编程模型 Byte字节,8位; Halfword半字,16位(半字必须与2字节边界对准); Word字,32位(字必须与4字节边界对准)。第11页,共167页,2022年,5月20日,19点22分,星期三2. 数据类型 2.4.1 ARM编程模型图2-8 ARM数据类型存储图
5、 第12页,共167页,2022年,5月20日,19点22分,星期三3. 处理器模式 ARM体系结构支持7种处理器模式 :2.4.1 ARM编程模型处理器模式说 明用户 usr程序正常执行模式FIQ fiq支持高速数据传输或通道处理IRQ irq通用中断处理管理 svc操作系统保护模式中止 abt虚拟存储器或存储器保护未定义 und支持硬件协处理器的软件仿真系统 sys运行特权操作系统任务第13页,共167页,2022年,5月20日,19点22分,星期三4. 处理器工作状态 ARM处理器具有特殊的两种工作状态:2.4.1 ARM编程模型 ARM状态:32位,执行字对准的ARM指令; Thumb
6、状态:16位,执行半字对准的Thumb指令。 ARM处理器的操作状态可以通过BX指令(分支和交换指令)在ARM状态和Thumb状态之间切换。例:从ARM状态切换到Thumb状态: LDR R0,=Label+1 BX R0从Thumb状态切换到ARM状态: LDR R0,=Label BX R0第14页,共167页,2022年,5月20日,19点22分,星期三5. 寄存器组织 ARM处理器共有37个寄存器: 2.4.1 ARM编程模型 31个通用寄存器:32位,含程序计数器PC; 6个状态寄存器:32位,只使用了其中的12位。 当编写用户程序时,37个寄存器中仅有15个通用寄存器r0r14、程
7、序计数器PC(r15)和当前程序状态寄存器CPSR需要考虑。其余寄存器仅用于系统级编程和异常处理(如中断)。 第15页,共167页,2022年,5月20日,19点22分,星期三ARM状态下寄存器组织第16页,共167页,2022年,5月20日,19点22分,星期三5. 寄存器组织-不分组寄存器r0r7 不分组意味着在所有处理器模式下,r0r7都可被同样访问,没有体系结构所隐含的特殊用途。 2.4.1 ARM编程模型第17页,共167页,2022年,5月20日,19点22分,星期三5. 寄存器组织-分组寄存器r8r14 分组意味着r8r14的访问与当前处理器的模式相关。 如果要访问r8r14,而
8、不依赖于当前处理器的模式,就必须使用规定的寄存器名称。 名称的形式为:2.4.1 ARM编程模型 r8_r14_第18页,共167页,2022年,5月20日,19点22分,星期三5. 寄存器组织-分组寄存器r8r14 r8r12各有两组物理寄存器:一组为FIQ模式,另一组为FIQ以外的模式。 寄存器r8r12没有指定特殊用途,而使用r8_fiqr12_fiq则允许快速中断。 2.4.1 ARM编程模型第19页,共167页,2022年,5月20日,19点22分,星期三5. 寄存器组织-分组寄存器r8r14 寄存器r13和r14的用途比较特殊: 2.4.1 ARM编程模型 r13通常用作堆栈指针S
9、P,被初始化成指向异常模式分配的堆栈。 r14通常用作子程序链接寄存器LR。处理异常时,在程序入口处将异常处理程序用到的其它寄存器的值压入堆栈,返回时重新将这些值加载到寄存器中。当执行分支指令BL时,r15的内容拷贝到r14中,从而成为子程序调用后的返回地址第20页,共167页,2022年,5月20日,19点22分,星期三5. 寄存器组织-程序计数器r15 寄存器r15通常被用作程序计数器PC。 在ARM状态下,PC的值保存在位31:2,而位1:0为0;在Thumb状态下,PC的值保存在位31:1,而位0为0。2.4.1 ARM编程模型第21页,共167页,2022年,5月20日,19点22分
10、,星期三5. 寄存器组织-当前程序状态寄存器CPSR CPSR和SPSR具有相同的格式 2.4.1 ARM编程模型第22页,共167页,2022年,5月20日,19点22分,星期三标志位含 义N当用两个补码表示的带符号数进行运算时,N=1 表示运算的结果为负数;N=0 表示运算的结果为正数或零;ZZ=1 表示运算的结果为零;Z=0表示运算的结果为非零;C可以有4种方法设置C的值: 加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。 对于包含移位操作的非加/减运算指
11、令,C为移出值的最后一位。 对于其他的非加/减运算指令,C的值通常不改变。V可以有2种方法设置V的值: 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。 对于其他的非加/减运算指令,V的值通常不改变。Q在ARM v5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。在其他版本的处理器中,Q标志位无定义。第23页,共167页,2022年,5月20日,19点22分,星期三5. 寄存器组织-Thumb状态的寄存器集 2.4.1 ARM编程模型Thumb状态下寄存器组织 第24页,共167页,2022年,5月20日,19点22分
12、,星期三5. 寄存器组织-Thumb状态的寄存器集 2.4.1 ARM编程模型Thumb状态寄存器到ARM寄存器的映射 第25页,共167页,2022年,5月20日,19点22分,星期三6. 异常 异常(exception)是指由内部或外部源产生从而使处理器需要处理的一个事件。 2.4.1 ARM编程模型 例如,外部中断或试图实行未定义的指令都会引起异常的发生。 处理异常之前,处理器必须保存当前的状态,以便在异常处理完成后,能够使原来的出现重新执行。 第26页,共167页,2022年,5月20日,19点22分,星期三6. 异常 ARM支持7种类型的异常。对于每种异常,处理器将强制从异常对应的某
13、个固定地址开始执行程序。这些固定地址称为异常向量。 2.4.1 ARM编程模型 多个异常可能会同时发生,因此在ARM中就通过给各个异常赋予不同的优先级来确定处理异常的顺序。第27页,共167页,2022年,5月20日,19点22分,星期三6. 异常 优先级按照从高到低的顺序排列如下: 2.4.1 ARM编程模型复位数据异常中止FIQIRQ预取指异常中止SWI、未定义指令(这两种异常的指令编码互斥,不可能同时发生) 第28页,共167页,2022年,5月20日,19点22分,星期三异常类型具体含义复位当处理器的复位电平有效时产生复位异常,程序跳转到复位异常处理程序处执行。未定义指令当ARM处理器
14、或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。软件中断该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。指令预取中止若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。数据中止若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。IRQ(外部中断请求)当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。FIQ(快速中断请求)当处理器的快速
15、中断请求引脚有效且CPSR中的F位为0时,产生FIQ异常。第29页,共167页,2022年,5月20日,19点22分,星期三6. 异常 进入异常的操作:2.4.1 ARM编程模型在相应的链接寄存器LR (r14)中保存下一条指令的地址将CPSR复制到相应的SPSR中强制使CPSR模式位置成对应异常类型的值强制使程序计数器指向相应异常向量,取下一条指令第30页,共167页,2022年,5月20日,19点22分,星期三例子: 用户模式到 FIQ模式*spsr_fiqcpsrr7r4r5r2r1r0r3r6r15 (pc)r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_f
16、iqr8_fiqr14 (lr)r13 (sp)r12r10r11r9r8用户模式 CPSR 复制到 FIQ 模式 SPSRcpsrr15 (pc)r14 (lr)r13 (sp)r12r10r11r9r8r7r4r5r2r1r0r3r6r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_fiqr8_fiq返回一个从用户模式计算的地址,PC值存储在FIQ模式Registers in useRegisters in use异常用户模式FIQ 模式spsr_fiq第31页,共167页,2022年,5月20日,19点22分,星期三7. 存储器和存储器映射I/O 与单片机等简单
17、系统相比,现在一些复杂的嵌入式系统中,存储系统的功能更加强大,可能包含有多种现代计算机存储技术,如Cache和Write Buffer、MMU、存储保护机制、快速上下文切换等。 基于ARM内核的嵌入式系统可能包含Flash、ROM、SRAM、SDRAM等多种类型的存储器,不同类型的存储器存取速度和数据宽度等都不尽相同。2.4.1 ARM编程模型第32页,共167页,2022年,5月20日,19点22分,星期三7. 存储器和存储器映射I/O 存储系统的设计可以是多种多样的,但是应当遵循一定的规则,否则可能会引起一些不必要的麻烦。2.4.1 ARM编程模型例如: 可能使存储系统的实现比较困难; 可
18、能导致向其它ARM处理器的移植出现麻烦; 可能引起一些标准软件(如编译器)的不适应。 基于系统设计和编程的考虑,关于ARM存储系统一般只需涉及地址空间、存储器格式、存储器访问对准以及存储器映射I/O等方面的问题。 第33页,共167页,2022年,5月20日,19点22分,星期三7. 存储器和存储器映射I/O-地址空间 ARM体系结构使用232个8位字节的单一、线性地址空间,字节地址的范围为02321; 也可以将地址空间看作由230个32位的字组成,字地址可被4整除,且按字对准,例如以A为字对准地址的字地址由A、A1、A2、A3共4个字节组成; 在ARM体系结构v4以上版本中,也可以将地址空间
19、看作由231个16位的半字组成,半字地址可被2整除,且按半字对准,例如以A为字对准地址的半字地址由A、A1共2个字节组成。2.4.1 ARM编程模型第34页,共167页,2022年,5月20日,19点22分,星期三7. 存储器和存储器映射I/O-存储器格式 存储器格式是指字、半字、字节在存储器中存放的方式,也反映了存储器中字、半字、字节之间的映射关系。 存储器格式包括小端和大端两种格式。 2.4.1 ARM编程模型第35页,共167页,2022年,5月20日,19点22分,星期三7. 存储器和存储器映射I/O-存储器格式 2.4.1 ARM编程模型大、小端存储格式对程序的影响 第36页,共16
20、7页,2022年,5月20日,19点22分,星期三7. 存储器和存储器映射I/O-存储器访问对准 对于非对准的取指,在ARM工作状态下,未对准的地址写入R15后,结果将不可预知或忽略地址位1:0;在Thumb状态下,未对准的地址写入R15后,则通常忽略地址位0。 对于非对准的数据访问,则体系结构可能定义成以下行为之一:2.4.1 ARM编程模型 不可预知; 忽略使访问非对准的低地址位; 忽略使访问非对准的低地址位,但使用这些位控制加载数据的循环移位(适用于LDR和SWP指令)。 第37页,共167页,2022年,5月20日,19点22分,星期三7. 存储器和存储器映射I/O-存储器映射I/O
21、ARM系统实现I/O功能的标准方法是使用存储器映射I/O。 这种方法使用特定的存储器地址,对这些地址加载和存储,即可完成I/O操作。 通常,对存储器映射I/O地址加载对应输入,对对存储器映射I/O地址存储对应输出。 另外,加载和存储也可执行控制功能,替代或附加到正常的I/O操作上。 2.4.1 ARM编程模型第38页,共167页,2022年,5月20日,19点22分,星期三2.4 ARM指令系统 2.4.1 ARM编程模型 2.4.2 ARM寻址方式 2.4.3 ARM指令集 2.4.4 Thumb指令集第39页,共167页,2022年,5月20日,19点22分,星期三 寻址方式是指根据指令给
22、出的地址码寻找真实操作数地址的方式。 寻址方式的多样化一方面出于编程的需要,另一方面可以增强程序设计的灵活性。2.4.2 ARM寻址方式2.4 ARM指令系统 第40页,共167页,2022年,5月20日,19点22分,星期三2.4.2 ARM寻址方式2.4 ARM指令系统 寄存器寻址 立即寻址 寄存器移位寻址 寄存器间接寻址 基址寻址 多寄存器寻址 堆栈寻址 块拷贝寻址 相对寻址 第41页,共167页,2022年,5月20日,19点22分,星期三1. 寄存器寻址 指令地址码给出寄存器的编号,寄存器中的内容为操作数。 2.4.2 ARM寻址方式例如: ADD R0,R1,R2;R0R1+R2
23、写操作数的顺序为:第一个寄存器R0为结果寄存器,第二个寄存器R1为第一操作数寄存器,第三个寄存器R2为第二操作数寄存器。 注意第42页,共167页,2022年,5月20日,19点22分,星期三2. 立即寻址 指令操作码后的地址码是立即数,即操作数本身。 2.4.2 ARM寻址方式例如: ADD R3,R3,#1;R3R3+1 AND R8,R7,#&FF;R8R77:0 立即数的表示以“#”为前缀,十六进制的立即数在“#”后面加“&”符号。 注意第43页,共167页,2022年,5月20日,19点22分,星期三3. 寄存器移位寻址 寄存器移位寻址是ARM指令集特有的寻址方式。第2个操作数与第1
24、个操作数结合之前,选择进行移位操作。 2.4.2 ARM寻址方式例如: ADD R3,R2,R1,LSL #3;R3R2+8R1 第44页,共167页,2022年,5月20日,19点22分,星期三3. 寄存器移位寻址 可采取的移位操作包括:2.4.2 ARM寻址方式 LSL:逻辑左移(Logical Shift Left)。寄存器中字的低端空出的位补0。 LSR:逻辑右移(Logical Shift Right)。寄存器中字的高端空出的位补0。 ASR:算术右移(Arithmetic Shift Right)。算术移位的对象是带符号数。在移位过程中必须保持操作数的符号不变。若源操作数为正数,则
25、字的高端空出的位补0;若源操作数为负数,则字的高端空出的位补1。 ROR:循环右移(ROtate Right)。从字的最低端移出的位填入字的高端空出的位。 RRX:扩展为1的循环右移(Rotate Right eXtended by 1 place)。操作数右移1位,空位(位31)用原C标志填充。第45页,共167页,2022年,5月20日,19点22分,星期三3. 寄存器移位寻址 2.4.2 ARM寻址方式移位操作过程第46页,共167页,2022年,5月20日,19点22分,星期三4. 寄存器间接寻址 指令地址码给出寄存器的编号,寄存器为地址指针,存放操作数的有效地址。 2.4.2 ARM
26、寻址方式例如:LDR R0,R1;R0R1STRR0,R1;R0R1 第47页,共167页,2022年,5月20日,19点22分,星期三5. 基址寻址 基址寻址是将基址寄存器的内容与指令中给出的位移量相加,形成操作数有效地址。 基址寻址用于访问基址附近的存储单元。 包括基址加偏移量寻址和基址加索引寻址,可以将寄存器间接寻址看作是位移量为0的基址加偏移量寻址。 2.4.2 ARM寻址方式第48页,共167页,2022年,5月20日,19点22分,星期三5. 基址寻址-基址加偏移量寻址 基址加偏移量寻址中的偏移量最大为4KB,可分为前索引寻址和后索引寻址。 2.4.2 ARM寻址方式前索引寻址举例
27、:LDRR0,R1,#4;R0R1+4 第49页,共167页,2022年,5月20日,19点22分,星期三5. 基址寻址-基址加偏移量寻址2.4.2 ARM寻址方式例:LDRR0,R1,#4!;R0R1;R1R1+4 后索引寻址举例:LDR R0,R1,#4;R0R1;R1R1+4这种改变基址寄存器指向下一个传送的地址对数据块传送很有用,还可以采用带自动索引的前索引寻址实现。注意第50页,共167页,2022年,5月20日,19点22分,星期三5. 基址寻址-基址加索引寻址 基址加索引寻址是指令指定一个基址寄存器,再指定另一个寄存器(称为索引),其值作为位移加到基址上形成存储器地址。 2.4.
28、2 ARM寻址方式例:LDR R0,R1,R2;R0R1+R2 第51页,共167页,2022年,5月20日,19点22分,星期三6. 多寄存器寻址 多寄存器寻址是指一次可以传动多个寄存器的值,允许一条指令可以传送16个寄存器的任何子集,包括16个寄存器。 2.4.2 ARM寻址方式例:LDMIAR1,R0,R2,R5;R0R1;R2R1+4;R5R1+8由于传送的数据总是32位的字,因此基址寄存器R1应当字对准。注意第52页,共167页,2022年,5月20日,19点22分,星期三7. 堆栈寻址 堆栈是一种按照特定顺序进行存取的存储区。这种特定的顺序是指“后进先出”(LIFO)或“先进后出”
29、(FILO)。 使用堆栈时需要使用一个专门的寄存器作为堆栈指针,栈指针所指定的存储单元就是堆栈的栈顶。 如果堆栈指针指向最后压入堆栈的有效数据项,就称为满堆栈(full stack);如果堆栈指针指向下一个数据项放入的空位置,就称为空堆栈(empty stack)。2.4.2 ARM寻址方式第53页,共167页,2022年,5月20日,19点22分,星期三7. 堆栈寻址 另外,根据堆栈存储区地址增长的方向,可将堆栈分为递增堆栈(ascending stack)和递减堆栈(descending stack)。 以上表示递增、递减、满、空的堆栈的各种组合就产生了4种堆栈类型。 ARM支持所有这4种
30、类型的堆栈,即满递增、空递增、满递减、空递减。 ARM指令使用push向堆栈写数据,称为进栈;使用pop从堆栈读数据,称为出栈。 2.4.2 ARM寻址方式堆栈指针指向最后压入的数据且由低地址向高地址生成堆栈指针指向最后压入的数据且由高地址向低地址生成堆栈指针指向下一个将要放入数据的空位置且由低地址向高地址生成堆栈指针指向下一个将要放入数据的空位置且由高地址向低地址生成第54页,共167页,2022年,5月20日,19点22分,星期三8. 块拷贝寻址 从堆栈的角度来看,多寄存器传送指令是把一块数据从存储器的某一个位置拷贝到另一位置。 从块拷贝的角度来看,指令还要基于数据存储在基址寄存器地址之上
31、还是之下,地址在存储第一个值之前或之后增加或减少。这两种角度的映射均取决于执行加载操作还是存储操作。 2.4.2 ARM寻址方式第55页,共167页,2022年,5月20日,19点22分,星期三8. 块拷贝寻址 2.4.2 ARM寻址方式向上生长向下生长满空满空增 加之前STMIBSTMFALDMIBLDMED之后STMIASTMEALDMIALDMFD减 少之前LDMDBLDMEASTMDBSTMFD之后LDMDALDMFASTMDASTMED表2-4 多寄存器加载和存储指令映射 第56页,共167页,2022年,5月20日,19点22分,星期三8. 块拷贝寻址 2.4.2 ARM寻址方式例
32、如:LDMIAR0!,R2-R9;将数据加载到R2R9STMIAR1,R2-R9;将数据存入存储器执行指令后,由于引用自动索引“!”,R0的值共增加32,而R1不变。 注意第57页,共167页,2022年,5月20日,19点22分,星期三8. 块拷贝寻址 2.4.2 ARM寻址方式多寄存器指令的后缀含义如下:I:IncrementD:Decrement or Descending stackA:After or Ascending stackB:BeforeF:FullE:Empty例如“FD”即表明是满递减堆栈寻址方式(full descending stack)。 第58页,共167页,2
33、022年,5月20日,19点22分,星期三9. 相对寻址 可以将相对寻址看作是以程序计数器PC为基址的一种基址寻址方式。 指令的地址码作为位移量,与PC相加得到操作数的有效地址。 位移量指出了操作数与当前指令之间的相对位置。 2.4.2 ARM寻址方式例:BL SUBR;转移到SUBR;返回到此SUBR;子程序入口地址MOV PC,R14;返回第59页,共167页,2022年,5月20日,19点22分,星期三2.4 ARM指令系统 2.4.1 ARM编程模型 2.4.2 ARM寻址方式 2.4.3 ARM指令集 2.4.4 Thumb指令集第60页,共167页,2022年,5月20日,19点2
34、2分,星期三2.4 ARM指令系统 ARM指令集编码 条件执行 ARM指令格式 ARM存储器访问指令 ARM数据处理指令 ARM分支指令 ARM协处理器指令 ARM杂项指令 ARM伪指令 2.4.3 ARM指令集第61页,共167页,2022年,5月20日,19点22分,星期三1. ARM指令集编码 ARM指令集采用32位二进制编码方式,大部分指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。 每条ARM指令都具有不同的编码方式,与不同的指令功能相对应。 2.4.3 ARM指令集第62页,共167页,2022年,5月20日,19点22
35、分,星期三1. ARM指令集编码 2.4.3 ARM指令集ARM指令集编码第63页,共167页,2022年,5月20日,19点22分,星期三2. 条件执行 条件执行是指只有在当前程序状态寄存器CPSR中的条件码标志满足指定的条件时,带条件码的指令才能执行。 条件转移是绝大多数指令集的标准特征,但ARM指令集将条件执行扩展到所有指令,包括监控调用和协处理器指令。 2.4.3 ARM指令集第64页,共167页,2022年,5月20日,19点22分,星期三2. 条件执行2.4.3 ARM指令集图2-17 ARM的条件代码域第65页,共167页,2022年,5月20日,19点22分,星期三操作码31:
36、28助记符后缀标志含义0000EQZ置位相等0001NEZ清零不等0010CS/HSC置位大于或等于(无符号=)0011CC/LOC清零小于(无符号)1001LSC清零或Z置位小于或等于(无符号=1011LTN和V不同带符号1101LEZ置位或N和V不同带符号=1110AL任何总是(缺省)1111NV无从不(不要使用)第66页,共167页,2022年,5月20日,19点22分,星期三2. 条件执行2.4.3 ARM指令集对于条件执行,需要说明的有以下两点: 注意几乎所有的ARM数据处理指令都可以根据执行结果来选择是否更新条件码标志。当指令中包含后缀“S”时,指令将更新条件码标志。可以根据另一条
37、指令设置的标志,有条件地执行某条指令。第67页,共167页,2022年,5月20日,19点22分,星期三3. ARM指令格式 ARM指令集是Load/Store型,只能通过Load/Store指令实现对存储器的访问,其它类型的指令都基于寄存器完成。2.4.3 ARM指令集第68页,共167页,2022年,5月20日,19点22分,星期三操作码;指令助记符,如ADD、LDR等可选的条件码;执行条件,如EQ、NE等可选后缀;若指定S,则根据指令执行结果更新CPSR中的条件码目标寄存器存放第一操作数的寄存器第二操作数例:LDR R0, R1 BEQDATAEVENADDSR2,R1,#1SUBNES
38、 R2,R1,#0 x20 ARM指令使用的基本格式如下所示: S, , 3. ARM指令格式 2.4.3 ARM指令集第69页,共167页,2022年,5月20日,19点22分,星期三4. ARM存储器访问指令-LDR、STR LDR和STR为单一数据传送指令,可传送字和无符号字节、半字和带符号字节、双字。 2.4.3 ARM指令集第70页,共167页,2022年,5月20日,19点22分,星期三(1)字和无符号字节 op cond B T Rd, Rn ;零偏移 op cond B Rd, Rn, Flexoffset ! ;前索引偏移 op cond B Rd, label ;程序相对偏
39、移 op cond B T Rd, Rn ,Flexoffset ;后索引偏移4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 句法:第71页,共167页,2022年,5月20日,19点22分,星期三(1)字和无符号字节 指令用于加载或存储寄存器32位字或8位无符号字节。 对于零偏移形式,Rn的值作为传送数据的地址。 对于前索引偏移形式,在传送数据之前,将偏移量加到Rn中,结果作为传送数据的存储器地址。若使用“!”,则结果写回到Rn,且Rn不允许是R15。 对于程序相对偏移形式,汇编器由PC计算偏移量,并将PC作为Rn生成前索引指令。不能使用后缀“!”。 对于后索引形式,R
40、n的值作为传送数据的存储器地址。数据传送之后,将偏移量加到Rn中,结果写回到Rn。Rn不允许是R15。4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 指令说明:第72页,共167页,2022年,5月20日,19点22分,星期三(1)字和无符号字节 LDR R8,R10LDRNE R2,R5,#960!STR R2,R9,#CONSTRB R0, R3,-R8,ASR #24. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 例:第73页,共167页,2022年,5月20日,19点22分,星期三(2)半字和带符号字节 op cond type Rd, Rn;
41、零偏移 op cond type Rd, Rn, offset !;前索引偏移 op cond type Rd, label;程序相对偏移 op cond type Rd, Rn, offset;后索引偏移4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 句法:第74页,共167页,2022年,5月20日,19点22分,星期三(2)半字和带符号字节 指令用于加载寄存器16位半字或带符号8位字节,存储寄存器16位半字。 带符号加载是指带符号扩展到32位。 无符号半字加载是指零扩展到32位。 半字传送的地址必须是偶数,即按照半字对准。 不能将半字或字节加载到R15。 。4. A
42、RM存储器访问指令-LDR、STR 2.4.3 ARM指令集 指令说明:第75页,共167页,2022年,5月20日,19点22分,星期三(2)字和无符号字节 LDREQSHR11,R6LDRHR1,R0,#12STRHR4,R0,R1!LDRSBR1,R6,R3,LSL #4 4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 例:第76页,共167页,2022年,5月20日,19点22分,星期三(3)双字 op cond D Rd, Rn;零偏移 op cond D Rd, Rn, offset !;前索引偏移 op cond D Rd, label;程序相对偏移 op
43、cond D Rd, Rn, offset;后索引偏移4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 句法:第77页,共167页,2022年,5月20日,19点22分,星期三(3)双字 指令用于加载或存储两个相邻寄存器64位双字。 对于双字传送,地址必须是8的倍数。 4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 指令说明:第78页,共167页,2022年,5月20日,19点22分,星期三(3)双字 LDRDR6,R11LDRDR1,R6STRDR4,R9,#24STRDR14,R9,#24STRDR2,R3,R6 4. ARM存储器访问指令-LDR
44、、STR 2.4.3 ARM指令集 例:第79页,共167页,2022年,5月20日,19点22分,星期三op cond mode Rn !, reglist 4. ARM存储器访问指令-LDM、STM 2.4.3 ARM指令集 句法:第80页,共167页,2022年,5月20日,19点22分,星期三 指令用于加载或存储多个寄存器,可传送R0R15的任何组合。 指令忽略地址的位1:0。 到R15的加载将引起处理器转移到加载地址处的指令 如果Rn包含在寄存器列表中,且用“!”表明要写回,则若op是STM,且Rn是寄存器列表中数字最小的寄存器,则Rn的初值被保存。否则,Rn的加载和存储值不可预知。
45、 4. ARM存储器访问指令-LDM、STM 2.4.3 ARM指令集 指令说明:第81页,共167页,2022年,5月20日,19点22分,星期三LDMIAR8,R0,R2,R9STMDBR1!, R3-R6,R11,R12STMFDR13!,R0,R4-R7,LRLDMFDR13!,R0,R4-R7,PCSTMIAR5!,R5,R4,R9LDMDAR2, 4. ARM存储器访问指令-LDM、STM 2.4.3 ARM指令集 例:第82页,共167页,2022年,5月20日,19点22分,星期三PLD RnFlexoffset 4. ARM存储器访问指令-PLD 2.4.3 ARM指令集 句
46、法: 指令用于Cache预加载,提示存储系统从后面的几条指令所指定的存储器地址加载,用这种方法可以加速以后的存储器访问。 指令没有地址的对准限制。 指令说明:第83页,共167页,2022年,5月20日,19点22分,星期三4. ARM存储器访问指令-PLD2.4.3 ARM指令集PLDR2PLDR0,#CON;CON范围为4KB 例:第84页,共167页,2022年,5月20日,19点22分,星期三4. ARM存储器访问指令-SWP 2.4.3 ARM指令集SWP cond B Rd, Rm, Rn 句法: 指令用于在寄存器和存储器之间进行数据交换,可以使用SWP来实现信号量。对于非字对准的
47、处理与LDR、STR指令中的处理方法相同。 指令说明: 例:SWPBR1,R1,R0;交换字节第85页,共167页,2022年,5月20日,19点22分,星期三5. ARM数据处理指令 ARM数据处理指令可以完成的功能包括:2.4.3 ARM指令集数据传送算术运算逻辑运算比较测试乘法 第86页,共167页,2022年,5月20日,19点22分,星期三5. ARM数据处理指令 ARM数据处理指令的特点 2.4.3 ARM指令集操作数为32位,来自寄存器或定义的立即数。对于操作数可进行符号扩展和零扩展。处理结果除了长乘法指令为64位之外,均为32位,存放在寄存器中。大多数ARM通用数据处理指令都有
48、一个灵活的第二操作数(flexible second operand)。第二操作数operand2可以是 立即数形式 或 寄存器形式 。 32位立即数 Rm,#shift 第87页,共167页,2022年,5月20日,19点22分,星期三5. ARM数据处理指令-移位操作2.4.3 ARM指令集ASR:算术右移。即将寄存器内容除以2n。LSR:逻辑右移。即将寄存器内容除以2n。LSL:逻辑左移。即将寄存器内容乘以2n。ROR:循环右移。RRX:带扩展的循环右移。将寄存器内容循环右移1位,进位标志拷贝到位31。第88页,共167页,2022年,5月20日,19点22分,星期三5. ARM数据处理
49、指令-移位操作2.4.3 ARM指令集图2-18 移位操作过程 第89页,共167页,2022年,5月20日,19点22分,星期三ADD、SUB、RSB、ADC、SBC、RSC op cond S Rd, Rn, Operand25. ARM数据处理指令-算术运算指令 2.4.3 ARM指令集 句法:第90页,共167页,2022年,5月20日,19点22分,星期三 指令用于加、减、反减等算术运算,包括带进位的算术运算。 算术运算中如果使用R15作为Rn,则其值为指令的地址加8。如果使用R15作为Rd,则执行转移到结果相应的地址;或者在使用“S”的情况下,拷贝SPSR到CPSR,利用这点可从异
50、常返回。 在有寄存器控制移位的任何数据处理指令中,不能将R15作为Rd或任何操作数来使用。5. ARM数据处理指令-算术运算指令2.4.3 ARM指令集 指令说明:ADD、SUB、RSB、ADC、SBC、RSC 第91页,共167页,2022年,5月20日,19点22分,星期三ADDR2,R1,R3SUBSR8,R6,#240RSBR4,R4,#1280ADCHIR11,R0,R3RSCLESR0,R5,R0,LSL R4RSCLESR0,R15,R0,LSL R4 5. ARM数据处理指令-算术运算指令2.4.3 ARM指令集 例:ADD、SUB、RSB、ADC、SBC、RSC 第92页,共
51、167页,2022年,5月20日,19点22分,星期三AND、ORR、EOR、BIC op cond S Rd, Rn, Operand2 5. ARM数据处理指令逻辑运算指令 2.4.3 ARM指令集 句法:第93页,共167页,2022年,5月20日,19点22分,星期三 妈妈新开了个淘宝店,欢迎前来捧场 妈妈的淘宝点开了快半年了,主要卖的是毛绒玩具、坐垫、抱枕之类的,但生意一直不是很好,感觉妈妈还是很用心的,花了不少功夫,但是就是没有人气,所以我也来出自己的一份力,帮忙宣传一下。 并且妈妈总是去五亭龙挑最好的玩具整理、发货,质量绝对有保证。 另外我家就在扬州五亭龙玩具城旁边,货源丰富,质
52、量可靠,价格便宜。 欢迎大家来逛逛【扬州五亭龙玩具总动员】个人小广告:第94页,共167页,2022年,5月20日,19点22分,星期三 指令用于与、或、异或、位清零等逻辑运算。 BIC指令用于将Rn中的位与Operand2值中的相应位的反码进行“与”操作。 若指定S,则指令将根据结果更新标志N和Z;计算Operand2时更新标志C;不影响标志V。 关于R15的使用与算术运算指令相同。 5. ARM数据处理指令-逻辑运算指令2.4.3 ARM指令集 指令说明:AND、ORR、EOR、BIC 第95页,共167页,2022年,5月20日,19点22分,星期三ANDR9,R2,#0 xFF00OR
53、REQR2,R0,R5EORSR0,R0,R3,ROR R6BICNESR8,R10,R0,RRXEORSR0,R15,R3,ROR R6 5. ARM数据处理指令-逻辑运算指令2.4.3 ARM指令集 例:AND、ORR、EOR、BIC第96页,共167页,2022年,5月20日,19点22分,星期三MOV、MVN op cond S Rd, Operand2 5. ARM数据处理指令数据传送指令 2.4.3 ARM指令集 句法:第97页,共167页,2022年,5月20日,19点22分,星期三 指令用于数据传送。 MOV指令将Operand2的值拷贝到Rd; MVN指令对Operand2的
54、值按位取非后,将结果拷贝到Rd。 关于条件码标志的影响与逻辑运算指令相同。关于R15的使用与算术运算指令相同。 5. ARM数据处理指令-数据传送指令2.4.3 ARM指令集 指令说明:MOV、MVN第98页,共167页,2022年,5月20日,19点22分,星期三MOVR5,R2MVNNER11,#0 x0F000000MOVSR0,R0,ASR R3 5. ARM数据处理指令-数据传送指令2.4.3 ARM指令集 例:MOV、MVN第99页,共167页,2022年,5月20日,19点22分,星期三CMP、CMN op cond S Rd, Operand2 5. ARM数据处理指令-比较指
55、令 2.4.3 ARM指令集 句法:第100页,共167页,2022年,5月20日,19点22分,星期三 指令用于比较操作,根据结果更新条件码标志,结果并不放入寄存器。 其中,CMP指令从Rn的值中减去Operand2的值,结果丢弃;CMN指令将Operand2的值加到Rn的值中,结果丢弃。如果将R15用作Rn,则使用的值是指令的地址加8。在控制寄存器移位的操作中,不能使用R15。5. ARM数据处理指令-比较指令2.4.3 ARM指令集 指令说明:CMP、CMN第101页,共167页,2022年,5月20日,19点22分,星期三CMPR2,R9CMNR0,#6400CMPGTR13,R7,L
56、SL #2CMPR2,R15,ASR R0 5. ARM数据处理指令-比较指令2.4.3 ARM指令集 例:CMP、CMN第102页,共167页,2022年,5月20日,19点22分,星期三TST、TEQ op cond S Rd, Operand2 5. ARM数据处理指令-测试指令 2.4.3 ARM指令集 句法:第103页,共167页,2022年,5月20日,19点22分,星期三 指令用于测试操作,根据结果更新条件码标志,结果不放入寄存器。 其中,TST指令对Rn的值与Operand2的值进行按位“与”操作,结果丢弃;TEQ指令对Rn的值与Operand2的值进行按位“异或”操作,结果丢
57、弃。 关于条件码标志的影响与算术运算指令相同。 关于R15的使用与比较指令相同。 5. ARM数据处理指令-测试指令2.4.3 ARM指令集 指令说明:TST、TEQ 第104页,共167页,2022年,5月20日,19点22分,星期三TSTR0,#0 x3F8TEQEQR10,R9TSTNER1,R5,ASR R1TEQR15,R1,ROR R0 5. ARM数据处理指令-测试指令2.4.3 ARM指令集 例:TST、TEQ第105页,共167页,2022年,5月20日,19点22分,星期三MUL、MLA MUL cond S Rd, Rm, RsMLA cond S Rd, Rm, Rs,
58、 Rn5. ARM数据处理指令乘法指令 2.4.3 ARM指令集 句法:第106页,共167页,2022年,5月20日,19点22分,星期三 指令用于进行乘法和乘加32位32位运算,结果为低32位。 如果指定S,则指令根据结果更新标志N和Z;不影响标志V;在ARMv4之前版本中标志C不可靠;在ARMv5以后版本中不影响标志C。 R15不能用作Rd、Rm、Rs或Rn。Rd不能与Rm相同。5. ARM数据处理指令-乘法指令2.4.3 ARM指令集 指令说明:MUL、MLA 第107页,共167页,2022年,5月20日,19点22分,星期三MULR10,R2,R5MLAR10,R2,R1,R5MU
59、LSR0,R2,R2MULLTR2,R3,R2MLAVCSR8,R6,R3,R8MULR15,R0,R3MLAR1,R1,R6 5. ARM数据处理指令-乘法指令2.4.3 ARM指令集 例:MUL、MLA第108页,共167页,2022年,5月20日,19点22分,星期三CLZcond Rd, Rm5. ARM数据处理指令- CLZ 2.4.3 ARM指令集 句法: 指令用于对Rm中值的前导零的个数进行计数,结果放入Rd中。若Rm内容为0,则结果为32;若Rm位31为1,则结果为0。 指令不影响条件码标志。 Rd不允许是R15。 指令说明:第109页,共167页,2022年,5月20日,19
60、点22分,星期三BcondlabelBLcondlabel6. ARM分支指令-B、BL 2.4.3 ARM指令集 句法: 指令用于分支和带链接分支的操作。 其中,B指令引起处理器转移到label;BL指令将下一条指令的地址拷贝到R14(LR,链接寄存器),并引起处理器转移到label。 指令说明:第110页,共167页,2022年,5月20日,19点22分,星期三6. ARM分支指令-B、BL2.4.3 ARM指令集Bloop ABLsub 例:第111页,共167页,2022年,5月20日,19点22分,星期三BXcondRm 6. ARM分支指令-BX 2.4.3 ARM指令集 句法:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年春北师版数学九年级下册 第1章 1 锐角三角函数 第1课时 锐角的正切
- 2025年学生乘车安全管理条例:创新安全管理保障学生出行
- 2025年注册设备监理师设备监理综合实务模拟试卷(项目管理与合同)之施工监理实务
- 2025年社会工作者中级实务考试模拟试卷解析宝典
- 2025年管理学原理自学考试真题解析与模拟题库
- 医学护理课件背景
- 理解MySQL视图的用途与实现试题及答案
- 财务成本管理考试关键内容试题及答案
- 安徽省蚌埠市高新区2024-2025学年八年级下学期期中数学试题(原卷版+解析版)
- 2025年人力资源管理师一级考试模拟试卷:人力资源战略规划与职业素养提升
- 公园维修施工组织设计方案方案
- 树立正确就业观课件
- 2024年百联集团有限公司招聘笔试冲刺题(带答案解析)
- 血气分析详解
- ISO TR 15608-2017-中英文版完整
- 家政保洁培训课件
- 《在马克思墓前的讲话》课件+2023-2024学年统编版高中语文必修下册
- 安防监控系统维保表格完整
- 第24届世界奥林匹克数学竞赛WMO省级测评五年级试卷【含答案】
- 服饰项目经济效益分析报告
- 孕前和孕期保健指南版
评论
0/150
提交评论