CPU只兼容一种指令集架构吗?
Is CPU only compatible to one kind of instruction set architecture?
我开始在计算机体系结构领域进行探索。关于ISA,有两个问题让我很困惑。
据我所知,有ARM、MIPS、80x86等多种ISA,不知一个CPU是否只能专门读取一种ISA。例如,一个处理器能否同时读取 80x86 和 MIPS。
如果 CPU 对于 ISA 是唯一的,我如何检查我的 PC 处理器使用的是哪个 ISA?我可以手动找到它吗?
谢谢
是的,每一种CPU对于一个指令集来说都是独一无二的。 ARM 的指令集不适用于 x86、SPARC 等。巧合的是可能会有一些重叠,但程序在体系结构之间不兼容。
根据您的操作系统,您可以使用一些命令运行查看此信息。对于 unix/Linux,uname -a
将向您显示您正在 运行 以及 dmidecode
的架构。对于 Windows OS,右键单击 My Computer
并选择 Properties
应该会显示您的体系结构。
例如 (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
(本例中架构为x86_64),即64位Intel或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
如果实现了支持,它实际上可以读取任何指令集。现在大多数 CPU 都支持 two/three 指令集,由于 32-bit/64-bit 寻址,指令集略有不同。
x86 支持 16 位、32 位和 64 位指令集,ARM 支持 32 位、64 位,Thumb 和 Thumb-2 等。例如 MIPS 也类似。
我认为原始的 Transmeta 对此很灵活,并且应该将任何指令集转译为内部集,并且 运行 它是本机的。然而它失败了,现在没有类似的东西了。
无论如何,一旦您 运行 应用程序,它就会绑定到其 header 中的特定指令集,因此在 运行 时间内无法更改它。嗯,ARM 是个例外 - 它能够在完整版和 Thumb 版之间切换,但它们只是相同的不同编码...
对于第二部分 - 在您的 OS GUI 中或者您通常可以阅读它 - 在 Linux 中通过阅读 /proc/cpuinfo
,在环境变量中的 Windows PROCESSOR_ARCHITECTURE
.
我所知道的所有 CPU/MCU 都只支持单指令集。
可以将微代码加载到一些较新的体系结构中,这可能允许将指令集行为更改为某个点机器人强烈怀疑您是否可以用它更改指令集。指令集和内部 CPU/MCU 电路是强相关的。使用可变指令集制作通用 CPU 是可能的(例如使用 FPGA)但与直接 DIE编码CPU。使用类似的 Die 技术,时钟速度可能只有几 MHz。
像 i80x86 这样的一些架构支持可以切换到不同类型操作的模式(16/32/64 位,真实的,受保护的)但是很难说它是不同的指令集或者只是同一事物的子集.. .(视角问题)
检测指令集
这太疯狂了。是的,可以通过程序检测您拥有哪种类型的指令集,但是所有 CPU/MCU 的 都有不同的引出线、接口、架构,并且不可互换(即使在相同的架构 class) 所以你检测指令集是没有意义的,因为你已经知道你正在为...
布线的架构
无论如何,检测会像这样工作:
- 每个支持的指令都有一组测试程序set/architecture如果正常工作,将特定内存或 IO 设置为预定义状态
- 让看门狗在所有检测之间循环并在第一个有效结果处停止。
我开始在计算机体系结构领域进行探索。关于ISA,有两个问题让我很困惑。
据我所知,有ARM、MIPS、80x86等多种ISA,不知一个CPU是否只能专门读取一种ISA。例如,一个处理器能否同时读取 80x86 和 MIPS。
如果 CPU 对于 ISA 是唯一的,我如何检查我的 PC 处理器使用的是哪个 ISA?我可以手动找到它吗?
谢谢
是的,每一种CPU对于一个指令集来说都是独一无二的。 ARM 的指令集不适用于 x86、SPARC 等。巧合的是可能会有一些重叠,但程序在体系结构之间不兼容。
根据您的操作系统,您可以使用一些命令运行查看此信息。对于 unix/Linux,
uname -a
将向您显示您正在 运行 以及dmidecode
的架构。对于 Windows OS,右键单击My Computer
并选择Properties
应该会显示您的体系结构。
例如 (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
(本例中架构为x86_64),即64位Intel或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
如果实现了支持,它实际上可以读取任何指令集。现在大多数 CPU 都支持 two/three 指令集,由于 32-bit/64-bit 寻址,指令集略有不同。
x86 支持 16 位、32 位和 64 位指令集,ARM 支持 32 位、64 位,Thumb 和 Thumb-2 等。例如 MIPS 也类似。
我认为原始的 Transmeta 对此很灵活,并且应该将任何指令集转译为内部集,并且 运行 它是本机的。然而它失败了,现在没有类似的东西了。
无论如何,一旦您 运行 应用程序,它就会绑定到其 header 中的特定指令集,因此在 运行 时间内无法更改它。嗯,ARM 是个例外 - 它能够在完整版和 Thumb 版之间切换,但它们只是相同的不同编码...
对于第二部分 - 在您的 OS GUI 中或者您通常可以阅读它 - 在 Linux 中通过阅读 /proc/cpuinfo
,在环境变量中的 Windows PROCESSOR_ARCHITECTURE
.
我所知道的所有 CPU/MCU 都只支持单指令集。
可以将微代码加载到一些较新的体系结构中,这可能允许将指令集行为更改为某个点机器人强烈怀疑您是否可以用它更改指令集。指令集和内部 CPU/MCU 电路是强相关的。使用可变指令集制作通用 CPU 是可能的(例如使用 FPGA)但与直接 DIE编码CPU。使用类似的 Die 技术,时钟速度可能只有几 MHz。
像 i80x86 这样的一些架构支持可以切换到不同类型操作的模式(16/32/64 位,真实的,受保护的)但是很难说它是不同的指令集或者只是同一事物的子集.. .(视角问题)
检测指令集
这太疯狂了。是的,可以通过程序检测您拥有哪种类型的指令集,但是所有 CPU/MCU 的 都有不同的引出线、接口、架构,并且不可互换(即使在相同的架构 class) 所以你检测指令集是没有意义的,因为你已经知道你正在为...
布线的架构无论如何,检测会像这样工作:
- 每个支持的指令都有一组测试程序set/architecture如果正常工作,将特定内存或 IO 设置为预定义状态
- 让看门狗在所有检测之间循环并在第一个有效结果处停止。