Ensamblador - Enlazar módulos

 
Vista:

Enlazar módulos

Publicado por Rafa (1 intervención) el 23/03/2007 01:18:05
Hola a todos.
Tengo un problema que me está dando algunos dolores de cabeza. Se trata de unir código C con código ensamblador. Todo el proyecto se construye bien. En C compilo para el modelo tiny de 64kBytes para código, datos y pila. El problema es que el ejecutable generado no localiza bien la zona de datos. Tengo que sumar el PSP (100h) de forma manual a todos los datos para que se direccionen de forma correcta. ¿Qué error cometo?

Como ejemplo de C, podemos poner:

main.c
---------

#include "printf.h"

int main(void)
{
my_printf("Saludos");
return 0;
}

El código de printf.c es:
-------------------------------
int printk(char *str,...)
{
char *ptr;
va_list args;

va_start(args,str);


for(ptr=str; *ptr; ptr++)
{
if(*ptr!='%')
putchar(*ptr);
else
{
switch(*(++ptr))
{
case 'd': putint(va_arg(args,int));
break;

case 'c': putchar(va_arg(args,char));
break;

default : putchar(*ptr);
}
}
}

va_end(args);
return 0;
}

COMPILACIÓN
--------------------
TASM /ml putchar.asm => putchar.obj
TASM /ml putint.asm => putint.obj
TCC -mt -c printf.c => printf.obj
TCC -mt -c main.c => main.obj

Enlazado: TLINK main.obj printf.obj putint.obj putchar.obj

Esto genera main.exe, pero no imprime la cadena "Saludos" porque no la localiza en el segmendo de datos. Está desplazada 100h bytes más.

Se agradece alguna ayuda.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder