嵌入式系统-概述+ARM指令

嵌入式系统是以应用为中心,以计算机技术为基础,采用可裁剪软硬件,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统及用户应用程序四部分组成。

简单说,网吧里的电脑是通用计算机,而mp3、豆浆机等内含的都有嵌入式系统。嵌入式系统的特点是功耗低、体积小、成本低。

ARM微处理器是主流的嵌入式处理器。

嵌入式操作系统有:Windows CE、Android、VxWorks等。



ARM的全称是 Advanced RISC Machine。

RISC,Reduced Instruction Set Computer,精简指令集计算机,与之相对的是Complex ISC。前者因指令集简单,所以硬件电路简单,故价格低。

ARM处理器支持两种指令集:ARM指令集(32位)、Thumb指令集(16位)。对应相应两种状态。

操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。

ARM有用户模式和特权模式。

异常:Exception。原有流程被打断,转而执行新的流程叫异常。例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。

ARM的数据存储



ARM有:

31个通用寄存器,均为32位的寄存器;具体有三类——未分组寄存器R0~R7,分组寄存器R8~R14,程序计数器PC(R15)。

R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。

6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位。

寻址空间为4G。

数据存储有小端模式——低地址存储数据的高位和大端模式——低地址存储数据的低位。

ARM微处理器中支持字节(8位)、半字(16位)、字(32位)三种数据类型,其中,字需要4字节对齐(地址的低两位为0)、半字需要2字节对齐(地址的最低位为0)

ARM的寻址

1.立即数寻址;

其实并不需要真正的寻址,操作数已经在指令中了。立即数一般以‘#’为前缀。

2.寄存器寻址;

操作数在寄存器中,不需访问存储器。

3.寄存器移位寻址;

add r1,r1,r2,ror #0x2;         ;r2循环右移两位后与r1相加,结果放入r1中。

4.寄存器间接寻址;

此时寄存器中存储的是地址。

str r1,[r2]       ;将r1的值存入r2所指地址的存储器中

5.基址变址寻址;

 

6.多寄存器寻址;

ldmia r0,{r1,r2,r3,r4,r5};r0->r1,r0+4->r2,...,r0+16->r5

7.堆栈寻址;

栈是一种后进先出的数据结构。栈指针始终指向栈顶,这个寄存器一般是R13.

8.相对寻址;

 

RAM指令简介

 

load/store ——从存储器中读某个值,操作完后再将其放回存储器中

ARM指令的一般格式见下:

<opcode> {<cond>} {S}    <Rd> ,<Rn>{,<operand2>} 

<>表示必须;{}表示可选。

Rd:目标寄存器;  Rn:第1个操作数的寄存器;


1.跳转指令

将程序计数器PC的值改写为跳转目的地址。 mov PC,#immediate

B (Branch)

基本跳转指令。 B{condition},Label1

BL(Branch with Link)

带连接的跳转指令。在跳转之前,会先将下一条要执行的指令地址放到R14中,一般用于函数调用。

BX(Branch and eXchange)

用于ARM和Thumb状态间的转换。

2.mov

MOV   Rd,operand2 ;数据传送,Rd←operand2 

3.add adc 

ADD     R1,R1,R2,LSL #2       ;R1=R1+R2<<2 

4.sub sbc

,并影响标志位 

5.and orr 

分别是c++中的 && || 

6.cmp

cmp  Rn,Operand2   将Rn寄存器的值减去operand2的值,除了最后的计算结果被丢弃外,整个过程和subs相同。

7.mul

乘法指令

 

ARM开发IDE

ADS(ARM Developer Suite),是在1993年由Metrowerks公司开发是ARM处理器下最主要的开发工具。

arm架构基础镜像 arm架构操作系统_操作数