7

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

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

IFDEF amd64
包括文件64.asm
别的
包括 file32.asm
万一

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

谢谢!

4

3 回答 3

12
IFDEF RAX

  ECHO "WIN64"

ELSE

  ECHO "WIN32"

ENDIF
于 2012-02-06T03:59:43.763 回答
6

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

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

于 2010-04-08T07:03:56.077 回答
1

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

这也很可能是为什么有两个特定的汇编程序 ml.exe 和 ml64.exe,而不是一个 ml.exe 可以在一些额外指令的帮助下处理所有这些的原因。

于 2010-04-08T07:54:11.070 回答