No se puede acceder a través de la etiqueta registros de segmento, error en el montaje

StackOverflow https://stackoverflow.com/questions/1512734

  •  19-09-2019
  •  | 
  •  

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.

¿Fue útil?

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. .. ").

scroll top