Hola. Quiero saber como puedo obtener el segmento de datos desde un programa en C. Básicamente lo que quiero hacer es imprimir una cadena que declaré desde C mediante una función en ensamblador. La función la declaré como externa, respetando la interfaz para llamar funciones en ensamblador.
En el código de ensamblador, leo el parámetro, que contiene la dirección o offset de la cadena. El problema es utilizó la interrupción 21 servicio 09h para imprimir un mensaje en la consola de DOS. Y para utilizar esta interrupción se requerie que la dirección efectiva de la cadena se encuentre en DS:DX, entonces el dilema se encuentra en que el segmento de datos debe ser el de C y no el del programa de ensamblador. Existe una forma entonces de pasar el segmento de datos como parámetro al ensamblador?
Como compilador de C uso Turbo C de Borland y como ensamblador uso TASM.
En el código de ensamblador, leo el parámetro, que contiene la dirección o offset de la cadena. El problema es utilizó la interrupción 21 servicio 09h para imprimir un mensaje en la consola de DOS. Y para utilizar esta interrupción se requerie que la dirección efectiva de la cadena se encuentre en DS:DX, entonces el dilema se encuentra en que el segmento de datos debe ser el de C y no el del programa de ensamblador. Existe una forma entonces de pasar el segmento de datos como parámetro al ensamblador?
Como compilador de C uso Turbo C de Borland y como ensamblador uso TASM.
Código (c) [Seleccionar]
#include<stdio.h>
extern void myputs( char *str);
char * str = "LOL";
void main( void) {
myputs(str);
getchar();
}
dosseg
.MODEL small
.CODE
PUBLIC _myputs
_myputs PROC
push bp
mov bp,sp
mov dl,[bp+6]
mov dh,[bp+4]
mov ah,09h
int 21h
pop bp
ret
_myputs ENDP
END