《嵌入式系统》课件3-ARM指令系统

上传人:Ron****an 文档编号:142922449 上传时间:2020-08-24 格式:PPT 页数:63 大小:718KB
返回 下载 相关 举报
《嵌入式系统》课件3-ARM指令系统_第1页
第1页 / 共63页
《嵌入式系统》课件3-ARM指令系统_第2页
第2页 / 共63页
《嵌入式系统》课件3-ARM指令系统_第3页
第3页 / 共63页
《嵌入式系统》课件3-ARM指令系统_第4页
第4页 / 共63页
《嵌入式系统》课件3-ARM指令系统_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《《嵌入式系统》课件3-ARM指令系统》由会员分享,可在线阅读,更多相关《《嵌入式系统》课件3-ARM指令系统(63页珍藏版)》请在金锄头文库上搜索。

1、ARM指令系统,ARM指令集特点,ARM指令都是是32位的。 具有第一操作数、第二操作数、目的操作数 使用多寄存器 所有的ARM指令集都可以是有条件执行的。 条件标志影响位 程序的启动都是从ARM指令集开始。,指令格式,ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令 ARM指令使用的基本格式如下: 指令类型名(条件名)(S) 目标操作数,源操作数1,2,条件执行,ARM指令根据CPSR中的条件位自动判断是否执行指令,在条件满足时,指令执行,否则指令被忽略。 在ARM的指令编码表中,统一占用编码的最高四位31

2、:28来表示“条件码”(即“cond”)。,条件域表1,条件域表2,编码表如下:,ARM寻址方式,立即寻址 寄存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址,立即寻址,立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令: ADDR0,R0,1/*R0R01*/ ADDR0,R0,0 x3f /*R0R00 x3f*/ 在以上两条指令中,第二个源操作数即为立即数,要求以“”为前缀,对于以十六进制表示的立即数,还要求在“”后加上“0 x”。,有效立即数

3、问题,在ARM数据处理指令中,当参与操作的第二操作数为立即数型时,有效的立即数是由一个8位的立即数循环右移偶数位得到. 其中循环右移的位数由一个4位二进制的两倍表示,如果立即数记作,8位常数记作immed_8,4位的循环右移值记作rotate_imm, 有效立即数immediate可以表示成: =immed_8 循环右移(2rotate_imm),寄存器寻址,寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令: ADDR0,R1,R2/*R0R1R2*/ 该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在

4、寄存器R0中。,寄存器寻址,第二操作数为寄存器型的移位操作 在ARM指令的数据处理指令中参与操作的第二操作数为寄存器型时,在执行寄存器寻址操作时,可以选择是否对第二操作数进行移位,即Rm,其中Rm称为第二操作数寄存器,用来指定移位类型(LSL,LSR,ASL,ASR,ROR或RRX)和移位位数。移位位数可以是5位立即数或寄存器(Rs)。在指令执行时将移位后的内容作为第二操作数参与运算。例如指令: ADD R3,R2,R1,LSR #2 ;R3R2 + R14,寄存器寻址,第二操作数移位方式 LSL:逻辑左移,空出的最低有效位用0填充。 LSR:逻辑右移,空出的最高有效位用0填充。 ASL:算术

5、左移,由于左移空出的有效位用0填充,因此 它与LSL同义。 ASR:算术右移,算术移位的对象是带符号数,移位过程中必须保持操作数的符号不变。如果源操作数是正数,空出的最高有效位用0填充,如果是负数用1填充。 ROR:循环右移,移出的字的最低有效位依次填入空出的最高有效位。 RRX:带扩展的循环右移。将寄存器的内容循环右移1位,空位用原来C标志位填充。,寄存器寻址,第二操作数的移位位数 移位位数可以用立即数方式或者寄存器方式给出,如下所示: ADD R3,R2,R1,LSR #2;R3 R2 + R14 ADD R3,R2,R1,LSR R4;R3 R2 + R12R4 寄存器R1的内容分别逻辑

6、右移2位、R4位(亦即R14、R12R4),再与寄存器R2的内容相加,结果放入R3中。,寄存器间接寻址,寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令: LDR R0,R1/*R0R1*/ STR R0,R1/*R1R0*/ 第一条指令将以R1的值为地址的存储器中的数据传送到R0中。第二条指令将R0的值传送到以R1的值为地址的存储器中。,基址加偏址寻址,基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令又可以分为以

7、下几种形式: 前变址模式: LDR R0,R1,4;R0R14 自动变址模式: LDR R0,R1,4!;R0R14、R1R14 后变址模式: LDR R0,R1 ,4;R0R1、R1R14,基址加偏址寻址,基址寄存器的地址偏移可以是一个立即数,也可以是另一个寄存器,并且在加到基址寄存器前还可以经过移位操作,如下所示: LDR R0,R1,R2 ;R0mem32R1+R2 LDR R0,R1,R2,LSL #2 ;R0R1+R2*4,多寄存器寻址,一条指令一次完成最多16个寄存器的值传送 LDMIA R0,R1-R8 STMIA R0,R1,R3,R7,R9,堆栈寻址,堆栈是一种数据结构,按先

8、进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。 即访问存储器时,存储器的地址向高地址方向生长,称为递增堆栈(ascending stack)。 存储器的地址向低地址方向生长,称为递减堆栈(descending stack)。,堆栈寻址,四种类型的堆栈工作方式 满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。(FA) 满递减堆栈:堆

9、栈指针指向最后压入的数据,且由高地址向低地址生成。(FD) 空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。(EA) 空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成(ED) STMFD SP! R1-R7,LR LDMFD SP! R1-R7,LR,块拷贝寻址,块拷贝寻址是多寄存器传送指令LDM/STM的寻址方式。LDM/STM指令可以把存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是R0-R15这16个寄存器的子集或是所有寄存器。 LDM/STM指令依据其后缀名的不同其寻址的方式

10、也有很大不同。,IA-每次传送后地址增加 IB-每次传送前地址增加 DA -每次传送后地址减少 DB -每次传送前地址减少,LDMIA R0!, R2-R9 STMIA R1,R2,R9,相对寻址,与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式: BLNEXT;跳转到子程序 ; NEXT处执行 NEXT MOVPC,LR;从子程序返回,ARM指令详细介绍,1 数据处理指令 2 Load/Store指令 3 程序状态寄存器与通用寄存器之间 的传送指

11、令 4 转移指令 5 异常中断指令 6 协处理器指令,数据处理指令,ARM的数据处理指令主要完成寄存器中数据的算术和逻辑运算操作。本节按以下内容组织: 数据处理指令分类 数据处理指令二进制编码 数据处理指令表,数据处理指令分类,数据处理指令根据指令实现处理功能可分为以下六类: 数据传送指令; 算术运算指令; 逻辑运算指令; 比较指令; 测试指令; 乘法指令。,数据处理指令指令表,SUBS R3, R6, R9 SBCS R4, R7, R10 SBC R5, R8, R11 ADCHI R11,R0,R3 RSCLES R0,R5,R0,LSL R4,以下指令序列完成两个 128 位数的加法,

12、第一个数由高到低存放在寄存器 R7R4,第二个数由高到低存放在寄存器R11R8,运算结果由高到低存放在寄存器 R3R0:,乘法指令,MUL Rd,Rm,Rs ;Rd = Rm * Rs MLA Rd,Rm,Rs,Rn ;Rd = (Rm * Rs+Rn) UMULL RdH,RdL,Rm,Rs ;RdH,L=Rm * Rs UMLAL RdH,RdL,Rm,Rs ;RdH,L=RdH,L+Rm*Rs SMULL RdH,RdL,Rm,Rs ;RdH,L= Rm*Rs SMLAL RdH,RdL,Rm,Rs ;RdH,L= RdH,L+Rm*Rs 例如: SMLAL R4,R,3,R2,R1,L

13、oad/Store指令,ARM的数据存取指令Load/Store是唯一用于寄存器和存储器之间进行数据传送的指令。ARM指令集中有三种基本的数据存取指令: 单寄存器的存取指令(LDR,STR) 多寄存器存取指令(LDM,STM),读写字节,半字,字节存取 STRB , LDRB STRSB, LDRSB (带符号) 半字存取 LDRH, STRH LDRSH, STRSH (带符号),多寄存器存取指令,多寄存器传送指令可以用一条指令将16个可见寄存器(R0R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。与单寄存器存取指令相比,多寄存器数据存取可用的寻址模式更加有限

14、。多寄存器存取指令的汇编格式如下: LDM/STM Rn!, 例如: LDMIA R1,R0,R2,R5 STMDB R2!,R3-R7,LDMFD SP!,R0-R7,PC 解释:当指令LDM且寄存器列表中包含R15,选用表示除了完成相关传送外,还将SPSR的内容复制给CPSR,存储器和寄存器交换,SWP Rd, Rm, Rn ;Rn-Rd, Rm-Rn SWPB Rd, Rm, Rn (无符号字节) 例如: SWP R1, R1, R3 SWPB R1, R2, R3,程序状态寄存器与通用寄存器之间的传送指令,ARM指令中有两条指令,用于在状态寄存器和通用寄存器之间传送数据。修改状态寄存器

15、一般是通过“读取修改写回”三个步骤的操作来实现的。 这两条指令分别是: 状态寄存器到通用寄存器的传送指令(MRS) 通用寄存器到状态寄存器的传送指令( MSR),转移指令,ARM的转移指令可以从当前指令向前或向后的32MB的地址空间跳转,根据完成的功能它可以分为以下4种 : B 转移指令 BL 带链接的转移指令 BX 带状态切换的转移指令 BLX 带链接和状态切换的转移指令 配合条件域 实现各种条件转移功能,BX指令只有寄存器寻址方式,寄存器存放目标的地址值,且用寄存器的最低位表示指令切换的指令集。为1把目标地址的代码解释为thumb代码,否则为arm代码,CODE32 . . ADR R0,

16、 THUMB_CODE+1 BX R0 . ARM_CODE . ;- CODE16 THUMB_CODE ADR R0,ARM_CODE BX R0,异常中断指令,异常中断指令可以分为一下两种: 软件中断指令(SWI) 软件中断指令SWI用于产生SWI异常中断,用来实现在用户模式下对操作系统中特权模式的程序的调用;,SWI,SWI(SoftWare Interrupt)代表“软件中断”,用于用户调用操作系统的系统例程,常称为“监控调用”。它将处理器置于监控(SVC)模式,从地址0 x08开始执行指令。其二进制编码如下: 汇编格式如下: SWI ,协处理器指令,ARM支持16个协处理器,用于各种协处理器操作,最常使用的协处理器是用于控制片上功能的系统协处理器,例如控制ARM720上的高速缓

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号