嵌入式系统-概述+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处理器下最主要的开发工具。