CPU只兼容一种指令集架构吗?

3
我开始探索计算机架构领域。有两个ISA的问题让我感到困惑。
1. 据我所知,有不同种类的ISA,如ARM、MIPS、80x86等。我想知道一个CPU是否只能读取一种特定的ISA。例如,处理器能否同时读取80x86和MIPS?
2. 如果CPU只适用于一种ISA,我该如何检查我的PC处理器使用的是哪种ISA?我可以手动找到吗?
谢谢。
3个回答

3
  1. 我所知道的所有CPU/MCU都只支持单一指令集。

    一些新的架构可能具有加载微码的功能,可以在某种程度上改变指令集行为,但我强烈怀疑你无法通过它来更改指令集。指令集和内部CPU/MCU电路紧密相关。制作具有可变指令集的通用CPU是可能的(例如使用FPGA),但与直接DIE编码的CPU相比将会非常慢。使用类似Die技术的时钟速度可能只有几兆赫。

    一些架构(如i80x86)支持可以切换到不同类型操作的模式(16/32/64位,实模式,保护模式),但很难说这是不同的指令集还是同一事物的子集...(取决于视角)

  2. 检测指令集。

    这太疯狂了。是的,通过程序可以检测出您拥有哪种类型的指令集,但所有CPU/MCU都具有不同的引脚布局、接口、架构,且不能互换(即使在同一架构类别中),因此检测指令集是毫无意义的,因为您已经知道了要进行布线的架构...

    无论如何,检测将按以下方式工作:

    • 拥有每种支持的指令集/架构的一组测试程序,如果正常工作,则将特定内存或IO设置为预定义状态
    • 在所有检测之间循环并在第一个有效结果上停止。

如果你支持某个基本架构(比如x86),但是你希望使用一个超集,那么第二点并不一定是疯狂的。例如,在后续版本中添加到指令集中的英特尔扩展之一。然后检查这些扩展是否存在,并利用它们,否则忽略它们的使用是很好的。 - Richard Tyregrim
@RichardEriksson 是的,从那个角度来看我同意,但总的来说这个观点仍然成立。 - Spektre

1
  1. 是的,每种类型的CPU都独特于一种指令集。ARM的指令集无法与x86、SPARC等兼容。可能会有一些重叠,但程序在不同的架构之间不兼容。

  2. 根据您的操作系统,有一些命令可以运行以查看此信息。对于Unix/Linux,uname -a将显示您正在运行的架构,以及dmidecode。对于Windows操作系统,右键单击我的电脑并选择属性应该会显示您的架构。

例如(Windows 7):

Windows 7 System Info

对于Linux(我知道,这是一个非常旧的发行版!):
$ uname -a
Linux hostname 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:32:27 UTC 2010 x86_64 GNU/Linux

在这个例子中,架构是x86_64,也就是64位的英特尔或AMD。要确定确切的架构,您可以像我之前提到的那样运行dmidecode
~# dmidecode |grep -i proc
Processor Information
        Type: Central Processor
        Version: AMD Opteron(tm) Processor 154
Processor Information
        Type: Central Processor
        Version: AMD Opteron(tm) Processor 154

0

如果支持实现,它实际上可以读取任何指令集。现在大多数CPU都支持两个/三个指令集,只因为32位/64位寻址略有不同。

x86支持16位、32位和64位指令集,ARM支持32位、64位,同时支持Thumb和Thumb-2等。例如,MIPS也是如此。

原始的Transmeta我认为是灵活的,应该将任何指令集转换为内部集并本地运行。然而,它失败了,现在没有类似的东西。

无论如何,一旦您运行应用程序,它就绑定到特定的指令集在其头文件中,因此在运行时无法更改它。好吧,ARM是例外 - 它能够在完整版本和Thumb版本之间切换,但它们只是相同编码的不同版本...

对于第二部分 - 要么在您的操作系统GUI中,要么通常可以通过阅读Linux中的/proc/cpuinfo,在Windows中使用环境变量PROCESSOR_ARCHITECTURE来读取。


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