gpt4 book ai didi

visual-studio - Visual Studio 2017 上的简单汇编程序

转载 作者:行者123 更新时间:2023-12-04 06:34:11 27 4
gpt4 key购买 nike

        .386
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte

.data
msg1 byte "Hello World!", 0Ah, 0

.code
main proc
INVOKE printf, ADDR msg1
ret

main endp
end main

嗨,我收到以下错误:

找了一圈,发现有人说可以通过链接microsoft runtime library来修复

谁能教我如何正确修复它?

谢谢
Severity    Code    Description Project File    Line    Suppression State
Error LNK2019 unresolved external symbol _printf referenced in function _main testing C:\Users\Kin\Desktop\assembly\testing\testing\Source.obj 1
Error LNK1120 1 unresolved externals testing C:\Users\Kin\Desktop\assembly\testing\Debug\testing.exe 1

最佳答案

我没有安装 VS 2017 来尝试这个。 重要 :确保您创建了一个 Console Application而不是 Windows Application .创建此项目后,请确保将 MASM 添加到构建自定义中。添加 .ASM文件到您的项目。

获取您的代码并在顶部插入以下几行:

includelib libcmt.lib
includelib libvcruntime.lib
includelib libucrt.lib
includelib legacy_stdio_definitions.lib

关于为什么在 2013 年以后的 Visual Studio 中需要这些行的解释可以在此 Stackoverflow Answer 中找到。 .

您希望 C 运行时成为您的控制台应用程序的入口点(它将调用您的 main)。因此,您必须删除 main从最后一行说 end main .当您这样做时 end main它绕过 C 运行时启动启动。当您进行类似 printf 的调用时,未能正确初始化 C 运行时可能会导致程序崩溃。 .它应该只是 end而不是 end main .

您应该测试的最终代码是:
includelib libcmt.lib
includelib libvcruntime.lib
includelib libucrt.lib
includelib legacy_stdio_definitions.lib

.386
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte

.data
msg1 byte "Hello World!", 0Ah, 0

.code
main proc
INVOKE printf, ADDR msg1
ret

main endp
end

关于visual-studio - Visual Studio 2017 上的简单汇编程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44083907/

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