【问题标题】:MASM32 error A2006, error A2074 and warning A4023MASM32 错误 A2006、错误 A2074 和警告 A4023
【发布时间】:2013-06-15 17:55:41
【问题描述】:

我是组装新手。我有以下我正在学习的书中的代码。我下载了 MASM32。我的电脑是Win7 64位。我尝试构建以下代码:

.model small
.stack 100h

.data
a dw 2
b dw 5
sum dw ?

.code
main proc
mov ax, @data
mov ds, ax

mov ax, a
add ax, b
mov sum, ax

mov ax, 4c00h
int 21h

main endp
 end main

很遗憾,我收到以下错误:

Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: C:\masm32\test.asm
C:\masm32\test.asm(11) : error A2006: undefined symbol : DGROUP
C:\masm32\test.asm(14) : error A2074: cannot access label through segment registers
C:\masm32\test.asm(15) : error A2074: cannot access label through segment registers
C:\masm32\test.asm(16) : error A2074: cannot access label through segment registers
C:\masm32\test.asm(22) : warning A4023: with /coff switch, leading underscore required for start address : main
_
Assembly Error
Press any key to continue . . .

我已经搜索了解决方案。我可以通过在.data 行之前添加ASSUME DS:_DATA 来解决error A2074:。我从这篇文章中得到它:Cannot access label through segment registers, error in assembly 但不幸的是,该解决方案没有解释为什么以及这是什么?

为什么会出现这些错误以及如何解决它们?我是新手,一开始需要一些细节和一步一步的。

【问题讨论】:

  • 这似乎是 16 位 DOS 代码,而不是您通常在 32(或 64)位窗口下使用的代码。

标签: assembly masm32


【解决方案1】:

您需要使用 16 位 Microsoft Segmented Linker 来链接 16 位 DOS 代码,而不是 MASM32 附带的增量链接器,从 MS 下载: 16 bit Microsoft Segmented Linker 5.60

解压缩到一个目录,然后将 link.exe 重命名为 link16.exe 之类的名称,并将其放入 /masm32/bin 目录中。您现在可以将 link16 用于 16 位 DOS 应用程序和链接用于 32 位应用程序。

您还需要使用正确的命令行参数来汇编 16 位代码,例如:assembly fatal error LNK1190: invalid fixup found, type 0x0001 由于您使用的是 64 位操作系统,因此您无法再本地运行 16 位 DOS 应用程序,您需要使用模拟器。我用D-Fend Reloaded

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多