• Domingo 17 de Noviembre de 2024, 17:34

Autor Tema:  Problema Con Macro En Ensamblador  (Leído 3043 veces)

el__dick

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Problema Con Macro En Ensamblador
« en: Jueves 7 de Diciembre de 2006, 12:13 »
0
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:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Macro En Ensamblador
« Respuesta #1 en: Jueves 7 de Diciembre de 2006, 12:30 »
0
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

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

el__dick

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Problema Con Macro En Ensamblador
« Respuesta #2 en: Jueves 7 de Diciembre de 2006, 12:36 »
0
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

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Macro En Ensamblador
« Respuesta #3 en: Jueves 7 de Diciembre de 2006, 12:42 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

el__dick

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Problema Con Macro En Ensamblador
« Respuesta #4 en: Jueves 7 de Diciembre de 2006, 13:36 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Macro En Ensamblador
« Respuesta #5 en: Jueves 7 de Diciembre de 2006, 13:42 »
0
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 ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

robertogt

  • Miembro activo
  • **
  • Mensajes: 97
  • Nacionalidad: gt
    • Ver Perfil
    • http://robertux.wordpress.com
Re: Problema Con Macro En Ensamblador
« Respuesta #6 en: Viernes 8 de Diciembre de 2006, 03:36 »
0
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
Un dia sin sol es como, ya sabes, ... noche

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Macro En Ensamblador
« Respuesta #7 en: Viernes 8 de Diciembre de 2006, 08:07 »
0
Cita de: "robertogt"
con este cambio si compila tu codigo
Con ese cambio TAMBIEN ENSAMBLA.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

el__dick

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: Problema Con Macro En Ensamblador
« Respuesta #8 en: Viernes 8 de Diciembre de 2006, 12:07 »
0
OK muxas gracias, al final decidi acer una subrutina y ya está, pero asi lo se para las proximas veces, muxas gracias. ADIOS :lol:

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema Con Macro En Ensamblador
« Respuesta #9 en: Viernes 8 de Diciembre de 2006, 12:15 »
0
Jaja, esta bien, mientras te funcione  :kicking:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.