Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 从MASM/MASM64在编译时检测体系结构_Assembly_X86 64_Cpu Architecture_Masm_Masm32 - Fatal编程技术网

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

Assembly 从MASM/MASM64在编译时检测体系结构,assembly,x86-64,cpu-architecture,masm,masm32,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 IFDEF amd64 包括file6

如果目标体系结构是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 IFDEF amd64 包括file64.asm 其他的 包括file32.asm 恩迪夫 此外,如果需要,我可以使用不同的命令行选项运行ml.exe和ml64.exe


谢谢

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


但是,只需在源文件的开头定义自己的路径即可,例如,
AMD64 eq 1
,以选择所需的代码路径,或者在ML/ML64命令行定义,如
/DAMD64
。然后按照您的建议使用
IFDEF
/
IFNDEF

x86和x64指令集(甚至不提堆栈使用和限制)非常不同,我想知道这是否有意义。。。在我看来,编写高效的独立于体系结构的x86/x64代码几乎是不可能的。 这是组装,不是便携式HLL


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

谢谢!我没有在命令行中看到/Dmacro选项,尽管我查看了命令行选项,并且它与C编译器使用的选项相同:)“您正在寻找某种内置定义…”-MASM定义了什么?对于CL,它为x86定义了
\u M_IX86
,为X64定义了
\u M_X64
。出于某种原因,我确实需要为32和64个目标公开一个ASM文件。此文件将只包含file32.asm或file64.asm,仅此而已。“我想知道这是否有意义…”一个带有类似C的预处理器宏保护的X86和X64实现的单一源代码对我来说非常有意义。。。。这就是我来这里的原因。小尼特:你组装ASM文件,而不是编译它们:)奇怪的是如果NDEF RAX似乎不起作用。。。在ML或ML64中,IFNDEF始终认为rax未定义。因此,显然必须使用IFDEF-RAX/64位only/ELSE/32位only/ENDIF(即仅使用IFDEF,而不是其逆)
IFDEF RAX

  ECHO "WIN64"

ELSE

  ECHO "WIN32"

ENDIF