在MASM/MASM64

问题描述 投票:0回答:4

如果目标体系结构是i386或amd64?

IAM使用MASM(ML.EXE)/MASM64(ML64.EXE)组装File32.asm和File64.asm。创建一个文件,file.asm,该文件应包括file32.asm或file64.asm,取决于体系结构,这是很不错的。理想情况下,我希望能够写出类似的内容:

IFDEFAMD64 包括file64.asm 别的 包括file32.asm Endif
,如果需要的话,我可以使用不同的命令行选项运行ml.exe和ml64.exe。

thanks!

IFDEF RAX ECHO "WIN64" ELSE ECHO "WIN32" ENDIF
assembly x86-64 cpu-architecture masm masm32
4个回答
13
投票
如果我正确理解您,您正在寻找某种内置定义,该定义在32和64位MASM版本中具有不同的值。我曾经在寻找这样的东西,但没有找到任何合适的东西。 

7
投票
,但是,只要定义自己的东西就足够容易了,例如

AMD64 equ 1

在源文件的开头选择所需的代码路径,或在ML/ML64命令行中选择

/DAMD64

。如您所建议,然后使用
IFDEF
/
IFNDEF
x86和x64指令集(甚至没有提及堆栈用法和限制)是如此不同,以至于我想知道这是否有意义... 
这是组件,而不是一些便携式HLL。

也很可能是有两个特定的汇编程序ML.EXE和ML64.EXE的原因,而不是单个ML.EXE,可以在一些额外的指令的帮助下处理所有这些。

1
投票
我被禁止提出问题,所以我将其用作后续问题: 我想检测我的X64装配程序是否是通过MASM或UASM组装的。 我尝试了各种AI聊天,但没有一个给出工作的答案。

; x64 Assembly program to detect MASM or UASM.

.Data MSGMASM字节“ Masm”,0 msguasm字节“ uasm”,0 Chesssolver字节“ Chesssolver”,0


0
投票

; Entry point MyMainProc PROC ; Checks for the assembler using defined macros. ; Checks for MASM. IFDEF MASM64 lea rdx, msgMasm ; Checks for UASM. ELSE lea rdx, msgUasm ENDIF ; Calls MessageBoxA to display the message. push rbp mov rbp, rsp sub rsp, 4 * 8; Allocates space for 4 arguments. and rsp, -16; Aligns the stack to 16 bytes. mov rcx, 0 ; hWnd = NULL. lea r8, ChessSolver ; lpCaption. mov r9, 0 EXTERNDEF __imp_MessageBoxA:QWORD call __imp_MessageBoxA ; Exits the process. xor rcx, rcx ; Sets return value to 0. EXTERNDEF __imp_ExitProcess:QWORD call __imp_ExitProcess MyMainProc ENDP

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.