ARM嵌入式系统原理及应用开发 教学课件 ppt 作者 谭会生 1-5 第3章 ARM嵌入式处理器指令系统

上传人:E**** 文档编号:89335129 上传时间:2019-05-23 格式:PPT 页数:75 大小:1.28MB
返回 下载 相关 举报
ARM嵌入式系统原理及应用开发 教学课件 ppt 作者 谭会生 1-5 第3章 ARM嵌入式处理器指令系统_第1页
第1页 / 共75页
ARM嵌入式系统原理及应用开发 教学课件 ppt 作者 谭会生 1-5 第3章 ARM嵌入式处理器指令系统_第2页
第2页 / 共75页
ARM嵌入式系统原理及应用开发 教学课件 ppt 作者 谭会生 1-5 第3章 ARM嵌入式处理器指令系统_第3页
第3页 / 共75页
ARM嵌入式系统原理及应用开发 教学课件 ppt 作者 谭会生 1-5 第3章 ARM嵌入式处理器指令系统_第4页
第4页 / 共75页
ARM嵌入式系统原理及应用开发 教学课件 ppt 作者 谭会生 1-5 第3章 ARM嵌入式处理器指令系统_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《ARM嵌入式系统原理及应用开发 教学课件 ppt 作者 谭会生 1-5 第3章 ARM嵌入式处理器指令系统》由会员分享,可在线阅读,更多相关《ARM嵌入式系统原理及应用开发 教学课件 ppt 作者 谭会生 1-5 第3章 ARM嵌入式处理器指令系统(75页珍藏版)》请在金锄头文库上搜索。

1、1,第3章 ARM嵌入式处理器指令系统,3.1 ARM指令分类及指令格式 3.2 ARM指令的寻址方式 3.3 ARM指令集 3.4 Thumb指令集 习题,2,本章以流行ARM处理器为例介绍嵌入式微处理器的指令系统,包括 ARM处理器的指令格式分类、指令格式、寻址方式、32位的ARM指令集和16位的Thumb指令集。,31 ARM指令分类及指令格式,3,31l ARM指令分类,4,5,6,7,8,1. 立即数符号“#“ “#”符号表示立即数,该符号后的数据可以是二进制数,也可以是十进制数或十六进制数,如果操作数为十进制数,则前面除了#外,没有其他符号。 2. 二进制符号“%“ “%“符号后面

2、的数字表示二进制数,如%10010101表示二进制数10010101,即十进制数149。 3. 二进制符号“2_“ “2_“符号是二进制前缀的另一种形式,如2_10010101也表示二进制数10010101,与%10010101等效。,313 ARM指令中的操作数符号,9,4. 十六进制符号“0x“ “0x“后面的数据表示十六进制数,如0xFFFF,表示十六进制数FFFF,即十进制数65535。 5 更新基址寄存器符号“!“ “!“符号表示指令在完成操作后应将最后的地址写入基址寄存器。 6. 复制SPSR到CPSR符号“” “” 符号通常在批量数据存储指令中作为后缀放在寄存器之后。当其前面的寄

3、存器不包含PC时,该符号表示所用的寄存器是用户模式的寄存器;当其前面的寄存器包含PC时该符号指示将SPSR寄存器的值复制到CPSR寄存器中。 7. 指示寄存器列表范围符号“-” “-“符号用于在有些指令中表示多个连续寄存器,即含义“从到“。如RO-R7表 示,R1,R2,R3,R4,R5,R6,R7这8个寄存器。,10,ARM微处理器内嵌的桶型移位器(Barrel Shifter),支持数据的各种移位操作,但在 ARM指令集中没有单独的指令供移位操作使用。移位操作在汇编语言中表示为指令中的选项,只能作为指令格式中的一个字段。如当数据处理指令的第2个操作数为寄存器时,就可以加入移位操作选项对它进

4、行各种移位操作。 移位操作包括逻辑左移(LSL)、算术左移(ASL)、逻辑右移(LSR)、算术右移(ASR)、循环右移(ROR)及带扩展的循环右移(RRX)共6种类型。,314 ARM指令中的移位操作,11,1逻辑左移操作 格式:通用寄存器,LSL 立即数 用途:对通用寄存器中的内容进行逻辑左移操作,按操作数所指定的数量向左移位,右端(低位)用零来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是03l之间的整数)。 例如:MOV R0, Rl , LSL# 2 ;将Rl中的内容算术左移2位后传送到R0中 2算术左移操作 格式:通用寄存器,ASL 操作数 用途:AS

5、L表示对通用寄存器中的内容进行算术左移操作,按操作数所指定的数量向左移位,右端(低位)用零来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是03l之间的整数)。 LSL与ASL效果相同,可以互换。 例如:MOV R0,R1,ASL#2 ;将R1中的内容算术左移2位后传送到R0中,12,3 逻辑右移操作 格式:通用寄存器,LSR 操作数 用途:对通用寄存器中的内容进行逻辑右移操作,按操作数所指定的数量向右移位,左端(高位)用零来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是03l之间的整数)。 例如:MOV R0, R1, LSR#

6、2;将R1中的内容逻辑右移2位后传送到R0中,左端用零来填充 4算术右移操作 格式:通用寄存器,ASR 操作数 用途:对通用寄存器中的内容进行逻辑右移操作,按操作数所指定的数量向右移位,左端(高位)用第31位的值(亦即符号位)来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是03l之间的整数)。 例如:MOV R0, R1, ASR#2 ;将R1中的内容算术右移2位后传送到R0中,左端用第31 位的值来填充,13,5循环右移操作 格式:通用寄存器,ROR 操作数 用途:对通用寄存器中的内容进行循环右移操作,按操作数所指定的数量向右循环移位,左端用右端移出的位来填充

7、。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是03l之间的整数)。当进行32位的循环右移操作时,通用寄存器中的值不改变。 例如:MOV R0, R1 , ROR#2 ;将R1中的内容循环右移2位后传送到R0中 6带扩展的循环右移操作 格式:通用寄存器,RRX 操作数 用途:对通用寄存器中的内容进行带扩展的循环右移操作,按操作数所指定 的数量向右循环移位,左端用进位标志位来填充。其中,操作数可以是通用寄存器中的数值,也可以是立即数(立即数的取值范围是03l之间的整数)。 例如:MOV R0, R1, RRX#2 ;将R1中的内容进行带扩展的循环右移2位后传送到R0中,

8、14,1立即寻址 立即寻址也叫立即数寻址,是一种特殊的寻址方式。采用立即寻址方式时,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数。采用立即寻址方式的指令示例如下: MOV R0, # 0xl0FF66ED ADC R0 , R0 ,# 1000 ; R0R0 + 1000 + C 在以上2条指令中,第2个源操作数即为立即数,32 ARM指令的寻址方式,所谓寻址方式,就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前ARM指令系统支持的常见寻址方式有立即寻址、寄存器寻址、寄存器间接寻址、基址加变址寻址、相对寻址、堆栈寻址及多寄存器寻址7种。,321 A

9、RM指令的寻址方式,15,2寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常 采用的一种方式,也是一种执行效率较高的寻址方式。采用寄存器寻址方式的指令示例如下: ADD R0, R 1 , R2 ; R0Rl + R2 3寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器 中,用于间接寻址的寄存器必须用方括号“ “括起来。采用寄存器间接寻址方式的指令示例如下: ADD R0,Rl ,R2 ;R0Rl + R2 LDR R0,R1 ;R0Rl STR R0, Rl ; RlR0,16,4基址加变址寻址 基址加变址寻址就

10、是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。基址加变址寻址方式常用于访问某地址附近的地址单元。采用基址加变址寻址方式的指令有如下几种常见形式。 (1)LDR R0, R1, # 4 ;R0Rl + 4 (2)LDR R0, R1, # 4! ; R0Rl + 4、RlRl + 4 该指令表示以寄存器Rl的值加上4作为操作数的有效地址,将取得的操作数存入寄存器R0中,然后再将寄存器Rl的值增加4。符号“!“表示指令在完成数据传送后应该更新基址寄存器。 (3)LD R0,R1,#4 ;R0Rl 、RlRl + 4 该指令表示以寄存器Rl

11、的值作为操作数的有效地址,将取得的操作数存入寄存器R0中,然后再将寄存器Rl的值增加4。 (4)LDR R0,Rl ,R2 ;R0Rl + R2,17,5相对寻址 相对寻址以程序计数器(PC)的当前值为基地址,以指令中的地址标号为偏移量,将两者相加之后的值作为操作数的有效地址。以下程序段的作用是完成子程序的调用和返回,其中跳转指令BL即采用了相对寻址方式。 BL Subroutine_ A ;跳转到子程序Subroutine_A处执行 Subroutine A MOV PC, LR ;从子程序返回 假设程序段中BL指令所在地址(PC值)为0x2100000, Subroutine_A对应偏移量

12、为0x0100,则转移到Subroutine_A处对应的地址为0x2100100,此地址在汇编时自动形成。,18,6堆找寻址 堆栈是一种数据结构,按先进后出(First In Last Out, FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆核指针总是指向栈顶。 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack) ,而当堆栈指针指向下一个将要放人数据的空位置时,称为空堆栈(Empty Stack)。 根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈(Decending Stack) ,当堆栈由低地址向高地址生成

13、时,称为递增堆栈,当由高地址向低地址生成时,称为递减堆栈。 因此堆栈工作方式有4种类型: (1)满递增堆栈;(2)满递减堆栈;(3)空递增堆栈: (4)空递减堆栈。,19,7多寄存器寻址 多寄存器寻址又称块拷贝寻址,采用多寄存器寻址方式可以用一条指令完成传送最多 16个通用寄存器的值。多寄存器寻址是多寄存器传送指令(LDM/STM)的寻址方式, LDM/STM指令可以将存储器中的一个数据块加载到多个寄存器中,也可以将多个寄存器中的内容存储到存储器中。寻址操作中的寄存器可以是R0R15这16个寄存器的子集或全集。LDM/STM指令依据后缀名的不同,其寻址方式有很大区别。采用多寄存器寻址方式的指令

14、示例如下: LDMIA R0, R1,R2,R3,R4 ;R1R0, R2R0十4 ;R3R0 + 8,R4R0十12 该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,因此,指令可将连续存储单元的值传送到RlR4。,20,【例31】 欲将数据从源数据区snum复制到目标数据区dnum,数据的个数为num,复制时以8个字为单位进行,对于最后所剩不足8个字的数据,以字为单位进行复制。用ARM汇编语言设计实现该功能的程序,并分析该ARM程序的详细执行过程和执行结果。 用ARM汇编语言设计数据块复制程序的设计思想如下:先将源数据区的起始地址、目标数据区的起始地址以及数据个数赋给选定

15、的寄存器R0、R1、R2,再根据每次批量/单个复制数据的个数R3,确定用于数据复制的中间寄存器R4-R11,之后先将源数据区的若干个数据批量装载到中间寄存器中,再将中间寄存器的数据批量存储到目的数据存储区,随后进行数据是否复制完毕的判断,若未复制完毕,修改有关操作数据地址,并重复前面的数据复制操作,否者,终止操作,程序结束。,322 ARM指令的寻址方式应用举例,21,表3.3 数据块复制程序执行前的有关数据和执行后的有关结果列表,22,23,24,ARM微处理器的指令集是加载/存储型的,即指令集仅能处理寄存器中的数据,处理结果仍要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指

16、令来完成。本节将对ARM指令集的共6大类指令进行详细的描述,并给出相应例子。 331 数据处理指令 数据处理类指令可分为数据传送指令、算术逻辑运算指令及比较指令等。其中数据传送指令用于在寄存器和存储器之间进行数据的双向传输;算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位;比较指令不保存运算结果,只更新CPSR中相应的条件标志位。 数据处理类指令见表34。,33 ARM指令集,25,26,1数据传送指令 1)数据传送指令 格式:MOV条件 S目的寄存器,操作数 用途:用于将操作数传送到目的寄存器中。其中S决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。例如: MOV Rl,R0 ;将寄存器R0的值传送到寄存器Rl MO

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

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

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