INCLUDE Irvine16.inc

.data
    byteArray   BYTE 6 DUP(?)
    listSize = ($ - byteArray)
    aSum        WORD 0
    soffset = 0
.code
main PROC
    mov     ax, @data
    mov     ds, ax
    mov     cx, listSize
Loop1:
    mov     ax, 0
    movzx   ax, [byteArray + soffset]
    add     aSum, ax
    soffset = soffset + 1
    loop Loop1
    exit
main ENDP
END main

我得到的错误是错误“A2074:无法通过段寄存器访问标签”

我想通过ByteArray的使用S偏移循环。

有帮助吗?

解决方案

我不知道什么是在Irvine16.inc,但我敢打赌,它在某一点说.model small,...

如果您添加

ASSUME DS:_DATA

那么你的错误信息会消失,但我怀疑,如果这足以使程序运行。


好吧,我有一个想法。我想你应该切换到32位的实例。这就是段寄存器由操作系统设置和未使用的程序的平面模型。我刚下载尔湾的实施例和示例项目,这恰好是32位并装配和运行。

在怪异和扭曲的世界是x86机器代码,在16位模型比32位模型更复杂的相当多,至少从一个用户程序的点。

其他提示

此错误是由试图组装DOS程序引起的(.model!=平)到COFF obj文件。此外ML.EXE抛出error A2006:undefined symbol : DGROUP。来源应装配到旧的方式OMF文件。建文件,下面的命令行:

ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;

ml.exe是Visual Studio安装的一部分。 link16.exe尔湾的图书馆套件(”实施例节目和链接库的源代码的一部分。 ..“)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top