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

bot*_*ius 6 assembly x86-64 masm cpu-architecture 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.

谢谢!

ven*_*ngy 12

IFDEF RAX

  ECHO "WIN64"

ELSE

  ECHO "WIN32"

ENDIF
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是 IFNDEF RAX 似乎不起作用...在 ML 或 ML64 中,rax 始终被 IFNDEF 视为未定义。因此显然必须 IFDEF RAX/仅限 64 位/ELSE/仅限 32 位/ENDIF(即仅使用 IFDEF,而不是其逆) (2认同)

Phi*_*hiS 5

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

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