ARM嵌入式系统教程 教学课件 ppt 作者 张石 第3章

上传人:E**** 文档编号:89189079 上传时间:2019-05-21 格式:PPT 页数:93 大小:639KB
返回 下载 相关 举报
ARM嵌入式系统教程 教学课件 ppt 作者 张石 第3章_第1页
第1页 / 共93页
ARM嵌入式系统教程 教学课件 ppt 作者 张石 第3章_第2页
第2页 / 共93页
ARM嵌入式系统教程 教学课件 ppt 作者 张石 第3章_第3页
第3页 / 共93页
ARM嵌入式系统教程 教学课件 ppt 作者 张石 第3章_第4页
第4页 / 共93页
ARM嵌入式系统教程 教学课件 ppt 作者 张石 第3章_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《ARM嵌入式系统教程 教学课件 ppt 作者 张石 第3章》由会员分享,可在线阅读,更多相关《ARM嵌入式系统教程 教学课件 ppt 作者 张石 第3章(93页珍藏版)》请在金锄头文库上搜索。

1、ARM 嵌入式系统 第3章 ARM指令系统,ARM微处理器的指令系统,ARM指令的寻址方式 ARM微处理器的指令集概述 ARM指令集 Thumb指令集简介及应用场合,ARM指令的寻址方式,根据指令中给出的地址码字段寻找真实操作数地址的方式。ARM处理器支持的寻址方式有: 立即寻址 寄存器寻址 寄存器移位寻址 寄存器间接寻址 基址寻址 多寄存器寻址 堆栈寻址 块拷贝寻址 相对寻址,ARM指令的寻址方式,立即寻址 操作数本身在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数 ADD R0,R0,1 ;R0R01 AND R8,R7,0xFF ;R8R77:0 ADD R0,R0,&

2、3f ;R0R00x3f 立即数要求以“”为前缀,对于以十六进制表示的立即数,还要求在“”后加上“0x”或“&”,ARM指令的寻址方式,寄存器寻址 寄存器中的数值作为操作数 ADD R0,R1,R2 ;R0R1R2,ARM指令的寻址方式,寄存器移位寻址 ARM集特有。第二个操作数先进行移位操作。 ADD R3,R2,R1,LSL #3 ;R3R28*R1 LSL:逻辑左移(Logical Shift Left) LSR:逻辑右移(Logical Shift Right) ASR:算术右移(Arithmetic Shift Right) ROR:循环右移(Rotate Right) RRX:扩展

3、为1的循环右移(Rotate Right eXtended by 1 place ),0,LSL,0,LSR,ASR,ROR,ARM指令的寻址方式,寄存器间接寻址 以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中 LDR R0,R1 ;R0R1 STR R0,R1 ;R1R0,ARM指令的寻址方式,基址寻址 将基址寄存器的内容与指令中给出的地址偏移量相加,形成操作数的有效地址。基址寻址常用于访问基地址附近的存储单元。包括基址加偏移和基址加索引寻址。 基址加偏移前索引寻址 LDR R0,R1,4 ;R0R14 基址加偏移带自动索引的前索引寻址 LDR R0,R1,4! ;R0R14、R

4、1R14 基址加偏移后索引寻址 LDR R0,R1,4 ;R0R1、R1R14 基址加索引寻址 LDR R0,R1,R2 ;R0R1R2,ARM指令的寻址方式,多寄存器寻址 一条指令可以完成多个寄存器值的传送。可以用一条指令完成传送最多16个通用寄存器的值。 LDMIA R0,R1,R2,R3,R4 ;R1R0,R2R04,R3R08,R4R012 地址增加在先(IB):STMIB,LDMIB 地址增加在后(IA):STMIA,LDMIA 地址减少在先(DB):STMDB,LDMDB 地址减少在后(DA):STMDA,LDMDA I:Increment D:Decrement B:Before

5、 A:After,ARM指令的寻址方式,堆栈寻址 堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。 同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈(Decending Stack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类

6、型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈工作方式,即:,ARM指令的寻址方式,堆栈寻址 满递增堆栈(FA): 堆栈指针指向最后压入的数据,且由低地址向高地址生成。 入栈:STMFA,出栈:LDMFA 满递减堆栈(FD): 堆栈指针指向最后压入的数据,且由高地址向低地址生成。 入栈:STMFD,出栈:LDMFD 空递增堆栈(EA): 堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。 入栈:STMEA,出栈:LDMEA 空递减堆栈(ED): 堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。 入栈:STMED,出栈:LDMED,ARM指令的寻址方式,STM

7、FA r13!, r0-r5 ; Push onto a Full Ascending Stack LDMFA r13!, r0-r5 ; Pop from a Full Ascending Stack STMFD r13!, r0-r5 ; Push onto a Full Descending Stack LDMFD r13!, r0-r5 ; Pop from a Full Descending Stack STMEA r13!, r0-r5 ; Push onto an Empty Ascending Stack LDMEA r13!, r0-r5 ; Pop from an Empt

8、y Ascending Stack STMED r13!, r0-r5 ; Push onto Empty Descending Stack LDMED r13!, r0-r5 ; Pop from an Empty Descending Stack,ARM指令的寻址方式,多寄存器寻址和堆栈寻址之间的关系,堆栈,多寄存器寻址,ARM指令的寻址方式,STMFD SP!,R2,R3 LDMFD SP!,R2,R3 等价为 STMDB R13!,R2,R3 LDMIA R13!,R2,R3,SP0x1000,SP0x0FF8,SP,SP,入栈,出栈,ARM指令的寻址方式,相对寻址 以程序计数器PC的

9、当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。 LDR PC,PC,#+0xFF0 ;PC PC+8+0xFF0,ARM微处理器的指令集概述,ARM微处理器的指令的分类 跳转指令 数据处理指令 程序状态寄存器(PSR)传输指令 加载/存储(Load/Store)指令 协处理器指令 异常中断产生指令 共6大类,ARM微处理器的指令集概述,ARM微处理器指令的格式 典型ARM指令的编码格式(机器码) 语法格式 S , 指令助记符 指令执行条件 S 指令的操作是否影响CPSR的值 目标寄存器 包含第一个操作数的寄存器 第二个操作数,ARM微处理器的指令集概述,指令的

10、条件域 当处理器工作在ARM状态时,几乎所有的指令均可根据CPSR中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行。 每一条ARM指令包含4位的条件码,位于指令的最高4位31:28。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的后面和指令同时使用。 B 无条件跳转 BEQ 相等则跳转,即当CPSR中的Z标志置位时发生跳转,ARM微处理器的指令集概述,ARM微处理器的指令集概述,指令的条件域 几乎所有的ARM数据处理指令均可以根据执行结果来选择是否更新条件码标志。若要更新条件码标志,则指令中须包含后缀S 一些指令(CMP,CMN,TST

11、,TEQ)不需要后缀S 一些指令只更新部分标志,而不影响其他标志,ARM指令集,跳转指令 在ARM程序中有两种方法可以实现程序流程的跳转: 使用跳转指令 直接向程序计数器PC写入目标地址值,ARM指令集,跳转指令 通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转。这种跳转指令又称为长跳转。,ARM指令集,跳转指令 ARM的跳转指令可以从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令: B 跳转指令 BL 带返回的跳转指令 BLX 带返回和状态切换的跳转指令 BX 带状态切换的跳转指令,ARM指令集,B(跳转指令)及BL(带返回的跳转指令) 指令的编码格

12、式 指令的语法格式 BL L:是否保存返回地址( L:PCLR ) :指令执行的条件码 :指令跳转的目标地址。计算方法,24 位有符号数补码立即数扩展为 32 位,再左移2位;将得到的值加到PC寄存器中,即得到跳转的目标地址。(-32MB+32MB)。,31 28 27 26 25 24 23 0,ARM指令集,B(跳转指令)及BL(带返回的跳转指令) 指令的使用 子程序返回: BX R14 MOV PC,R14 STMFD R13!,R14 LDMFD R13!,PC 示例 B Label ;程序跳转到标号Label处执行 BCS Label ;当CPSR寄存器中的C条件码置位时,程序 ;跳

13、转到标号Label处执行 BL func_1 ;程序跳转到子程序func_1处执行,同时将当前PC值 ;保存到LR中,ARM指令集,BLX(1) BLX(1)指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态切换到Thumb状态,该指令同时将PC寄存器的内容复制到LR寄存器中。 本指令属于无条件执行的指令 指令的语法格式 BLX ,ARM指令集,BLX(2) BLX(2)指令从ARM指令集跳转到指令中所指定的目标地址,目标地址的指令可以是ARM指令,也可以是Thumb指令。目标地址放在指令中的寄存器中,当寄存器的bit0值为0时,目标地址处的指令类型为ARM指令;当寄存器的b

14、it0值为1时,目标地址处的指令类型为Thumb指令。该指令同时将PC寄存器的内容复制到LR寄存器中。 指令的语法格式 BLX ,ARM指令集,BLX(2) BLX 目标地址 BLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态从ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14中。因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态的切换。同时,子程序的返回可以通过将寄存器R14值复制到PC中来完成。,ARM指令集,BX指令 BX条件 目标地址 BX指令跳转到指令中所指定的目标地址,

15、目标地址处的指令既可以是ARM指令,也可以是Thumb指令。,ARM指令集,数据处理指令 数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。 数据传送指令用于在寄存器之间进行数据的传输。 算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位。 比较指令不保存运算结果,只更新CPSR中相应的条件标志位。,ARM指令集,数据处理指令包括: MOV 数据传送指令 MVN 数据取反传送指令 CMP 比较指令 CMN 反值比较指令 TST 位测试指令 TEQ 相等测试指令 ADD 加法指令 ADC 带进位加法指令 SUB 减法指令 SBC 带借位减法指令 RSB 逆向减法指令 RSC 带借位的逆向减法指令 AND 逻辑与指令 ORR 逻辑或指令 EOR 逻辑异或指令 BIC 位清除指令,传送指令,比较指令,算术指令,逻辑指令,ARM指令集,MOV指令 MOV条件S 目的寄存器,源操作数 MOV指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。 MOV R1,R0 ;将寄存器R0的值传送到寄存器R1 MOV PC,R14 ;将寄存器R14

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

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

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