No se puede acceder a través de la etiqueta registros de segmento, error en el montaje
Pregunta
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
El error que estoy recibiendo es de error "A2074: no se puede acceder a través de los registros de segmento etiqueta"
Estoy tratando de utilizar el soffset a través del bucle de bytearray.
Solución
No estoy seguro de lo que está en Irvine16.inc, pero apuesto a que está diciendo .model small,...
en algún momento.
Si se agrega
ASSUME DS:_DATA
A continuación, los mensajes de error van a desaparecer, aunque dudo si eso es suficiente para que la ejecución del programa.
Ok, tengo una idea. Creo que se debe cambiar a los ejemplos de 32 bits. Eso es un modelo plano, donde los registros de segmento son establecidos por el sistema operativo y no utilizados por los programas. Acabo de descargar los ejemplos Irvine y el proyecto de ejemplo, que pasa a ser de 32 bits hizo montar y correr.
En el extraño y retorcido mundo que es código de máquina x86, el modelo de 16 bits es un poco más complejo que el modelo de 32 bits, al menos desde el punto de vista de un programa de usuario.
Otros consejos
Este error se debe a tratar de armar un programa de DOS (.model
! = Plano) a un archivo .obj COFF
. Además ML.EXE lanza error A2006:undefined symbol : DGROUP
. La fuente debe ser montado en un archivo OMF
chapado a la antigua. Construir el archivo con las siguientes líneas de comandos:
ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;
ml.exe
es parte de la instalación de Visual Studio. link16.exe
es parte de (" Programas de ejemplo href="http://www.kipirvine.com/asm/examples/index.htm" rel="nofollow"> y el código fuente de la biblioteca de enlaces. .. ").