gpt4 book ai didi

visual-studio - 如何在 Visual Studio 2017/2019 中构建 x64 汇编项目

转载 作者:行者123 更新时间:2023-12-02 03:02:59 25 4
gpt4 key购买 nike

当我将“debug”设置为“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

但是当我将“x86”更改为“x64”时不起作用 u

如果我尝试像 rax 一样使用“64位”寄存器,它也会失败

最佳答案

首先请看我的文章"How to build a x64/x86-project with a standalone x64/x86 assembly file" .

我们来一一查看错误信息(可以通过双击错误信息将光标移动到错误行):

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 进行组装,那是没有用的(看看 here )。 ML64 中不允许这样做。

A2008 syntax error : , test main.asm 4

在指令 PROTO 中, ML64 不喜欢 PROTO 关键字和第一个参数之间的逗号。删除它。

A2008 syntax error : INVOKE test main.asm 16

指令INVOKE ML64 中还不允许。将 INVOKE 替换为 CALL,并根据 Microsoft x64 calling convention 填写寄存器。 :

mov ecx, 0
call ExitProcess

A2008 syntax error : main test main.asm 18 A2088 END directive required at end of file test main.asm 18

指令END不得包含 ML64 的附加入口点。删除“主”。这也消除了第二个错误。根据 my article 设置 Visual Studio 链接器选项中的入口点.

关于visual-studio - 如何在 Visual Studio 2017/2019 中构建 x64 汇编项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59670593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com