指令集架构

编辑
本词条由“匿名用户” 建档。

在计算机科学中,一个指令集架构(ISA),也被称为计算机体系结构,是一个抽象的模型一的计算机。执行由该ISA描述的指令的设备,例如中央处理单元(CPU),称为实现。 一般而言,指令集架构定义了支持的指令、数据类型、寄存器、管理主内存的硬件支持、基本特性(例如内存一致性、寻址模式、虚拟内存)以及一系列实现的输入/输出模型。 指令集架构以不依赖于该实现的特征的方式指定在该ISA的实现上运行的机器代码的...

指令集架构

编辑

计算机科学中,一个指令集架构(ISA),也被称为计算机体系结构,是一个抽象的模型一的计算机。执行由该ISA描述的指令的设备,例如中央处理单元(CPU),称为实现。

一般而言,指令集架构定义了支持的指令、数据类型、寄存器、管理主内存的硬件支持、基本特性(例如内存一致性、寻址模式、虚拟内存)以及一系列实现的输入/输出模型。

指令集架构以不依赖于该实现的特征的方式指定在该ISA的实现上运行的机器代码的行为,提供实现之间的二进制兼容性。这使得ISA的多种实现在性能、物理大小和货币成本(除其他外)等特征上不同,但能够运行相同的机器代码,因此性能较低、成本较低的机器可以更换成本更高、性能更高的机器,而无需更换软件。它还支持微架构的演进ISA的实现,以便ISA的更新、更高性能的实现可以运行在前几代实现上运行的软件。

如果操作系统为特定指令集架构维护了标准且兼容的应用程序二进制接口(ABI),则机器代码将在该ISA和操作系统的未来实现上运行。但是,如果一个ISA支持运行多个操作系统,它并不能保证一个操作系统的机器代码会在另一个操作系统上运行,除非xxx个操作系统支持运行为另一个操作系统构建的机器代码。

可以通过添加指令或其他功能,或添加对更大地址和数据值的支持来扩展ISA;扩展ISA的实现仍然能够为没有这些扩展的ISA版本执行机器代码。使用这些扩展的机器代码只会在支持这些扩展的实现上运行。

它们提供的二进制兼容性使ISA成为计算中最基本的抽象之一。

指令集架构的分类

编辑

指令集架构可以按多种不同方式分类。一个常见的分类是按体系结构的复杂性。一个复杂指令集计算机(CISC)有许多专门的说明,其中一些可能只在实际程序中很少使用。甲精简指令集计算机(RISC)通过有效地实现仅是经常在程序中使用的指令,而较不常见的操作被作为子程序来实现,其具有产生的额外处理器的执行时间通过很少使用偏移简化了处理器。

其他类型包括超长指令字(VLIW)架构,以及密切相关的长指令字(LIW)和显式并行指令计算(EPIC)架构。这些架构通过让编译器负责指令发布和调度,以比RISC和CISC更少的硬件来开发指令级并行性。

已经研究了更复杂的体系结构,例如最小指令集计算机(MISC)和一个指令集计算机(OISC)。这些是理论上重要的类型,但尚未商业化。

指令集架构说明

编辑

机器语言是由离散的语句或指令构成的。在处理架构上,给定指令可以指定:

  • 操作码(要执行的指令)例如添加、复制、测试
  • 任何显式操作数:

寄存器文字/常量值用于访问内存的寻址模式

更复杂的操作是通过组合这些简单的指令来构建的,这些指令是按顺序执行的,或者按照控制流指令的其他方式执行。

指令类型

许多指令集常见的操作示例包括:

数据处理和内存操作

  • 设置一个寄存器到一个固定的恒定值。
  • 将数据从内存位置或寄存器复制到内存位置或寄存器(机器指令通常称为move;但是,该术语具有误导性)。用于存储寄存器的内容、计算结果,或检索存储的数据以便稍后对其进行计算。通常称为加载和存储操作。
  • 从硬件设备读取和写入数据。

算术和逻辑运算

  • 加、减、乘或除两个寄存器的值,将结果放在一个寄存器中,可能在一个状态寄存器中设置一个或多个条件代码。
    • 增量,在某些ISA中递减,在琐碎的情况下保存操作数获取。
  • 执行按位运算,例如,取一对寄存器中相应位的与和或取相,取寄存器中每一位的取反。
  • 比较寄存器中的两个值(例如,查看一个值是否较小,或者它们是否相等)。
  • 用于对浮点数进行算术运算的浮点指令s。

控制流操作

  • 分支到程序中的另一个位置并在那里执行指令。
  • 如果某个条件成立,则有条件地分支到另一个位置。
  • 间接分支到另一个位置。
  • 调用另一个代码块,同时保存下一条指令的位置作为返回点。

协处理器指令

  • 从协处理器加载/存储数据或与CPU寄存器交换数据。
  • 执行协处理器操作。

复杂指令

处理器可能在其指令集中包含“复杂”指令。单个“复杂”指令执行的操作可能需要在其他计算机上执行许多指令。此类指令的典型代表是执行多个步骤、控制多个功能单元或以其他方式出现在比给定处理器实现的大量简单指令更大的范围内的指令。“复杂”指令的一些示例包括:

  • 一次将多个寄存器传入或传出内存(尤其是堆栈)
  • 移动大内存块(例如字符串复制或DMA传输)
  • 复杂整数和浮点运算(例如平方根,或超越函数,如对数,正弦,余弦等)
  • SIMD指令s,单个指令并行对许多同质值执行操作,可能在专用的SIMD寄存器中
  • 执行原子测试和设置指令或其他读-修改-写原子指令
  • 使用来自内存而不是寄存器的操作数执行ALU操作的指令

复杂指令在CISC指令集中比在RISC指令集中更常见,但RISC指令集中也可能包含它们。RISC指令集通常不包括带有内存操作数的ALU操作,或移动大内存块的指令,但大多数RISC指令集包括SIMD或向量指令,它们同时对多条数据执行相同的算术运算。SIMD指令能够在最短的时间内处理大型向量和矩阵。SIMD指令允许轻松并行化通常涉及声音、图像和视频处理的算法。各种SIMD实现已以MMX商品名推向市场,3D现在!,和AltiVec。

指令编码

一条指令可能有多个字段,用于标识逻辑操作,还可能包括源地址和目标地址以及常量值。这是MIPS“立即添加”指令,它允许选择源和目标寄存器并包含一个小常量。

在传统架构中,一条指令包含一个操作码,用于指定要执行的操作,例如将内存的内容添加到寄存器——以及零个或多个操作数说明符,这些说明符可以指定寄存器、内存位置或文字数据。操作数说明符可能具有确定其含义的寻址模式,也可能位于固定字段中。在包括许多微码架构的超长指令字(VLIW)架构中,在单个指令中指定多个同时运行的操作码和操作数。

一些特殊指令集没有操作码字段,例如传输触发架构(TTA),只有操作数。

所述第四虚拟机和其他“0操作数”指令集缺少任何操作数说明符字段,如一些堆叠机包括NOSC。

条件指令通常有一个谓词字段——几位编码特定条件以导致执行而不是不执行操作。例如,如果条件为真,条件分支指令将转移控制,以便继续执行程序的不同部分,如果条件为假,则不转移控制,从而按顺序继续执行。有的指令集也有条件移动,这样移动就会被执行,数据存放在目标位置,如果条件为真,不执行,目标位置不修改,如果条件为假。类似地,IBMz/Architecture有一个条件存储指令。一些指令集在每条指令中都包含一个谓词字段;这就是所谓的分支预测。

指令集架构设计

编辑

指令集的设计是一个复杂的问题。微处理器的历史有两个阶段。xxx个是CISC(复杂指令集计算机),它有许多不同的指令。然而,在1970年代,IBM等地方做了研究,发现集合中的许多指令都可以消除。结果是RISC(精简指令集计算机),一种使用较小指令集的架构。更简单的指令集可以提供更高速度、减小处理器尺寸和降低功耗的潜力。但是,更复杂的集合可能会优化常见操作,提高内存和缓存效率,或者简化编程

一些指令集设计者为某种系统调用或软件中断保留一个或多个操作码。例如,MOSTechnology6502使用00H,ZilogZ80使用八个代码C7,CF,D7,DF,E7,EF,F7,FFH而Motorola68000使用A000..AFFFH范围内的代码。

如果指令集满足Popek和Goldberg虚拟化要求,则快速虚拟机更容易实现。

如果将内存的“未编程”状态解释为NOP,则在免疫感知编程中使用的NOP片更容易实现。

在具有多个处理器的系统,无阻塞同步算法是实现容易得多如果该指令集包括用于一些诸如“支持读取和加载”,“负载链路/条件存储”(LL/SC)或“原子比较和交换”。

指令集实现

编辑

任何给定的指令集都可以通过多种方式实现。实现特定指令集的所有方式都提供相同的编程模型,并且该指令集的所有实现都能够运行相同的可执行文件。实现指令集的各种方式会在成本、性能、功耗、大小等之间做出不同的权衡。

指令集架构

在设计处理器的微架构时,工程师使用“硬连线”电子电路块(通常单独设计),例如加法器、多路复用器、计数器、寄存器、ALU等。然后通常使用某种寄存器传输语言来描述使用这种物理微架构对ISA的每条指令进行解码和排序。有两种基本方法可以构建控制单元来实现此描述(尽管许多设计使用中间方法或折衷方法):

  1. 一些计算机设计“硬连线”完整的指令集解码和排序(就像微体系结构的其余部分一样)。
  2. 其他设计采用微代码例程或表格(或两者)来执行此操作——通常作为片上ROM或PLA或两者兼而有之(尽管历史上曾使用单独的RAM和ROM)。在西数MCP-1600是一个老例如,使用微码专用,单独的ROM。

一些设计将硬连线设计和微代码结合用于控制单元。

一些CPU设计使用可写控制存储——它们将指令集编译到CPU内的可写RAM或闪存(例如Rekursiv处理器和ImsysCjip)、或FPGA(可重构计算)。

ISA也可以由解释器在软件中模拟。自然地,由于解释开销,这比在仿真硬件上直接运行程序要慢,除非运行仿真器的硬件快一个数量级。今天,新ISA或微体系结构的供应商通常会在硬件实现准备就绪之前向软件开发人员提供软件模拟器。

通常,实现的细节对为指令集选择的特定指令有很大的影响。例如,指令流水线的许多实现只允许每条指令进行单个内存加载或内存存储,从而导致加载-存储架构(RISC)。再比如,一些早期的指令流水线实现方式导致了延迟槽。

高速数字信号处理的需求已经推向相反的方向——迫使指令以特定方式执行。例如,为了足够快地执行数字滤波器,典型的数字信号处理器(DSP)中的MAC指令必须使用一种可以同时获取一条指令和两个数据字的哈佛架构,并且需要一个单周期的乘法累加乘数。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/127546/

(7)
词条目录
  1. 指令集架构
  2. 指令集架构的分类
  3. 指令集架构说明
  4. 指令类型
  5. 数据处理和内存操作
  6. 算术和逻辑运算
  7. 控制流操作
  8. 协处理器指令
  9. 复杂指令
  10. 指令编码
  11. 指令集架构设计
  12. 指令集实现

轻触这里

关闭目录

目录