【嵌入式ARM指令系统】CISC与RISC
目录
一、CISC—复杂指令集计算机
自从第一台计算机在50年代问世,计算机汇编指令系统经历了几个阶段:
- 50年代的计算机汇编指令系统主要是以定点数为主的简单的加/减和逻辑运算指令,指令数目在10到90条。
- 60年代的计算机汇编指令系统发展到以浮点数为主的加/减,乘除指令,体现在计算机的多种寻址方式,指令数目在100到200条。
- 到70年代,伴随计算机硬件和集成电路的发展,计算机汇编指令系统更为复杂,发展成为了公认的复杂指令集计算机(COMPLEX INSTRUCTION SET COMPUTER-CISC),其最显著的特点是指令繁多,指令长度不固定,长短不一,指令格式多样化,存储器寻址方式多样化。
INTEL公司的PENTINUM就是最典型的复杂指令集计算机(CISC),由于计算机硬件的复杂性和指令系统的复杂性的增加,CPU的面积变得大,其功耗也变高,PENTINUM的处理器上装有小风扇就是出于此原因。
解释一下:定点数是什么?与浮点数的区别是什么?
在计算机系统的发展过程中,曾经提出过多种方法表达实数。定点数(Fixed Point Number),一种典型的实数表达形式,小数点固定地位于实数所有位数中间的某个位置。
货币的表达就可以使用这种方式,比如 99.00 或者 00.99 可以用于表达具有四位精度(Precision),小数点后有两位的货币值。由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。
定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或特别小的数。
最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。
比如 123.45 用十进制科学计数法可以表达为 1.2345 × 102 ,其中 1.2345 为尾数,10 为基数,2 为指数。浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。
二、RISC—精简指令集计算机
到了80年代,由于计算机指令系统太复杂,在美国加州大学BERKELEY分校有人提出了精简指令系统计算机(REDUCED INSTRUCTION SET COMPUTER-RISC)的概念,主要思想是选用最常用的指令,指令长度固定,避免繁多的指令格式,存储器寻址方式只有规范的LOAD/STORE方式。
由于指令系统的精简化,基于RISC的CPU面积变小,其功耗也降低。嵌入式设备和手持设备大多采用基于RISC的CPU,小易携带而且功耗低。ARM和MIPS是最典型的基于RISC的处理器。
下表1-1是计算机指令系统 CISC 和 RISC 的性能指标比较。
三、ARM 指令结构
-
冯诺依曼体系与哈佛体系
ARM7为冯诺依曼(VON NEUMANNH)体系结构,其主要特点是低功耗,3级流水线作业,每秒种可处理0.9百万条指令,高密度32位ARM指令集兼容16位的THUMB指令集。可应用于有低价位,低功耗要求的工业控制,手机等设备。
ARM9为哈佛(HARVARD)体系结构,其主要特点是低功耗,5级流水线作业,每秒种可处理1.1百万条指令,高密度32位ARM指令集兼容16位的THUMB指令集,存储管理单元(MMU),指令高速缓冲(INSTRUCTION CACHE)和数据高速缓冲(DATA CACHE)。另外,ARM9E还具有DSP和JAVA的功能,可应用于数码相机,数码摄像机和无线设备。ARM9为哈佛体系结构,可并行处理,每秒种处理的指令比ARM7多了20万条。
下图是两种体系结构下CPU读取数据的时序图,可以很明显的看出ARM9的优势。
-
ARM处理器模式
ARM处理器有6种工作模式,分别是:
- User(无优先级的模式,大部分认为在此模式下运行)
- FIQ(当高级别的快速中断申请后进入)
- IRQ(当普通的中断申请后进入)
- Supervisor(复位后并且软中断指令执行后进入)
- Abort(用于处理内存访问冲突)
- Undef(用于处理未定义的指令)
-
ARM寄存器
ARM有37个寄存器,均为32位长,其中一个PC,一个程序状态寄存器(CPSR),5个可存的程序状态寄存器(SPSR),30个通用寄存器。
程序状态寄存器(CPSR,SPSR),如下图。
每种模式下寄存器的分布情况如下图所示,其中通用寄存器R13为堆栈指针寄存器(SP),R14为链接寄存器,R15为PC(Program Counter)寄存器。
当带链接操作的分支指令执行完操作后,链接寄存器(LR)的作用是存放返回地址。例如:
BL Label; //LR=PC+4,记住返回地址(带链接的分支指令)
...
Label: ADDS R0,R1,R2;
MOV PC,LR; //将LR中的返回地址存入PC
上一篇: 嵌入式知识-学习笔记(2):ARM汇编指令集与伪指令
下一篇: Less 快速入门(一)