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:无法通过段寄存器访问标签”
我正在尝试使用soffset循环遍历byteArray。
答案 0 :(得分:2)
我不确定Irvine16.inc中有什么,但我敢打赌它在某些时候会说.model small,...
。
如果你添加
ASSUME DS:_DATA
然后你的错误消息就会消失,虽然我怀疑这是否足以使程序运行。
好的,我有个主意。我认为你应该切换到32位的例子。这是一个扁平模型,其中段寄存器由OS设置,不由程序使用。我刚下载了irvine示例和示例项目,它恰好是32位的汇编并运行。
在x86机器代码的奇怪和扭曲的世界中,16位模型比32位模型复杂得多,至少从用户程序的角度来看。
答案 1 :(得分:1)
此错误是由尝试将DOS程序(.model
!= flat)组装到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
是Irvine's library suite的一部分(“示例程序和链接库源代码...”)。