Kein Zugriff Etikett durch Segmentregister, Fehler bei der Montage
Frage
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
Der Fehler Ich erhalte fehler „A2074: nicht zugreifen kann Etikett durch Segmentregister“
Ich versuche, die soffset einer Schleife durch die byteArray zu verwenden.
Lösung
Ich bin sicher nicht das, was in Irvine16.inc, aber ich wette, es .model small,...
irgendwann sagt.
Wenn Sie fügen
ASSUME DS:_DATA
dann Fehlermeldungen gehen weg, obwohl ich bezweifle, das ist genug, um das Programm zum Laufen zu bringen.
Ok, ich habe eine Idee. Ich glaube, Sie zu den 32-Bit-Beispiele schalten soll. Das ist ein flaches Modell, bei dem die Segmentregister werden durch das Betriebssystem und nicht die, welche von Programmen aufgebaut. Ich habe gerade heruntergeladen die irvine Beispiele und das Beispielprojekt, das 32-Bits werden passiert hat zusammenbauen und laufen.
In den wierd und verdrehter Welt, die x86-Computer-Code, das 16-Bit-Modell ist ein bisschen komplexer als das 32-Bit-Modell, zumindest aus der Sicht eines Anwenderprogrammes.
Andere Tipps
Dieser Fehler wird verursacht, indem man versucht, ein DOS-Programm (.model
! = Flach) auf einen COFF
OBJ-Datei zu montieren. Zusätzlich wirft ML.EXE error A2006:undefined symbol : DGROUP
. Die Quelle soll auf eine alte Art und Weise OMF
Datei zusammengefügt werden. Erstellen Sie die Datei mit folgenden Befehlszeilen:
ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;
ml.exe
ist Teil der Visual Studio-Installation. link16.exe
ist Teil der Irvine Bibliothek Suite (“Beispielprogramme und Link Library-Quellcode. .. ").