elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Obtener segmento de datos como parametro para ensamblador
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Obtener segmento de datos como parametro para ensamblador  (Leído 1,580 veces)
nikitaKurev

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Obtener segmento de datos como parametro para ensamblador
« en: 13 Noviembre 2012, 19:04 pm »

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.

Código
  1. #include<stdio.h>
  2.  
  3. extern void myputs( char *str);  
  4.  
  5. char * str = "LOL";
  6.  
  7. void main( void) {
  8.  
  9. myputs(str);
  10. }
  11.  
  12. dosseg
  13. .MODEL small
  14. .CODE
  15. PUBLIC _myputs
  16.  
  17. _myputs PROC
  18.  
  19. push bp
  20. mov bp,sp  
  21. mov dl,[bp+6]
  22. mov dh,[bp+4]
  23. mov ah,09h  
  24. int 21h
  25. pop bp
  26. ret
  27. _myputs ENDP
  28.  
  29. END
  30.  


En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Obtener segmento de datos como parametro para ensamblador
« Respuesta #1 en: 16 Noviembre 2012, 23:16 pm »

Cuando el linker une los archivos objetos crea un solo ejecutable y en tu codigo de ASM no veo ningun otro segmento de datos así
que se supone que es el mismo segmento de datos el cual es utilizado por los arhivos objetos de los archivos .cpp/.c. has depurado tu applicacion?


En línea

nikitaKurev

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Obtener segmento de datos como parametro para ensamblador
« Respuesta #2 en: 1 Diciembre 2012, 08:34 am »

Ya solucioné el problema, faltaba un signo $ al final de la cadena declarada en C.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines