ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

指令解码

2022-02-22 15:00:26  阅读:206  来源: 互联网

标签:解码 指令 6.3 处理器 寄存器 CPSR


指令解码

指令解码:将指令中携带的信息提取出来,处理器使用这些信息来控制后续的流水线执行这条指令。

CISC指令长度不固定,解码首先需要分辨指令边界,寻址方式也很复杂,提升了解码难度。

RISC指令长度固定,寻址方式相对简单,解码更容易。

超标量处理器希望一个周期能够解码n条指令,对应n个解码电路。

6.1 指令缓存

为减少I-Cache miss带来的影响,处理器可以在取指令阶段从I-Cache中取出的指令个数多余每周期可以解码的指令个数。需要在取指令和译码之间加入缓存,将多取的指令保存起来。

指令缓存本质是个FIFO。

  • I-Cache发生miss的时候,指令缓存中仍有一些指令余量。如果miss能够很快解决,就基本不会引起流水线暂停,保证处理器性能。
  • 一些特殊的指令如乘累加等,实际执行会拆分成若干条普通指令。这样就会增加指令数量,后续送过来的指令不能被全部解码就需要放进FIFO等待。

指令缓存FIFO实际实现时不会采用多端口SRAM,而是采用多个单端口SRAM。避免使用多端口SRAM带来的硬件和速度上的限制。

6.2 一般情况

MIPS指令集一般的指令包含Rs、Rt两个源寄存器,Rd一个目的寄存器。

ARM指令集一般的指令包含Rn、Rs、Rm三个源寄存器,Rd一个目的寄存器。

  • ARM中条件执行的指令还有第四个源寄存器CPSR,通过CPSR判断条件
  • 改变状态的指令CPSR会作为第二个目的寄存器。除了将结果写到正常目的寄存器外,还要将结果执行状态写道CPSR寄存器。
  • 对前后变址的load/store指令,也包含第二个目的寄存器。除了将结果写到正常目的寄存器外,还需要将地址寄存器内容进行更新。
  • 其他另类的LDM/STM指令,包括个数不确定的目的寄存器和源寄存器。

6.3 特殊情况

ARM指令集中的LDM/STM指令,需要多个周期才能够完成,而且目的寄存器、源寄存器有多个。在超标量处理器中不会直接处理这种复杂的指令,而是转化为多条简单的指令,按照一般方式进行处理。

6.3.1 分支指令的处理

在对预测失败进行状态恢复时,为了减少复杂度,需要限制每周期内解码的分支指令个数。而若是每周期读取了多条分支指令,就需要在解码阶段处理这个情况。

简单方法:遇到分支指令时,就不在本周起对这条分支指令后面的指令进行解码。

6.3.2 乘累加/乘法指令的处理

在4-way超标量处理器中,如果一个周期内解码的四条指令都是乘累加类型的指令,那么会解码出八条指令。寄存器重命名不可能设计成每周期可以对8条指令进行操作,这会浪费大量的硬件面积。

6.3.3 前/后变址指令的处理

与乘累加处理类似

ARM采用一条指令的功能MIPS需要两条指令才能完成,可以占用更少的指令存储器,降低I-Cache的缺失率,但也会占用更多硅片面积,增加功耗。

6.3.4 LDM/STM指令的处理

LDM:将存储器中一片连续地址空间上的数据加载到多个寄存器

STM:将多个寄存器的内容保存在存储器中的一片连续空间

处理时拆成多条普通的load/store指令

6.3.5 条件执行指令的处理

CPSR寄存器作为状态寄存器

标签:解码,指令,6.3,处理器,寄存器,CPSR
来源: https://www.cnblogs.com/icwangpu/p/15923169.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有