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
#include<stdio.h> extern void myputs( char *str); char * str = "LOL"; void main( void) { myputs(str); } 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