1. 据我所知,有不同种类的ISA,如ARM、MIPS、80x86等。我想知道一个CPU是否只能读取一种特定的ISA。例如,处理器能否同时读取80x86和MIPS?
2. 如果CPU只适用于一种ISA,我该如何检查我的PC处理器使用的是哪种ISA?我可以手动找到吗?
谢谢。
我所知道的所有CPU/MCU都只支持单一指令集。
一些新的架构可能具有加载微码的功能,可以在某种程度上改变指令集行为,但我强烈怀疑你无法通过它来更改指令集。指令集和内部CPU/MCU电路紧密相关。制作具有可变指令集的通用CPU是可能的(例如使用FPGA),但与直接DIE编码的CPU相比将会非常慢。使用类似Die技术的时钟速度可能只有几兆赫。
一些架构(如i80x86)支持可以切换到不同类型操作的模式(16/32/64位,实模式,保护模式),但很难说这是不同的指令集还是同一事物的子集...(取决于视角)
检测指令集。
这太疯狂了。是的,通过程序可以检测出您拥有哪种类型的指令集,但所有CPU/MCU都具有不同的引脚布局、接口、架构,且不能互换(即使在同一架构类别中),因此检测指令集是毫无意义的,因为您已经知道了要进行布线的架构...
无论如何,检测将按以下方式工作:
是的,每种类型的CPU都独特于一种指令集。ARM的指令集无法与x86、SPARC等兼容。可能会有一些重叠,但程序在不同的架构之间不兼容。
根据您的操作系统,有一些命令可以运行以查看此信息。对于Unix/Linux,uname -a
将显示您正在运行的架构,以及dmidecode
。对于Windows操作系统,右键单击我的电脑
并选择属性
应该会显示您的架构。
例如(Windows 7):
对于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
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
如果支持实现,它实际上可以读取任何指令集。现在大多数CPU都支持两个/三个指令集,只因为32位/64位寻址略有不同。
x86支持16位、32位和64位指令集,ARM支持32位、64位,同时支持Thumb和Thumb-2等。例如,MIPS也是如此。
原始的Transmeta我认为是灵活的,应该将任何指令集转换为内部集并本地运行。然而,它失败了,现在没有类似的东西。
无论如何,一旦您运行应用程序,它就绑定到特定的指令集在其头文件中,因此在运行时无法更改它。好吧,ARM是例外 - 它能够在完整版本和Thumb版本之间切换,但它们只是相同编码的不同版本...
对于第二部分 - 要么在您的操作系统GUI中,要么通常可以通过阅读Linux中的/proc/cpuinfo
,在Windows中使用环境变量PROCESSOR_ARCHITECTURE
来读取。