使用 MASM 和 Visual Studio 2019 链接多个文件

红木

我正在尝试编写一个程序,将斐波那契数列输出到一定程度 n,但使用递归和多个链接文件。到目前为止,我的方法是在单个文件中编写程序并使其工作,然后将其转换为多个文件。这一直有效,直到我尝试使用invokeproto说明来链接文件。我什至很困惑从哪里开始。

这是我在单个文件中尝试并知道的工作:

INCLUDE Irvine32.inc

.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD

.data
deg DWORD ?
prompt BYTE "Enter the degree of Fibonacci sequence: ",0

.code
main PROC
    mov edx,OFFSET prompt
    call WriteString
    call ReadInt
    mov deg,eax
    mov ecx,0
    push deg
    call Fibonacci
    add esp,4

    call WriteDec
    call Crlf

    INVOKE ExitProcess,0
main ENDP

Fibonacci PROC
    add ecx,1
    push ebp
    mov ebp,esp
    sub esp,4
    mov eax,[ebp+8]

    cmp eax,2
    je L1
    cmp eax,1
    je L1

    dec eax
    push eax
    call Fibonacci
    mov [ebp-4],eax

    dec DWORD PTR [esp]
    call Fibonacci
    add esp,4

    add eax,[ebp-4]

    jmp EndFib

L1:
    mov eax,1

EndFib:
    mov esp,ebp
    pop ebp
    ret

Fibonacci ENDP

END main

我知道上面的代码可以编译,但是尝试将其拆分为多个文件总是会导致构建错误。以下是我尝试使用的 3 个文件:

主程序

INCLUDE Irvine32.inc
INCLUDE external.inc

.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD

.data


.code
main PROC
    mov ecx,0
    push 3
    invoke Fibonacci
    add esp,4

    call WriteDec
    call Crlf

    INVOKE ExitProcess,0
main ENDP

END main

fib.asm

INCLUDE Irvine32.inc
INCLUDE external.inc

.code
Fibonacci PROC

    add ecx,1
    push ebp
    mov ebp,esp
    sub esp,4
    mov eax,[ebp+8]

    cmp eax,2
    je L1
    cmp eax,1
    je L1

    dec eax
    push eax
    call Fibonacci
    mov [ebp-4],eax

    dec DWORD PTR [esp]
    call Fibonacci
    add esp,4

    add eax,[ebp-4]

    jmp EndFib

L1:
    mov eax,1
    ; dec eax

EndFib:
    mov esp,ebp
    pop ebp
    ret

Fibonacci ENDP
END

外部公司

INCLUDE Irvine32.inc

Fibonacci PROTO

当这失败时,我会看到一个窗口,上面写着

存在构建错误。您想继续并运行上次成功的构建吗?

我的朋友告诉我,我应该收到错误消息,告诉我程序在哪一行出错,但我只看到了这个和我将在下面放置的构建输出。这是正常的吗?

1>------ Build started: Project: ModSum, Configuration: Debug Win32 ------
1>Assembling main.asm...
1>c:\irvine\SmallWin.inc(11): warning A4011: multiple .MODEL directives found : .MODEL ignored
1>c:\irvine\SmallWin.inc(245): error A2163: non-benign structure redefinition: incorrect initializers : CONSOLE_SCREEN_BUFFER_INFO
1>c:\irvine\SmallWin.inc(246): error A2163: non-benign structure redefinition: incorrect initializers : CONSOLE_SCREEN_BUFFER_INFO
1>c:\irvine\SmallWin.inc(248): error A2163: non-benign structure redefinition: incorrect initializers : CONSOLE_SCREEN_BUFFER_INFO
1>c:\irvine\SmallWin.inc(249): error A2163: non-benign structure redefinition: incorrect initializers : CONSOLE_SCREEN_BUFFER_INFO
1>c:\irvine\SmallWin.inc(258): error A2163: non-benign structure redefinition: incorrect initializers : KEY_EVENT_RECORD
1>c:\irvine\SmallWin.inc(261): error A2163: non-benign structure redefinition: incorrect initializers : KEY_EVENT_RECORD
1>c:\irvine\SmallWin.inc(262): error A2161: non-benign structure redefinition: too few labels : KEY_EVENT_RECORD
1>c:\irvine\SmallWin.inc(262): error A2163: non-benign structure redefinition: incorrect initializers : KEY_EVENT_RECORD
1>c:\irvine\SmallWin.inc(265): error A2163: non-benign structure redefinition: incorrect initializers : MOUSE_EVENT_RECORD
1>c:\irvine\SmallWin.inc(272): error A2163: non-benign structure redefinition: incorrect initializers : WINDOW_BUFFER_SIZE_RECORD
1>c:\irvine\SmallWin.inc(287): error A2163: non-benign structure redefinition: incorrect initializers : INPUT_RECORD
1>c:\irvine\SmallWin.inc(288): error A2163: non-benign structure redefinition: incorrect initializers : INPUT_RECORD
1>c:\irvine\SmallWin.inc(289): error A2163: non-benign structure redefinition: incorrect initializers : INPUT_RECORD
1>c:\irvine\SmallWin.inc(290): error A2163: non-benign structure redefinition: incorrect initializers : INPUT_RECORD
1>c:\irvine\SmallWin.inc(290): error A2164: non-benign structure redefinition: too few initializers : INPUT_RECORD
1>c:\irvine\SmallWin.inc(291): error A2164: non-benign structure redefinition: too few initializers : INPUT_RECORD
1>c:\irvine\SmallWin.inc(293): error A2161: non-benign structure redefinition: too few labels : INPUT_RECORD
1>c:\irvine\SmallWin.inc(293): error A2164: non-benign structure redefinition: too few initializers : INPUT_RECORD
1>main.asm(7): warning A4011: multiple .MODEL directives found : .MODEL ignored
1>MASM : fatal error A1016: Internal error
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\masm.targets(70,5): error MSB3721: The command "ml.exe /c /nologo /Zi /Fo"Debug\main.obj" /I "c:\irvine" /W3 /errorReport:prompt  /Tamain.asm" exited with code -1073741819.
1>Done building project "ModSum.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

非常感谢任何可以抽出时间或提供帮助的人,我已经自己研究了一段时间,但无法弄清楚。

资源管理器

我认为 external.inc 不应该包含 Irvine32.inc,因为 .asm 文件包含两者。最终结果是 Irvine32.inc 被包含在每个 .asm 文件中两次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Visual Studio 2019导致缓慢的调试和大量的内存使用

在 Visual Studio 2019 和 python 3.8 中使用 boost numpy

将C模块链接到Visual Studio中的MASM

您可以在 Visual Studio 2019 和 Visual Studio Code 之間使用實時共享嗎?

Visual Studio(2017和2019)忽略TypeScriptCompileBlocked

我总是在 Visual Studio 2019 和 OpenCV 的链接器中出错

使用 Visual Studio 2019 和 cmake 进行调试的 Yaml_cpp

在Windows 10和Visual Studio Community 2019下的Bazel中使用boost

删除和排序使用在Visual Studio 2019中不起作用

如何在Visual Studio 2019 4.4+和Xamarin.Forms中使用CarouselView?

使用Powershell和Visual Studio 2019查询TFS 2015源代码存储库

使用Visual Studio 2019和cmake for x86编译pe-parse库

Visual Studio 2017/2019| 如何使用 alt+arrow(up/down) 修复 Live up 和 down

在Visual Studio 2019中筛选和排序项目以更好地管理多个启动项目

Visual Studio 2019预览版和Visual Studio 2019 RC有什么区别?

文件已被Visual Studio 2019锁定

无法在 Visual Studio 2019 中打开文件

剃刀文件自动从Visual Studio 2019预览中的观看和构建中排除

Visual Studio 2019中的GDAL库头文件错误和警告

在Visual Studio 2019应用程序中使用现代链接选择光标图标

C++ - 无法使用 Visual Studio 2019/CMake 在 libyaml 中链接

是否有设置在Visual Studio 2019中为每个项目启用``淡化未使用的用法''和``删除和排序的用法''?

Visual Studio Community 2019-运行,安装和报告问题

F#和WPF的模板(Visual Studio 2019社区)?

Visual Studio 2019,Python和Neuron模拟器

CodeBlocks和Visual Studio 2019中的不同结果

Visual Studio 2019 Locals和Autos Windows中的DateTime格式

如何使用 Visual Studio 2019 构建最兼容的二进制文件?

如何在Visual Studio 2019中使用git bash终端配置文件?