题
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
是尔湾的图书馆套件(”实施例节目和链接库的源代码的一部分。 ..“)。
不隶属于 StackOverflow