Lan*_*cer 2 assembly x86-64 visual-studio
当我将“调试”设置为“x86”时,以下代码有效
.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode: DWORD
.data
; define your variables here
.code
main PROC
; write your assembly code herer
mov eax ,3
mov ebx ,8
add eax, ebx
INVOKE ExitProcess ,0
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)
如果我尝试像 rax 一样使用“64位”寄存器,它也会失败
首先,请看我的文章“如何使用独立的 x64/x86 程序集文件构建 x64/x86 项目”。
我们来一一查看错误信息(可以通过双击错误信息将光标移动到错误行):
A2008 syntax error : . test main.asm 1
伪指令.386仅允许在 32 位 MASM (ML.EXE) 中使用。ML64 (ML64.EXE) 中不允许这样做。ML64“知道”它能知道的所有指令。
A2008 syntax error : . test main.asm 2
伪指令.MODEL仅允许在 32 位 MASM (ML.EXE) 中使用。ML64 (ML64.EXE) 中不允许这样做。ML64 默认使用平面模型和 x64 调用约定(不是C、BASIC、FORTRAN、PASCAL、SYSCALL 或 STDCALL)。
A2008 syntax error : . test main.asm 3
.STACK指令是 MS-DOS 时代的遗物。如果你用 Windows 的 ML 来组装,那就没用了(看这里)。ML64 中不允许这样做。
A2008 syntax error : , test main.asm 4
在指令PROTO中,ML64 不喜欢 PROTO 关键字和第一个参数之间的逗号。去掉它。
A2008 syntax error : INVOKE test main.asm 16
ML64 中尚不允许指令INVOKE 。将 INVOKE 替换为 CALL 并根据Microsoft x64 调用约定填写寄存器:
mov ecx, 0
call ExitProcess
Run Code Online (Sandbox Code Playgroud)
A2008 syntax error : main test main.asm 18
A2088 END directive required at end of file test main.asm 18
指令END不得包含 ML64 的附加入口点。删除“主”。这也消除了第二个错误。根据我的文章在 Visual Studio 链接器选项中设置入口点。
归档时间: |
|
查看次数: |
1916 次 |
最近记录: |