Problema con include

Problema con include

de Federico Maximiliano Diaz Marcora -
Número de respuestas: 1

Tengo una rutina hexa7seg.s, dicha rutina la pruebo con Prueba1.s que al final tiene .INCLUDE "hexa7seg.s".
Aparte tengo otra rutina pbcda7seg.s, que la pruebo en Prueba2.s invocandola.

pbcda7seg.s invoca en sus líneas a hexa7seg.s.

Ahora, Prueba2.s al final tiene las lineas .ORG 0x0100
                                                           .INCLUDE "hexa7seg.s"
                                                           .INCLUDE "pbcda7seg.s"

y cuando lo compilo aparece esto:

UNDEFINED SYMBOLS
hexa7seg
Prueba2.o:C:\\Users\\usuario\\Desktop\\Micro/pbcda7seg.s:4: undefined reference to `hexa7seg'
Prueba2.o:C:\\Users\\usuario\\Desktop\\Micro/pbcda7seg.s:11: undefined reference to `hexa7seg'
C:\Users\usuario\Desktop\Micro\z80-tools\binutils-z80\z80-coff-objdump: 'Prueba2': No such file

 

Alguien puede decirme porqué? para mi está coherente la estructura

En respuesta a Federico Maximiliano Diaz Marcora

Re: Problema con include

de Leonardo Etcheverry -
La estructura parece ser correcta.

Asumiendo que el símbolo hexa7seg está definido en el archivo hexa7seg.s; el mensaje de error parece indicar que nunca se está llegando a incluir el contenido del archivo hexa7seg.s en Prueba2.s. Esto último parece raro ya que el .INCLUDE "pbcda7seg.s" si se está haciendo (de lo contrario el ensamblador no se estaría quejando de la linea pbcda7seg.s:4)

Pregunta: el órden de los includes que pusiste en al final de Prueba2.s es exactamente ese? (hexa7seg primero, pbcda7seg segundo)

Una precaución: al usar includes hay que tener cuidado de que no te queden directivas ".end" en los archivos que estan siendo incluidos. (El ensamblador termina de procesar tan pronto se encuentra una directiva .end)

Mi sugerencia para saber que está pasando en este caso es que le pidas al ensamblador que te liste exactamente que es lo que está intentando ensamblar (es decir, que te liste como queda el código fuente luego de sustituir todos los .include por el contenido literal del archivo que está siendo incluido.)

Eso lo harías, por ejemplo con en una consola cmd.exe con:

c:\camino\a\tus\herramientas\z80-tools\binutils-z80\z80-coff-as -z80 -al -o Prueba2.o Prueba2.s

Eso te va a dar más pistas.

Saludos,
Leonardo.