嵌入式技术实用教程教学课件作者姜帆第3章嵌入式处理器指令系统课件.ppt
文本预览下载声明
第3章 嵌入式处理器指令系统 学习目标: 1.掌握ARM指令的基本格式。 2.理解ARM指令的寻址方式。 3.熟悉ARM指令集。 4.熟悉Thumb指令集。 ARM指令分类及一般格式 ARM处理器的指令集可以分为数据处理指令、分支指令、程序状态寄存器(CPSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大类。其指令一般格式如下: Opcode{Cond}{S} Rd,Rn,Op2; 表示其中参数不可缺少,{}中的参数可以省略。具体说明如下: Opcode为指令的操作码,如MOV,SUB,BX等;Cond为指令执行的条件域,指示什么条件执行该指令,指令可以不加条件;S为决定执行指令时是否影响程序状态寄存器(CPSR)的值;Rd为目的寄存器;Rn为第一个源操作数,必须是寄存器;Op2为第二个源操作数;“;”号后为注解。 Opcode、Cond与S之间没有分隔符,S与Rd之间用空格隔开。 ARM指令中的操作数符号 ARM指令格式中的操作数有不同符号,现说明如下: 1.立即数符号“#” 2.二进制符号“%” 3.二进制符号“2 ” 4.十六进制符号“0x” 5. 更新基址寄存器符号“!” 6.复制SPSR到CPSR符号“^” 7.指示寄存器列表范围符号“~” ARM指令中的移位操作 ARM微处理器内嵌的桶型移位器(Barrel Shifter),支持数据的各种移位操作,但在ARM指令集中没有单独的指令供移位操作使用。移位操作在汇编语言中表示为指令中的选项,只能作为指令格式中的一个字段。如当数据处理指令的第2个操作数为寄存器时,就可以加入移位操作选项对它进行各种移位操作。 移位操作包括逻辑左移(LSL)、算术左移(ASL)、逻辑右移(LSR)、算术右移(ASR)、循环右移(ROR)及带扩展的循环右移(RRX)共6种类型。 ARM指令的寻址方式 所谓寻址方式,就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前ARM指令系统支持的常见寻找方式有立即寻址、寄存器寻址、寄存器间接寻址、基址加变址寻址、相对寻址、堆栈寻址及多寄存器寻址7种。 ARM指令的寻址方式 1立即寻址 立即寻址也叫立即数寻址,是一种特殊的寻址方式。采用立即寻址方式时,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数。 2寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的一寻址方式。 3寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中,用于间接寻址的寄存器必须用方括号“[]”括起来。 4基址加变址寻址 基址加变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。基址加变址寻址方式常用于某地至附近的地址单元。 ARM指令的寻址方式 5相对寻址 与基址加变址寻址方式相类似,相对寻址以程序计数器(PC)的当前值为基地址,以指令中的地址标号为偏移量,将两者相加之后的值作为操作数的有效地址。以下程序段的作用是完成子程序的调用和返回,其中跳转指令BL即采用了相对寻址方式。 6堆栈寻址 7多寄存器寻址 多寄存器寻址又称块拷贝寻址,采用多寄存器寻址方式可以用一条指令完成传送最多16个通用寄存器的值。 ARM指令集 ARM微处理器的指令集是加载/存储型的,即指令集仅能处理寄存器中的数据,处理结果仍要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。 Thumb指令集 ARM体系结构除了支持执行效率很高的32位ARM指令集以外,为兼容数据总线宽度为16位的应用系统,也支持16位的Thumb指令集。Thumb指令集是ARM指令系统的一个子集,允许指令编码的长度为16位,与等价的32位代码相比较,Thumb指令集在保留32位代码优势的同时,大大的节省了系统的存储空间。 所有的Thumb指令都有对应的ARM指令,而且Thumb的编程模型也对应于ARM的编程模型,在应用程序的编写过程中,只要遵循一定调用的规则,Thumb子程序和ARM子程序就可以互相调用(如利用上一节中BX、BLX指令等)。当处理器在执行ARM程序段时,称ARM处理器处于ARM工作状态;当处理器在执行Thumb程序段时,称ARM处理器处于Thumb工作状态。 * *
显示全部