嵌入式学习(一)ARM微处理器

术语

RISC(Reduced Instruction Set Computer,精简指令集计算机)
CISC(Complex Instruction Set Computer,复杂指令集计算机)

RISC优点

- 采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种。
- 使用单周期指令,便于流水线操作执行。
- 大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/ 存储指令可以访问存储器,以提高指令的执行效率。
- 所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率。
- 可用加载/存储指令批量传输数据,以提高数据的传输效率。
- 可在一条数据处理指令中同时完成逻辑处理和移位处理。
- 在循环处理中使用地址的自动增减来提高运行效率。

ARM微处理器的寄存器结构

ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器包括:
- 31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。
- 6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。

ARM微处理器的指令结构

ARM指令为32位的长度
Thumb指令为16位长度
Thumb指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省30%~40%以上的存储空间,同时具备32位代码的所有优点。

ARM微处理器工作模式

工作模式 模式描述
用户模式(usr) ARM处理器正常的程序执行状态
系统模式(sys) 运行具有特权的操作系统任务
快中断模式(fiq) 支持高速数据传输或通道处理
管理模式(svc) 操作系统保护模式
数据访问终止模式(abt) 用于虚拟存储器及存储器保护
中断模式(irq) 用于通用的中断处理
未定义指令终止模式(und) 支持硬件协处理器的软件仿真
其余6种模式称为非用户模式或特权模式 用户模式和系统模式之外的5种模式称为异常模式。

ARM微处理器的指令集概述

助记符 指令功能描述
ADC 带进位加法指令
ADD 加法指令
AND 逻辑与指令
B 跳转指令
BIC 位清零指令
BL 带返回的跳转指令
BLX 带返回和状态切换的跳转指令
BX 带状态切换的跳转指令
CDP 协处理器数据操作指令
CMN 比较反值指令
CMP 比较指令
EOR 异或指令
LDC 存储器到协处理器的数据传输指令
LDM 加载多个寄存器指令
LDR 存储器到寄存器的数据传输指令
MCR 从ARM寄存器到协处理器寄存器的数据传输指令
MLA 乘加运算指令
MOV 数据传送指令
MRC 从协处理器寄存器到ARM寄存器的数据传输指令
MRS 传送CPSR或SPSR的内容到通用寄存器指令
MSR 传送通用寄存器到CPSR或SPSR的指令
MUL 32位乘法指令
MLA 32位乘加指令
MVN 数据取反传送指令
ORR 逻辑或指令
RSB 逆向减法指令
RSC 带借位的逆向减法指令
SBC 带借位减法指令
STC 协处理器寄存器写入存储器指令
STM 批量内存字写入指令
STR 寄存器到存储器的数据传输指令
SUB 减法指令
SWI 软件中断指令
SWP 交换指令
TEQ 相等测试指令
TST 位测试指令

指令的条件域

条件码 助记符后缀 标 志 含 义
0000 EQ Z置位 相等
0001 NE Z清零 不相等
0010 CS C置位 无符号数大于或等于
0011 CC C清零 无符号数小于
0100 MI N置位 负数
0101 PL N清零 正数或零
0110 VS V置位 溢出
0111 VC V清零 未溢出
1000 HI C置位Z清零 无符号数大于
1001 LS C清零Z置位 无符号数小于或等于
1010 GE N等于V 带符号数大于或等于
1011 LT N不等于V 带符号数小于
1100 GT Z清零且(N等于V) 带符号数大于
1101 LE Z置位或(N不等于V) 带符号数小于或等于
1110 AL 忽略 无条件执行

Thumb指令及应用

由于Thumb指令的长度为16位,即只用ARM指令一半的位数来实现同样的功能,所以,要实现特定的程序功能,所需的Thumb指令的条数较ARM指令多。在一般的情况下,Thumb指令与ARM指令的时间效率和空间效率关系为:
—Thumb代码所需的存储空间约为ARM代码的60%~70%
—Thumb代码使用的指令数比ARM代码多约30%~40%
—若使用32位的存储器,ARM代码比Thumb代码快约40%
—若使用16位的存储器,Thumb代码比ARM代码快约40%~50%
—与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30%
显然,ARM指令集和Thumb指令集各有其优点,若对系统的性能有较高要求,应使用32位的存储系统和ARM指令集,若对系统的成本及功耗有较高要求,则应使用16位的存储系统和Thumb指令集。当然,若两者结合使用,充分发挥其各自的优点,会取得更好的效果。

ARM程序设计基础

在ARM的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。

符号定义(Symbol Definition)伪指令

符号定义伪指令用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。常见的符号定义伪指令有如下几种:
—用于定义全局变量的GBLA、GBLL和GBLS。
—用于定义局部变量的LCLA、LCLL和LCLS。
—用于对变量赋值的SETA、SETL、SETS。
—为通用寄存器列表定义名称的RLIST。

数据定义(Data Definition)伪指令

数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。常见的数据定义伪指令有如下几种:
—DCB 用于分配一片连续的字节存储单元并用指定的数据初始化。
—DCW(DCWU) 用于分配一片连续的半字存储单元并用指定的数据初始化。
—DCD(DCDU) 用于分配一片连续的字存储单元并用指定的数据初始化。
—DCFD(DCFDU)用于为双精度的浮点数分配一片连续的字存储单元并用指定的数据初始化。
—DCFS(DCFSU) 用于为单精度的浮点数分配一片连续的字存储单元并用指定的数据初始化。
—DCQ(DCQU) 用于分配一片以8字节为单位的连续的存储单元并用指定的数据初始化。
—SPACE 用于分配一片连续的存储单元
—MAP 用于定义一个结构化的内存表首地址
—FIELD 用于定义一个结构化的内存表的数据域

汇编控制(Assembly Control)伪指令

汇编控制伪指令用于控制汇编程序的执行流程,常用的汇编控制伪指令包括以下几条:
—IF、ELSE、ENDIF
—WHILE、WEND
—MACRO、MEND
—MEXIT

其他常用伪指令

—AREA
—ALIGN
—CODE16、CODE32
—ENTRY
—END
—EQU
—EXPORT(或GLOBAL)
—IMPORT
—EXTERN
—GET(或INCLUDE)
—INCBIN
—RN
—ROUT

你可能感兴趣的:(嵌入式学习(一)ARM微处理器)