Impossible d'accéder à l'étiquette par le biais des registres de segment, erreur dans l'assemblage
Question
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
L'erreur que je reçois est erreur « A2074: ne peut pas accéder à l'étiquette par le biais des registres de segment »
Je suis en train d'utiliser la soffset en boucle à travers le byteArray.
La solution
Je ne sais pas ce qui est dans Irvine16.inc, mais je parie qu'il dit .model small,...
à un moment donné.
Si vous ajoutez
ASSUME DS:_DATA
alors vos messages d'erreur vont disparaître, même si je doute que c'est suffisant pour faire fonctionner le programme.
Ok, j'ai une idée. Je pense que vous devriez passer aux exemples 32 bits. C'est un modèle plat où les registres de segment sont mis en place par le système d'exploitation et non utilisés par les programmes. Je viens de télécharger les exemples et irvine l'exemple de projet, qui se trouve être 32 bits et n'assembler exécuter.
Dans le wierd et dans le monde tordu qui est le code machine x86, le modèle 16 bits est un peu plus complexe que le modèle 32 bits, au moins du point de vue d'un programme utilisateur.
Autres conseils
Cette erreur est due en essayant de monter un programme DOS (.model
! = Plat) au dossier d'un COFF
. De plus ML.EXE jette error A2006:undefined symbol : DGROUP
. devrait être assemblé à la source d'un ancien fichier OMF
de mode. Construire le fichier avec les lignes de commande suivantes:
ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;
ml.exe
fait partie de l'installation de Visual Studio. link16.exe
fait partie Suite bibliothèque Irvine ( » Exemples de programmes et le code source de bibliothèque de liens. .. »).