从MASM / MASM64在编译时检测体系结构

时间:2010-04-07 20:08:34

标签: assembly x86-64 cpu-architecture masm masm32

如果目标体系结构是I386或AMD64,如何在编译时从ASM源文件中检测到它?

我正在使用masm(ml.exe)/ masm64(ml64.exe)来汇编file32.asm和file64.asm。创建一个文件file.asm会很好,它应该包含file32.asm或file64.asm,具体取决于体系结构。理想情况下,我希望能够写出如下内容:

IFDEF amd64
include file64.asm
ELSE
include file32.asm
ENDIF

此外,如果需要,我可以使用不同的命令行选项运行ml.exe和ml64.exe。

谢谢!

3 个答案:

答案 0 :(得分:11)

IFDEF RAX

  ECHO "WIN64"

ELSE

  ECHO "WIN32"

ENDIF

答案 1 :(得分:5)

如果我理解正确,那么您正在寻找某种内置定义,它在32位和64位MASM版本中具有不同的值。我曾经寻找类似的东西,但没有找到合适的东西。

但是,只需定义自己的内容就足够了,例如: AMD64 equ 1在源文件的开头选择所需的代码路径,或者在ML / ML64命令行中,如/DAMD64。然后按照您的建议使用IFDEF / IFNDEF

答案 2 :(得分:0)

x86和x64指令集(甚至没有提到堆栈的使用和限制)是不同的,我想知道这是否有意义,无论如何... IOW,编写高效的独立于架构的x86 / x64代码看起来几乎不可能我。 这是装配,而不是一些便携式HLL。

这也很可能就是为什么有两个特定的汇编程序ml.exe和ml64.exe,而不是一个ml.exe,可以通过一些额外的指令来处理它们。