当前位置: 首页 > article >正文

精简指令集结构(Reduced Instruction Set Computer,RISC)

ARM内核采用精简指令集结构(Reduced Instruction Set Computer,RISC)体系结构。RISC技术产生于20世纪70年代,其设计目标是创建一种能以每个时钟周期执行一条指令的速度很快的计算机。RISC的设计重点在于降低由硬件执行的指令复杂度,这是因为软件比硬件容易提供更大的灵活性和更高的智能。与其相对的传统复杂指令级计算机(CISC)则更侧重于硬件执行指令的功能性,这使CISC指令变得更复杂。

RISC设计思想

(1)Load/Store体系结构Load/Store体系结构也称为寄存器/寄存器体系结构或者RR系统结构。在这类结构中,操作数和运算结果不是通过主存储器直接取回而是借用大量标量和矢量寄存器来取回的。与RR体系结构相反,还有一种存储器/存储器体系结构,在这种体系结构中,源操作数的中间值和最后的运算结果是直接从主存储器中取回的,这类结构的缩写符号是SS体系结构。

(2)固定长度指令固定长度指令使得机器译码变得比较容易。由于指令简单,需要更多的指令来完成相同的工作,但是开发快速的价格低廉的存储器装置使得可以更快地执行较大代码段(大量指令成为可能)。

(3)硬联控制RISC机以硬联控制指令为特点,而CISC的微代码指令则相反。与用CISC(常常是可变长度的)指令集来使处理器的语义效率最大相反,简单指令往往容易被机器翻译。像CISC那样通过执行较少指令来完成工作未必省时,因为还要包括微代码译码所需要的时间。因此,由硬件实现指令在执行时间方面提供了更好的平衡。除此之外,还节省了芯片上用于存储微代码的空间并且消除了翻译微代码所需的时间。

(4)流水线指令处理过程被拆分为几个更小的、能够被流水线并行执行的单元。在理想情况下,流水线每周期前进一步,可获得更高的吞吐率。

(5)寄存器RICS处理器拥有更多的通用寄存器,每个寄存器都可存放数据或地址。寄存器可为所有的数据操作提供快速的局部存储访问。

RISC和CISC之间主要的区别

 

为了使ARM指令集能够更好地满足嵌入式应用的需要,ARM指令集和单纯的RISC定义有以下几方面的不同。

(1)一些特定指令的周期数可变并非所有的ARM指令都是单周期的,如多寄存器转载/存储的Load/Store指令的周期数就不确定,必须根据被传送的寄存器个数而定。如果是访问连续的存储器地址,就可以改善性能,因为连续的存储器访问通常比随机访问要快。同时,代码密度也得到了提高,因为在函数的起始和结尾,多个寄存器的传输是很常用的操作。

(2)内嵌桶形移位器产生更复杂的指令内嵌桶形移位器是一个硬件部件,在一个输入寄存器被一条指令使用之前,内嵌桶形移位器可以处理该寄存器中的数据。它扩展了许多指令的功能,以此改善了内核的性能,提高了代码密度。

(3)Thumb指令集ARM处理器根据RISC的原理设计,但是由于各种原因,在低代码密度上,它比其他多数RISC要好一些,然而它的代码密度仍不如某些CISC处理器。在代码密度重要的场合,ARM公司在某些版本的ARM处理器中加入了一个称为Thumb结构的新型机构。Thumb指令集是原来32位ARM指令集的16位压缩形式,并在指令流水线中使用了动态解压缩硬件。Thumb代码密度优于多数CISC处理器达到的代码密度。

(4)条件执行只有当某个特定条件满足时指令才会被执行。这个特性可以减少分支指令数目,从而改善性能,提高代码密度。

(5)DSP指令一些功能强大的数字信号处理器指令(DSP)被加入到标准的ARM指令中,以支持快速的16×16位乘法操作及饱和运算。在某些应用中,传统的方法需要微处理器加上DSP才能实现。ARM这些增强指令,使得ARM处理器也能够满足这些应用的需要。

综上所述,ARM体系结构的主要特征如下:

① 大量的寄存器,它们都可以用于多种用途;

② Load/Store体系结构;

③ 每条指令都条件执行;

④ 多寄存器的Load/Store指令;

⑤ 能够在单时钟周期执行的单条指令内完成一项普通的移位操作和一项普通的ALU操作;

⑥ 通过协处理器指令集来扩展ARM指令集,包括在编程模式中增加了新的寄存器和数据类型;如果把Thumb指令集也当做ARM体系结构的一部分,那么还可以加上16位的Thumb指令集;

⑦ 在Thumb体系结构中以高密度16位压缩形式表示指令集。


http://www.kler.cn/a/3929.html

相关文章:

  • 1166 Summit (25)
  • 记录node-sass无法安装的问题
  • 【分类】【损失函数】处理类别不平衡:CEFL 和 CEFL2 损失函数的实现与应用
  • R数据分析:有调节的中介与有中介的调节的整体介绍
  • OpenVela——专为AIoT领域打造的开源操作系统
  • 什么是长连接?Netty如何设置进行长连接?
  • 电路原理——线性电阻电路的分析方法和电路原理
  • Go语言基础:数组定义及循环遍历
  • RocketMQ 事务消息 原理及使用方法解析
  • 【MySQL】DDL_修改、删除数据库表
  • 脉诊(切脉、诊脉、按脉、持脉)之法——入门篇
  • 【SpringBoot17】SpringBoot中使用Quartz管理定时任务
  • 以太坊2.0-上海升级节点详细搭建文档
  • “蓝桥杯”递推和递归(一)——取数位
  • 通过小三越位,彻底弄懂 https 原理本质(三)加密漏洞
  • Python中 __init__的通俗解释是什么?
  • Linux项目自动化构建工具-make/makefile 介绍及使用
  • 【RV1126】调试GT911,1024x600 7寸 MIPI 电容触摸屏
  • 在 Python 中将字符串转换为集合
  • Vector - CAPL - 实时时间on *(续2)
  • 程序员面试攻略:面试中的技巧(付费资料)
  • 淘宝天猫价格监控接入方案
  • 面试热点题:回溯算法 递增子序列与全排列 II
  • 【chatgpt】点云转图片后圆特征检测
  • Linux系统之安装PostgreSQL数据库
  • 我的第一台电脑的故事