嵌入式学习(一)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的指令
MUL32位乘法指令
MLA32位乘加指令
MVN数据取反传送指令
ORR逻辑或指令
RSB逆向减法指令
RSC带借位的逆向减法指令
SBC带借位减法指令
STC协处理器寄存器写入存储器指令
STM批量内存字写入指令
STR寄存器到存储器的数据传输指令
SUB减法指令
SWI软件中断指令
SWP交换指令
TEQ相等测试指令
TST位测试指令

指令的条件域

条件码助记符后缀标 志含 义
0000EQZ置位相等
0001NEZ清零不相等
0010CSC置位无符号数大于或等于
0011CCC清零无符号数小于
0100MIN置位负数
0101PLN清零正数或零
0110VSV置位溢出
0111VCV清零未溢出
1000HIC置位Z清零无符号数大于
1001LSC清零Z置位无符号数小于或等于
1010GEN等于V带符号数大于或等于
1011LTN不等于V带符号数小于
1100GTZ清零且(N等于V)带符号数大于
1101LEZ置位或(N不等于V)带符号数小于或等于
1110AL忽略无条件执行

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值