32 位 VM 仅支持 64 位指令



我的 32 位 (i686) VM 是否可能不支持 32 位指令?

在测试虚拟机上运行时,我在 32 位 ipp 库中获得了 SIGILL。

LSCPU:

Architecture: i686 CPU op-mode(s): 64-bit CPU(s): 2 Thread(s) per core: 1 Core(s) per socket: 1 CPU socket(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 45 Stepping: 7 CPU MHz: 1995.192 L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 20480K

"操作模式:64 位"是否意味着此 VM 仅支持 64 位指令?我的(64 位)裸机桌面报告:CPU op-mode(s): 32-bit, 64-bit这对我来说意味着64bit不是32bit的超集,我的 i686 VM 实际上无法执行 32 位指令?

这个逻辑正确吗?如果是这样,我是否怀疑这是 32 位 ipp SIGILL 的原因(它调用 32 位指令并失败?

只要您可以在虚拟机中运行 32 位操作系统,您的虚拟 CPU 就支持英特尔 32 位指令。很可能是库中的错误导致它出现 SIGILL。附加调试器并查看实际的指令字节(操作码)应该可以更清楚地了解可能出现的问题。

回答您的第二个问题:不,英特尔 64(或 AMD64)不是英特尔 32 架构的严格超集。某些指令不可编码或具有新含义。最突出的例子是 0x40-0x4F,它们是 32 位系统上的 INC 和 DEC,但它们是 Inlte 64 架构中操作码(所谓的 REX 前缀)的一部分。但是,如果使用从目标体系结构抽象主机体系结构的 VM,这确实无关紧要。

最新更新