|
1
6
不,因为堆栈的大小取决于运行的模式(real、protected、long/64、vm86、smm等),而不是体系结构。例如,如果程序集以保护模式运行,则堆栈将为32位(如果操作数为16位,则为16位),即使处理器为x86-64。 像上面提到的评论中的某些人一样,cpuid是唯一可靠的方法来告诉您的体系结构是什么。 |
|
2
0
有关检测其运行模式的机器代码,请参阅此代码返回16、32或64的Golf x86机器代码函数: Determine your language's version . 同一机器代码字节根据解码模式的不同给出不同的结果。 或仅32对64,见 x86-32 / x86-64 polyglot machine-code fragment that detects 64bit mode at run-time?
在大多数情况下,您不需要检测当前模式,因为您知道代码的编译/组装目的。(例如)
in NASM,
无论当前模式如何,要检测CPU能力,请使用cpuid。
How do you detect the CPU architecture type during run-time with GCC and inline asm?
(或使用)
这仍然不能告诉您运行的操作系统是否支持64位可执行文件 ;如果你想知道你应该检查你运行的是64位操作系统。cpuid无法帮助您做到这一点:32位程序查询操作系统的机制当然是特定于操作系统的。 在几乎所有的情况下,我认为CPU的“架构”并不是一个正确的问题。(即,除非您正在编写自己的内核,或编写cpu信息程序)。知道这并不能帮助你的程序决定该做什么。 32位x86处理器已经多年没有生产了,而且越来越少。但32位操作系统仍在64位CPU上使用。 |
|
|
EE18 · C中字节序与尺寸组装转换的关系 1 年前 |
|
|
MagicRacoon · TSO和存储转发保证 2 年前 |
|
|
ugo_capeto · gcc使用“lea”而不是“add”` 2 年前 |
|
|
Locke · GCC和Clang奇怪的不必要堆栈使用[重复] 2 年前 |