Impossibile accedere etichette attraverso registri di segmento, errore di assemblaggio
Domanda
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'errore che sto ottenendo è errore "A2074: non può accedere etichette attraverso registri di segmento"
Sto cercando di utilizzare il soffset per scorrere il ByteArray.
Soluzione
Non sono sicuro di cosa c'è in Irvine16.inc, ma scommetto che sta dicendo .model small,...
a un certo punto.
Se si aggiunge
ASSUME DS:_DATA
quindi i vostri messaggi di errore andrà via, anche se dubito se questo è sufficiente a rendere l'esecuzione del programma.
Ok, ho un'idea. Penso che si dovrebbe passare agli esempi a 32 bit. Questo è un modello di appartamento in cui sono impostati i registri di segmento dal sistema operativo e non utilizzati dai programmi. Ho appena scaricato esempi Irvine e il progetto di esempio, che risulta essere di 32 bit ha assemblare ed eseguire.
Nel strano e contorto mondo che è codice macchina x86, il modello a 16 bit è un po 'più complessa rispetto al modello a 32-bit, almeno dal punto di vista di un programma utente.
Altri suggerimenti
Questo errore è causato dal tentativo di assemblare un programma DOS (.model
! = Piatto) ad un file COFF
obj. Inoltre ML.EXE getta error A2006:undefined symbol : DGROUP
. La sorgente deve essere montato ad un vecchio file di moda OMF
. Costruire il file con le seguenti righe di comando:
ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;
ml.exe
è parte dell'installazione di Visual Studio. link16.exe
fa parte del di Irvine suite di biblioteca (" Programmi di esempio e il codice sorgente della libreria di collegamento. .. ").