SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: el__dick en Jueves 7 de Diciembre de 2006, 12:13

Título: Problema Con Macro En Ensamblador
Publicado por: el__dick en Jueves 7 de Diciembre de 2006, 12:13
tengo una duda con un programa, esta recien empezao es para inicializar la pantalla para un juego con unas lineas,e creao la macro q te dibuja una linea horizontal en una linea y despues e creado otra macro para inicializar la pantalla, pero me da un error al ensamblar en una etoketa q utiliza la funcion lineah, en C++ q es el lenguaje q yo e usado no abria problema puesto q cada vez q llamas a una funcion las varialbes son propias de la funcion y al salir se pierden pero parece q aki no es lo mismo y no se como solucionarlo, adjunto el archivo asm para ver si alguien puede exarme un cable, el error será una tonteria pero al tener unos conocimiento muy cortos no se como arreglarlo.
GRACIAS. :hola:
Título: Re: Problema Con Macro En Ensamblador
Publicado por: Eternal Idol en Jueves 7 de Diciembre de 2006, 12:30
Los macros funcionan igual en C que en assembly en ese sentido.

Código: Text
  1.  
  2. #define lineah(Y,C)\
  3.   int x = Y;\
  4.   int z = C;
  5.  
  6. void main()
  7. {
  8.   lineah(2, 6);
  9.   lineah(2, 8);
  10. }
  11.  
  12. Output del compilador:
  13. error C2374: 'x' : redefinition; multiple initialization
  14. see declaration of 'x'
  15. error C2374: 'z' : redefinition; multiple initialization
  16. see declaration of 'z'
  17.  
  18.  

Podes intentar esto, no te aseguro que funcione pero parece que si esta bien ESO ...

Código: Text
  1.  
  2. ;pone una linea horizontal de un color
  3. lineah MACRO Y,C
  4.     mov cx,319
  5.          @@:
  6.     pixel cx,Y,C
  7.     dec cx
  8.     jnz @b
  9.  
  10.  

Info al respecto aca:
http://webster.cs.ucr.edu/AsmTools/MASM/MA...ide/Chap_03.htm (http://webster.cs.ucr.edu/AsmTools/MASM/MASMDoc/ReferenceGuide/Chap_03.htm)
Título: Re: Problema Con Macro En Ensamblador
Publicado por: el__dick en Jueves 7 de Diciembre de 2006, 12:36
Q va no me funciona, y no tengo ni idea de xq, porque yo se q en C++ no abría problema con eso, pero aki parece q cuando yamas a la funcion mas de una vez, es cuando surge el problema, yamandola una sola vez no hay problema.
Seguiré mirando e intentado cosas.
Gracias de toas maneras :D
Título: Re: Problema Con Macro En Ensamblador
Publicado por: Eternal Idol en Jueves 7 de Diciembre de 2006, 12:42
Eso con MASM ensambla perfectamente, otra cosa es que funcione, pero viendo el codigo esta claro que va cambiando la direccion con lo cual es correcto ... mejor revisa lo que estas haciendo en general y primero logra pintar una linea.
Título: Re: Problema Con Macro En Ensamblador
Publicado por: el__dick en Jueves 7 de Diciembre de 2006, 13:36
mmm pintar una linea lo pinta, yo esq no utilizo el masm xq no se , utilizo utilizo el tasm, weno es una macro prepara q man dao, intentaré ver como funciona el masm y probarlo, xq una linea si q compila y lo pinta prefectamente.
Gracias x todo .
ADIOS.
Título: Re: Problema Con Macro En Ensamblador
Publicado por: Eternal Idol en Jueves 7 de Diciembre de 2006, 13:42
Cita de: "el__dick"
mmm pintar una linea lo pinta, yo esq no utilizo el masm xq no se , utilizo utilizo el tasm, weno es una macro prepara q man dao, intentaré ver como funciona el masm y probarlo, xq una linea si q compila y lo pinta prefectamente.
Gracias x todo .
ADIOS.
Con TASM no se ... creo que se podia hacer compatible con la sintaxis de MASM ... busca informacion en Google o usa el MASM ...
Título: Re: Problema Con Macro En Ensamblador
Publicado por: robertogt en Viernes 8 de Diciembre de 2006, 03:36
Una macro lo que hace es escribir el codigo que contiene cada vez que se le llama, por eso al tratar de hacer un salto adentro de una macro y si se llama dos veces al mismo macro se crearán dos etiquetas con el mismo nombre, y entonces el compilador no sabria a que etiqueta saltar.

bueno esto se arregla declarando como local a la etiqueta que esta adentro del macro, de esta forma como que el compilador le asignara un nombre único a cada etiqueta que se crea.

Código: Text
  1.  
  2. lineah MACRO Y,C
  3. local bucle  &#59; <---------este es el unico cambio que hice
  4.     mov cx,319
  5.   bucle:
  6.     pixel cx,Y,C
  7.     dec cx
  8.     jnz bucle
  9. ENDM
  10.  
  11.  

con este cambio si compila tu codigo
Título: Re: Problema Con Macro En Ensamblador
Publicado por: Eternal Idol en Viernes 8 de Diciembre de 2006, 08:07
Cita de: "robertogt"
con este cambio si compila tu codigo
Con ese cambio TAMBIEN ENSAMBLA.
Título: Re: Problema Con Macro En Ensamblador
Publicado por: el__dick en Viernes 8 de Diciembre de 2006, 12:07
OK muxas gracias, al final decidi acer una subrutina y ya está, pero asi lo se para las proximas veces, muxas gracias. ADIOS :lol:
Título: Re: Problema Con Macro En Ensamblador
Publicado por: Eternal Idol en Viernes 8 de Diciembre de 2006, 12:15
Jaja, esta bien, mientras te funcione  :kicking: