【问题标题】:A2004 Problem With MASM32A2004 MASM32 问题
【发布时间】:2010-09-19 23:55:37
【问题描述】:

我的 MASM32 汇编器有问题

以下代码是我从 MASM32 教程中复制的 Hello World 示例:

.model small
.stack
.data
    message   db "Hello world!", "$"
.code

_main   proc

    mov   ax,seg message
    mov   ds,ax

    mov   ah,09
    lea   dx,message
    int   21h

    mov   ax,4c00h
    int   21h

_main   endp
end _main

在尝试组装时,MASM32 抛出 A2004 错误并带有以下注释:

C:\masm32\console.asm(11) : 错误 A2004: 符号类型冲突

谁能帮我解决这个问题? 这段代码在 TASM 汇编器上工作得非常好,但现在我必须使用 MASM32,而且对于我之前证明可以与 TASM 一起工作的任何汇编代码,我都遇到了这个 A2004 错误。

如果这是相关的,我有一个运行 Win7 操作系统的 32 位 CPU。

谢谢。

【问题讨论】:

    标签: assembly masm x86-16 masm32


    【解决方案1】:

    我很确定 .model smallseg 是 x86 架构真正被分割(成 64K 块)的早期时代的产物。

    masm32 IDE 根本不喜欢它们(这并不意外,因为现在编写 32 位平面模型代码更为常见)。

    问题在于编辑器正在使用bin\assmbl.bat 文件来组装文件,它包含以下行:

    \masm32\bin\ml /c /coff %1.asm > \masm32\bin\asmbl.txt
    

    (使用/coff 选项)。这就是让汇编程序抱怨的原因。

    您可以通过恢复到命令行来使其工作。假设您的文件是tst.asm,请使用以下命令:

    c:\masm32\bin\ml.exe /c tst.asm
    c:\masm32\bin\link16 tst.obj.tst.exe,,,,
    

    您将拥有一个运行良好的tst.exe


    以下记录表明这是可行的:

    C:\masm32> type tst.asm
    .model small
    .stack
    .data
        message   db "Hello world!", "$"
    .code
    
    _main   proc
    
        mov   ax,seg message
        mov   ds,ax
    
        mov   ah,09
        lea   dx,message
        int   21h
    
        mov   ax,4c00h
        int   21h
    
    _main   endp
    end _main
    

     

    C:\masm32> bin\ml.exe /c tst.asm
    Microsoft (R) Macro Assembler Version 6.14.8444
    Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
    
     Assembling: tst.asm
    

     

    C:\masm32> bin\link16 tst.obj,tst.exe,,,,
    
    Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
    Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.
    

     

    C:\masm32> tst.exe
    Hello world!
    

    或者,编辑器是非常可配置的。如果您打开 menus.ini 文件进行编辑(先备份它,我不需要告诉您)并更改:

    &Assemble ASM file,\MASM32\BIN\Assmbl.bat "{b}"
    

    到:

    &Assemble ASM file,\MASM32\BIN\Assmbl.bat "{b}"
    Assemble ASM file (no COFF),\MASM32\BIN\Assmbl2.bat "{b}"
    

    您可以在 IDE 重新启动时添加新菜单项。

    您还需要将bin\assmbl.bat 复制到bin\assmbl2.bat 并从后者中删除/coff

    然后您可以在 IDE 中使用新的菜单选项进行正常编译。

    当然,您也必须对linkassemble/link 菜单项执行相同的操作。但是,既然您知道它是如何完成的,那应该不成问题。

    【讨论】:

    • 我终于想出了一个脚本来执行组装/链接命令。但感谢 IDE 提示,我不知道它是如此灵活。
    【解决方案2】:

    我使用 MASM 已经有一段时间了 - 但“消息”不是保留字吗?试试“_message”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多