在汇编中确定32/64位架构

IAb*_*act 6 x86 assembly x86-64 32bit-64bit

我正在阅读这个问题,并想知道接受的答案是否也可能是确定架构的一种方法.例如,在asm中我可以将WORD推入堆栈然后检查SP.将新SP与旧SP进行比较:

Diff的4表示32位
Diff的8表示64位

我这个想法是否正确?

Jef*_*f B 6

不,因为堆栈的大小取决于您运行的模式(真实,受保护,长/ 64,vm86,smm等),而不是基于体系结构.例如,如果程序集在保护模式下运行,则堆栈将为32位(如果操作数为16位,则为16位),即使处理器为x86-64.

就像上面提到的评论中的某些人一样,CPUID是告诉你的架构是什么的唯一可靠方式.