大工13春《嵌入式原理与开发》辅导资料七
大工13春《嵌入式原理与开发》辅导资料七主 题:第三章基于ARM架构的嵌入式微处理器:ARM微处理器的指令系统
学习时间:5月13日-5月19日
内 容:
第三章基于ARM的处理器体系结构基于ARM架构的嵌入式微处理器
这周我们将学习第3章中的第2节,这部分重点介绍ARM微处理器的指令系统
,下面整理出的理念框架供同学们学习。
第三章 基于ARM的处理器体系结构
3.2 ARM微处理器的指令系统
名词解释:
机器指令
机器指令被处理器直接执行,伪指令和宏指令不能。机器指令包括ARM指令集和Thumb指令集。
伪指令
伪指令是在源程序汇编期间,由汇编编译器处理。其作用是为汇编程序完成准备工作。
宏指令
宏指令在程序中用于调用宏,宏是一段独立的程序代码;在程序汇编时,对宏调用进行展开,用宏体代替宏指令。
1.ARM指令系统概述
(1)指令系统概念
指令:是规定计算机进行某种操作的命令。
指令系统:计算机能够执行的各种指令的集合。
(2)ARM指令的特点
所有指令都是32位的。
大多数指令都在单周期内完成。
所有指令都可以条件执行。
ARM指令为load/store类型。
基本指令仅36条,分成五类。
有7种寻址方式。
指令集可以通过协处理器扩展。
(3)ARM指令的格式
ARM指令基本的语法格式为:
<Opcode> {<cond>}{s} <Rd>, <Rn> {, <Operand2>}
Opcode:指令操作码。
cond:指令的条件码。
S:决定指令的操作是否影响cpsr的值。
Rd:目标寄存器编码。
Rn:包含第一个操作数的寄存器编码。
Operand2:第2操作数
(4)指令的条件码
条件码的位数和位置:每条ARM指令包含4位条件码域<cond>,它占用指令编码的最高四位。
条件码的表示:条件编码共24=16种,其中,15种用于指令的条件码。每种条件码用2个英文缩写字符表示。(见P47 表2-6)
带条件指令的执行:ARM处理器根据指令的执行条件是否满足,决定当前指令是否执行。
只有在cpsr中的条件标志位满足指定的条件时,指令才会被执行。不符合条件的代码依然占用一个时钟周期(相当于一个NOP指令)。
条件码的书写方法:条件码的位置在指令助记符的后面(因此也称为条件后缀)。
例如: MOVEQR0,R1
2.ARM 指令总体介绍
ARM体系结构支持ARM的汇编语言与C与C++的混合编程。一般的在一个完整的程序设计的中,除了初始化部分用汇编语言完成外,其大部分的编程任务一般都用C或C++完成。
寻址方式:立即数寻址、寄存器寻址、寄存器移位寻址、寄存器间接寻址、基址变址寻址、相对寻址、多寄存器寻址、块拷贝寻址、堆栈寻址。
3.2.1 ARM指令的寻址方式
目前ARM指令集支持如下几种常见的寻址方式。
1.立即寻址(立即数寻址)
例如ADDR0,R0,#1 ;R0←R0+1
2.寄存器寻址
例如ADDR0,R1,R2 ;R0←R1+R2
3.寄存器间接寻址
例如ADDR0,R1, ;R0←R1+
4.基址变址寻址
例如LDRR0, ;R0←
5.多寄存器寻址
一次可以传送几个寄存器的值。允许一条指令传送16个寄存器的任何子集(或所有16个寄存器)。例如:
LDMIA R1,{R0,R2,R5};R0 ← R2 ← R5 ←32位字对准
6.堆栈寻址ARM微处理器支持4种类型的堆栈工作方式,即
满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。
满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。
空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。
空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。
7、相对寻址
与基址变址寻址方式类似,相对寻址以程序计数器PC的当前值为基地址,指令种地地址标号作为偏移量,将两者相加之后得到操作数的有效地址。
3.2.2 ARM微处理器的指令集概述
大量的寄存器,都可用于多种用途;
Load-Store体系结构即加载/存储型,指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,对系统存储器的访问则需要通过专门的加载/存储指令来完成。
3.2.2 ARM微处理器的指令集概述
大量的寄存器,都可用于多种用途;
Load-Store体系结构即加载/存储型,指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,对系统存储器的访问则需要通过专门的加载/存储指令来完成。
2.ARM指令集的分类
(1)数据处理指令:完成寄存器的数据的算术和逻辑操作,在执行中需要两个操作数,产生单个结果。这类指令只能使用和改变寄存器中的值,每一个操作数寄存器和结果寄存器都在指令中独立的指定,即使用3地址模式。
例:ADD R0,R1,R2;R0=R1+R2
算术操作:ADD、ADC、SUB、SBC、RSB(逆向减法)、RSC、MUL、MAL(32位乘加)、SMULL(有符号64位乘法)、SMLAL、UMULL、UMLAL。 如RSB R0,R1,R2 ;R0=R2-R1
按位逻辑操作:AND、ORR、EOR、BIC(清除位操作)
比较操作:CMP、CMN、TST(按位与)、TEQ(按位异或)
寄存器移位操作:LSL、LSR(逻辑右移)、ASL(算术左移)、ASR、ROR(循环右移)、RRX(带扩展循环右移)。
例: ADDR0,R2,R3,LSR #1; R0=R2+(R3〈〈1)将R3中的内容左移1位再与R2相加送入R0。
(2)数据传送指令
这类指令把存储器中的值拷贝到寄存器中(Load)或把寄存器的值拷贝到存储器中(Store)
加载/存储指令:用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。常用的指令如下:LDR(字加载)、LDRB(字节加载)、LDRH(半字加载)、STR(字节存储)、STRH(半字存储)。
批量数据加载/存储指令:批量加载可以一次在一片连续的存储器中的数据传送到多个存储器,批量存储则完成相反的操作。常用的加载/存储指令如下: LDM(批量数据加载)、STM(批量数据存储)
(3)数据交换指令
数据交换指令:在存储器和寄存器之间交换数据。
SWP(字数据交换)和SWPB(字节数据交换)
程序状态寄存器访问指令;
MRS程序状态寄存器到通用寄存器的数据传送;
MSR通用寄存器到程序状态寄存器的数据传送
(4)移位指令
移位指令:ARM微处理器内嵌的桶型移位寄存器,支持数据的各种移位操作,一位操作在ARM指令集中部作为单独的指令使用,它只能作为指令格式中的一个字段,在汇编语言中表示为指令的选项。具体为6种类型。
LSL(逻辑左移)、ASL(算术左移)、LSR(逻辑右移)、ASR(算术右移)、ROR(循环右移)、RRX(带扩展的循环右移)。
例如:MOVR0,R1,LSL#2;将R1中的内容左移两位后传送到R0中
(5)控制流指令
控制流指令:一般指令在执行时使用存储于连续的存储器地址中的指令。控制流指令使执行切换到不同的地址。切换是永久的或保存返回地址以恢复原来的执行顺序,或者陷入系统代码。
如跳转指令:在ARM程序中有两种方法可以实现程序流程的跳转。使用专门的跳转指令和直接向程序计数器PC写入跳转地址。如B Lable;无条件转移到标号地址。
协处理器指令:ARM微处理器可支持多个协处理器。主要用于ARM处理器初始化ARM协处理器的数据处理操作,以及在ARM处理器的寄存器和协处理器的寄存器之间传送数据,和在ARM协处理器的寄存器和寄存器之间传送数据。具体包括5种指令:
CDP(操作)、LDC(数据加载)、STC:(数据存储)、MCR(处理器和协处理器寄存器的数据传送)、MRC(处理器和协处理器寄存器的数据传送)。
异常产生指令,BKPT(断点中断)。
3.Thumb指令及应用
Thumb是ARM体系结构的扩展。从标准32位ARM指令集抽出来的36条指令格式,重新编成16位的操作码。带来很高的代码密度。在运行时,这些16位的Thumb指令又由处理器解压成32位的ARM指令。
ARM体系结构除了支持执行效率很高的32位ARM指令集以外,同时支持16位的Thumb指令集。所有的Thumb指令都有对应的ARM指令,而且Thumb指令的编码模型也对应于ARM的编码模型,在应用程序的编写过程中,只要遵循一定调用的规则,Thumb子程序就可以相互调用。
当处理器执行ARM程序段时,具体存在有处于ARM工作状态和处于Thumb工作状态。 Thumb指令集中的数据处理指令的操作数仍然是32位,指令地址也为32位,但Thumb指令集为实现16位的指令长度,舍弃了ARM指令集的一些特性。如大多数的Thumb指令是无条件执行的,而几乎所有的ARM指令都是有条件的。 由于Thumb指令的长度为16位,即只用ARM指令一半的位数来实现同样的功能,所以要实现特定的程序功能,所需的Thumb指令的条数较ARM指令多。
显然若对系统的性能有较高要求时,应采用32位的存储系统和ARM指令集。若对系统的成本及功耗有较高的要求,则应使用16位的存储系统和Thumb指令集。当然若两者结合使用,充分发挥其各自的特点,会取得更好的效果。 Thumb指令集可以看作是ARM指令集的一个子集,Thumb指令长度为16位,但Thumb指令集中的数据处理指令的操作数仍然是32位的,指令寻址地址也是32位的。
Thumb指令集由四大类构成
4.ARM源程序文件格式
5.汇编语言上机过程
用ARM汇编语言编写的源程序,要使之运行必须经过以下几个步骤:
6.ARM的开发工具SDT2.5和ADS1.2
SDT的英文全称是ARM Software DevelopmentKit ,是ARM公司为方便用户在ARM芯片上进行应用软件开发而推出的一整套集成开发工具包。目前的最新版本是2.5.2,但从版本2.5.1开始,ARM公司宣布推出一套新的集成开发工具ARM ADS ,取而代之。
ARM SDT支持最高到ARM9的所有ARM处理器芯片的开发,包括Strong ARM。
ADS1.2开发环境
ADS1.2 (ARM Developer Suite)提供了创建ARM架构应用系统的完整的软件开发方案,是ARM公司新近推出的一套集成开发环境。用户使用ADS编辑、编译和调试C、C++ 以及汇编程序。ADS开发环境包括:
①代码生成工具(Code Generation Tools)
代码生成工具包括ARM和Thumb指令集的C和嵌入式C++编译器、汇编器和链接器。这些编辑器是工业中针对ARM处理器开发的,能获得比其他开发环境更紧凑的代码密度,以及更小的映像文件。
②Windows平台下的集成开发环境(Code Warrior IDE) ADS提供了强大的Code Warrior IDE 来整合ARM 开发工具,提供了图形接口的项目管理器,极大地方便了用户管理复杂的工程文件,并适合通过网络进行小组开发。同时,Code Warrior IDE 还提供了对第三方调试的接口支持。
③强大的调试器(Debugger)
ADS包括以下2个调试器:
AXD(ARM eXtended Debugger)。AXD提供了一个专业调试软件所能提供的所有调试功能,包括简单和复杂的断点功能、观察点、支持软件和硬件目标以及便捷的图形界面接口等。 ARMSD(ARM Symbolic Debugger)。ARMSD是一个命令行方式调试器,提供了所有的基本调试功能,包括断点、观察点和软硬件目标的支持等。
④指令集模拟器(Instruction Set Simulator)
ADS中的指令集模拟器提供了对ARM和Thumb内核处理器的精确的模拟,允许用户在硬件条件满足前开发和测评(Benchmark)代码。
⑤基于ROM的调试工具——ARM Firmware Suit
ARM Firmware Suit 帮助用户在Integerator系统和其他ARM内核系统上快速建立应用程序和操作系统的整合。
⑥ARM应用库
ADS中的应用库已经针对ARM和Thumb内核处理器进行了优化,并且提供了不包含在标准C、C++库中的功能函数及代码,给用户的开发提供了方便。
支持各种ARM核和处理器:ARM9E、ARM10、Jazelle、StrongARM和Intel Xscale;完整的在线文档;支持实时调试和跟踪。
代码生成工具、Code Warrior IDE、调试器、指令集模拟器、ARM Firmware Suit和ARM应用库是构成ADS开发环境的主要独立模块,分别实现不同的调试开发功能。
7.汇编语言与C/C++的混合编程
通常有以下几种方式:
在C/C++代码中嵌入汇编指令;
在汇编程序和C/C++的程序之间进行变量的互访;
汇编程序和C/C++程序之间的相互调用。
在以上的几种混合编程技术中,必须遵守一定的调用规则,如物理寄存器的使用、参数的传递等。在实际的使用中,采用较多的方式是程序初始化部分使用汇编语言完成,然后用C/C++完成主要的编程任务,程序在执行时首先完成初始化过程,然后跳转到C/C++程序代码中,汇编程序和C/C++程序之间一般没有参数传递,也没有频繁的相互调用,因此这个程序结构显得相对简单和容易理解。
习题
1. 机器指令被处理器直接执行,伪指令和宏指令不能。机器指令包括什么?
ARM指令集和Thumb指令集。
2,ARM指令的特点
所有指令都是32位的。
大多数指令都在单周期内完成。
所有指令都可以条件执行。
ARM指令为load/store类型。
基本指令仅36条,分成五类。
有7种寻址方式。
指令集可以通过协处理器扩展。
3,在汇编语言中表示为指令的选项。具体分为哪为6种类型?
LSL(逻辑左移)、ASL(算术左移)、LSR(逻辑右移)、ASR(算术右移)、ROR(循环右移)、RRX(带扩展的循环右移)。
4,Thumb指令集由哪四大类构成?
数据处理指令;跳转指令;Load/Store指令;软件中断指令。
页:
[1]