第3章-arm嵌入式处理器指令系统-课件

上传人:小** 文档编号:45551096 上传时间:2018-06-17 格式:PPT 页数:75 大小:1.28MB
返回 下载 相关 举报
第3章-arm嵌入式处理器指令系统-课件_第1页
第1页 / 共75页
第3章-arm嵌入式处理器指令系统-课件_第2页
第2页 / 共75页
第3章-arm嵌入式处理器指令系统-课件_第3页
第3页 / 共75页
第3章-arm嵌入式处理器指令系统-课件_第4页
第4页 / 共75页
第3章-arm嵌入式处理器指令系统-课件_第5页
第5页 / 共75页
点击查看更多>>
资源描述

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

1、第3章 ARM嵌入式处理器指令系统 第3章 ARM嵌入式处理器指令系统 3.1 ARM指令分类及指令格式 3.2 ARM指令的寻址方式 3.3 ARM指令集 3.4 Thumb指令集 习题1第3章 ARM嵌入式处理器指令系统 本章以流行本章以流行ARMARM处理器为例介绍嵌入式微处理处理器为例介绍嵌入式微处理器的指令系统,包括器的指令系统,包括 ARMARM处理器的指令格式分类、处理器的指令格式分类、指令格式、寻址方式、指令格式、寻址方式、3232位的位的ARMARM指令集和指令集和1616位的位的ThumbThumb指令集。指令集。31 ARM指令分类及指令格式2第3章 ARM嵌入式处理器指

2、令系统 3 31 1l ARMl ARM指令分类指令分类3第3章 ARM嵌入式处理器指令系统 4第3章 ARM嵌入式处理器指令系统 5第3章 ARM嵌入式处理器指令系统 6第3章 ARM嵌入式处理器指令系统 7第3章 ARM嵌入式处理器指令系统 1. 立即数符号“#“#”符号表示立即数,该符号后的数据可以是二进制数 ,也可以是十进制数或十六进制数,如果操作数为十进制数 ,则前面除了#外,没有其他符号。2. 二进制符号“%“%“符号后面的数字表示二进制数,如%10010101表 示二进制数10010101,即十进制数149。3. 二进制符号“2_“2_“符号是二进制前缀的另一种形式,如2_100

3、10101 也表示二进制数10010101,与%10010101等效。313 ARM指令中的操作数符号8第3章 ARM嵌入式处理器指令系统 4. 十六进制符号“0x“0x“后面的数据表示十六进制数,如0xFFFF,表示十 六进制数FFFF,即十进制数65535。5 更新基址寄存器符号“!“!“符号表示指令在完成操作后应将最后的地址写入基 址寄存器。6. 复制SPSR到CPSR符号“”“” 符号通常在批量数据存储指令中作为后缀放在寄存 器之后。当其前面的寄存器不包含PC时,该符号表示所用 的寄存器是用户模式的寄存器;当其前面的寄存器包含PC 时该符号指示将SPSR寄存器的值复制到CPSR寄存器中

4、。7. 指示寄存器列表范围符号“-”“-“符号用于在有些指令中表示多个连续寄存器,即含 义“从到“。如RO-R7表 示,R1,R2,R3,R4,R5, R6,R7这8个寄存器。 9第3章 ARM嵌入式处理器指令系统 ARM微处理器内嵌的桶型移位器(Barrel Shifter),支持数 据的各种移位操作,但在 ARM指令集中没有单独的指令供移 位操作使用。移位操作在汇编语言中表示为指令中的选项,只 能作为指令格式中的一个字段。如当数据处理指令的第2个操 作数为寄存器时,就可以加入移位操作选项对它进行各种移位 操作。移位操作包括逻辑左移(LSL)、算术左移(ASL)、逻辑右移 (LSR)、算术右

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

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

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

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

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

10、对 寻址、堆栈寻址及多寄存器寻址7种。321 ARM指令的寻址方式14第3章 ARM嵌入式处理器指令系统 2寄存器寻址寄存器寻址就是利用寄存器中的数值作为操作数,这种寻 址方式是各类微处理器经常 采用的一种方式,也是一种执行效 率较高的寻址方式。采用寄存器寻址方式的指令示例如下:ADD R0, R 1 , R2 ; R0Rl + R2 3寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址, 而操作数本身存放在存储器 中,用于间接寻址的寄存器必须用 方括号“ “括起来。采用寄存器间接寻址方式的指令示例如 下:ADD R0,Rl ,R2 ;R0Rl + R2 LDR R0,R1 ;R0

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

12、成数据传送后应该更新基址寄存器。 (3)LD R0,R1,#4 ;R0Rl 、RlRl + 4 该指令表示以寄存器Rl的值作为操作数的有效地址,将取得的操 作数存入寄存器R0中,然后再将寄存器Rl的值增加4。(4)LDR R0,Rl ,R2 ;R0Rl + R2 16第3章 ARM嵌入式处理器指令系统 5相对寻址相对寻址以程序计数器(PC)的当前值为基地址,以指令 中的地址标号为偏移量,将两者相加之后的值作为操作数的 有效地址。以下程序段的作用是完成子程序的调用和返回, 其中跳转指令BL即采用了相对寻址方式。BL Subroutine_ A ;跳转到子程序Subroutine_A处执行Subr

13、outine AMOV PC, LR ;从子程序返回 假设程序段中BL指令所在地址(PC值)为0x2100000, Subroutine_A对应偏移量为0x0100,则转移到Subroutine_A 处对应的地址为0x2100100,此地址在汇编时自动形成。17第3章 ARM嵌入式处理器指令系统 6堆找寻址堆栈是一种数据结构,按先进后出(First In Last Out, FILO)的方式工作,使用一个称作堆栈指针的专用寄存器 指示当前的操作位置,堆核指针总是指向栈顶。当堆栈指针指向最后压入堆栈的数据时,称为满堆栈 (Full Stack) ,而当堆栈指针指向下一个将要放人数据的空 位置时,

14、称为空堆栈(Empty Stack)。根据堆栈的生成方式,又可以分为递增堆栈 (Ascending Stack)和递减堆栈(Decending Stack) ,当堆栈 由低地址向高地址生成时,称为递增堆栈,当由高地址向 低地址生成时,称为递减堆栈。因此堆栈工作方式有4种类型: (1)满递增堆栈;(2)满递减堆栈;(3)空递增堆栈 : (4)空递减堆栈。 18第3章 ARM嵌入式处理器指令系统 7多寄存器寻址多寄存器寻址又称块拷贝寻址,采用多寄存器寻址方 式可以用一条指令完成传送最多 16个通用寄存器的值。多 寄存器寻址是多寄存器传送指令(LDM/STM)的寻址方式, LDM/STM指令可以将存

15、储器中的一个数据块加载到多个寄 存器中,也可以将多个寄存器中的内容存储到存储器中。 寻址操作中的寄存器可以是R0R15这16个寄存器的子集或 全集。LDM/STM指令依据后缀名的不同,其寻址方式有很 大区别。采用多寄存器寻址方式的指令示例如下:LDMIA R0, R1,R2,R3,R4 ;R1R0, R2R0十4 ;R3R0 + 8,R4R0十12该指令的后缀IA表示在每次执行完加载/存储操作后, R0按字长度增加,因此,指令可将连续存储单元的值传送 到RlR4。19第3章 ARM嵌入式处理器指令系统 【例31】 欲将数据从源数据区snum复制到目标数据区 dnum,数据的个数为num,复制时

16、以8个字为单位进行,对 于最后所剩不足8个字的数据,以字为单位进行复制。用 ARM汇编语言设计实现该功能的程序,并分析该ARM程序的 详细执行过程和执行结果。用ARM汇编语言设计数据块复制程序的设计思想如下: 先将源数据区的起始地址、目标数据区的起始地址以及数据 个数赋给选定的寄存器R0、R1、R2,再根据每次批量/单个 复制数据的个数R3,确定用于数据复制的中间寄存器R4-R11 ,之后先将源数据区的若干个数据批量装载到中间寄存器中 ,再将中间寄存器的数据批量存储到目的数据存储区,随后 进行数据是否复制完毕的判断,若未复制完毕,修改有关操 作数据地址,并重复前面的数据复制操作,否者,终止操作 ,程序结束。322 ARM指令的寻址方式应

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 经营企划

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