指令集和指令集架构(ISA)有什么区别?

5
我无法理解指令集(Instruction set)和指令集体系结构(Instruction set architecture)之间的区别。
我知道什么是指令集。指令集定义了我们可以向处理器发送的可能指令以及如何将指令(因此指令格式)发送给处理器。
那么什么是指令集体系结构?我查看了维基百科,它有一个关于指令集的页面,在第一行上有一个指向指令集体系结构的链接,该链接重定向到计算机体系结构。
那么指令集体系结构是否等同于计算机体系结构?请有人详细解释一下IS和ISA的具体区别,以便我理解ISA是什么以及ISA对指令集的作用。
3个回答

4
并不是计算机体系结构,因为计算机包括外围设备、PCB板、底盘、按钮、连接器等。指令集架构是架构,外观和感觉就像建筑物的架构一样。指令集是实现该架构的一组指令(如Brendan所指出的,您可以有多个实现相同架构的指令集)。一个很好的例子是ARM,ARMv7-m定义了某些/大多数cortex-m(产品系列的营销名称)核心的架构。cortex-m3、cortex-m4、cortex-m7符合ARMv7-m架构,在ARMv7-m的ARM体系结构参考手册中定义。但这些是不同的核心,它们可能是从头开始完全重写的,它们可能具有不同的深度流水线,其中一个可能具有高速缓存和/或fpu,而另一个则没有。在这种情况下,由架构定义了它们都符合的一组指令集(fpu在此情况下是一个异常,并未在架构中定义)。
建筑师可以为麦当劳设计建筑物或建筑物指南,当您驾车经过时,您会看到那栋建筑物,而不用看标志,您就知道那是麦当劳或温迪或必胜客。但并不是每一个这样的建筑物都是由同一建筑工人使用来自同一家木材厂或涂料供应商的木材建造而成的。指令集架构定义了架构和可能实现机器码的指令集,但为符合该架构而制造的特定芯片或核心可能并不完全相同,在表面上,架构看起来相同,就像塔可钟一样,但它可能与下一个城镇的塔可钟建造方式不同,您仍然可以在该设施中购买味道基本相同的塔可。就机器代码/指令集而言,从相同架构的两个不同核心进行编程看起来和感觉相同,塔可的味道也相同。但是实现可能会有所不同(他们可能会在加酸奶油之前放番茄)。无论好坏如何,这两个术语通常可以互换使用表示同一件事(正在讨论的东西的指令集,可能是机器代码指令)。

好的,我现在明白了ISA只是告诉我们什么是可行的(“指令集架构是体系结构,外观和感觉。”)。指令集是CPU支持的所有指令。那么,两个具有相同ISA的不同CPU是否可以拥有完全不同的指令集呢? - d4rkl0rd
我会说不,因为那是一种不同的架构。理解这些术语及其使用方式在某种程度上取决于个人观点。也许芯片之间存在微小差异,例如99%相同但一个有一些指令而另一个没有,但完全不同的我会称之为不同的架构。 - old_timer
好的,我现在明白了,如果我告诉你我的计算机的指令集架构,那么你肯定知道我的处理器的能力以及它的指令集。我想这是正确的吧? - d4rkl0rd

3

“指令集”是特定CPU实际支持的指令集合。

“指令集体系结构”是CPU可能支持或不支持的指令集合,它取决于ISA的实现。

例如,“80x86 ISA”包括各种扩展(64位,SSE,AVX等); 但对于实现“80x86 ISA”的旧80486,指令集不支持64位,SSE,AVX等。


1
这两个术语可以互换使用。
这段文字在同一句中同时使用了指令集架构和指令。

https://en.wikipedia.org/wiki/Instruction_set_architecture

指令集架构与微架构不同,后者是用于实现指令集的处理器设计技术。具有不同微架构的处理器可以共享通用指令集。例如,英特尔奔腾和AMD Athlon实现了几乎相同版本的x86指令集,但内部设计截然不同。
另一个例子是在这篇解释RISC-V的论文中:https://digitalassets.lib.berkeley.edu/techreports/ucb/text/EECS-2016-1.pdf 该论文的大部分使用指令集架构或ISA,但第2章标题为“为什么要开发新的指令集?”。接着是以下内容:
等价重要的是流行商业指令集的巨大复杂性。它们在硬件上很难完全实现,但却没有多少激励去创建更简单的子集ISA 再次看到指令集和指令集架构(ISA)可互换使用。
指令集架构/指令集最好被视为“接口”。符合该接口的机器码将在实现该接口的任何CPU上运行(无论该CPU的微体系结构/实现细节如何)。这包括不仅是一组指令。构成指令的字节必须与操作数和其他参数正确地定位。寄存器的数量和大小很重要,以及机器码必须符合的内存对齐和字节序等其他细节,以便在CPU上正确运行。上述RISC-V论文是进一步阅读此主题的绝佳参考资料。

2
ISA 还包括超出指令的 语义,例如原子性和内存排序的保证、中断传递方式、硬件页表格式、控制寄存器内容等。所有这些东西都是(或可以)独立于实际指令及其机器编码的。指令编码通常暗示了寄存器数量,但不包括它们的宽度,但这是一个重要的架构参数。(通常而不总是:像 SPARC 或 IA-64 这样具有滑动窗口寄存器的 ISA 比机器代码寄存器字段中的 2^bits 更多寄存器...) - Peter Cordes
在区分非常重要的情况下,“指令集”通常不会用来谈论那些其他的事情。例如,“x86指令集包括原子比较交换”的说法可以用ISA代替,但反过来则不太好读:“x86 ISA具有强有序的内存模型,基本上是程序顺序加上一个带有存储转发的存储缓冲区”。内存顺序是与指令集分离的架构部分。(例如,Intel的第二卷手册记录了指令集,第一卷是整体架构,第三卷是系统编程)。 - Peter Cordes
是的,有一些情况下这种区别并不重要,比如你找到的引用。公平地说,RISC-V对“新指令集”的使用有点暗示了伴随其而来的新架构,但你可以争论他们是真正将其作为ISA的同义词使用,还是只是在暗示新指令集将成为新架构的一部分。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接