如果目标体系结构是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
AMD64 equ 1
/DAMD64
。如您所建议,然后使用
IFDEF
/
IFNDEF
。x86和x64指令集(甚至没有提及堆栈用法和限制)是如此不同,以至于我想知道这是否有意义... 这是组件,而不是一些便携式HLL。 也很可能是有两个特定的汇编程序ML.EXE和ML64.EXE的原因,而不是单个ML.EXE,可以在一些额外的指令的帮助下处理所有这些。
; x64 Assembly program to detect MASM or UASM.
.Data MSGMASM字节“ Masm”,0 msguasm字节“ uasm”,0 Chesssolver字节“ Chesssolver”,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
登