• Miércoles 8 de Mayo de 2024, 00:52

Autor Tema:  Hola A Todos, Necesito Ayuda Sobre Esto  (Leído 1884 veces)

Victorn

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Hola A Todos, Necesito Ayuda Sobre Esto
« en: Miércoles 19 de Octubre de 2005, 03:33 »
0
hola a todos...

toy recien metiendome en el mundo assembler. Necesito que alguien me pueda ayudar, explicandome basicamente que es una macros, sus funciones y si pueden poner ejemplos basicos para enteder mas... ojala alguien me puede ayudar gracias de antemano.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Hola A Todos, Necesito Ayuda Sobre Esto
« Respuesta #1 en: Miércoles 19 de Octubre de 2005, 09:46 »
0
Cita de: "Victorn"
hola a todos...

toy recien metiendome en el mundo assembler. Necesito que alguien me pueda ayudar, explicandome basicamente que es una macros, sus funciones y si pueden poner ejemplos basicos para enteder mas... ojala alguien me puede ayudar gracias de antemano.
Las macros son construcciones de texto que son reemplazadas por el preprocesador dentro del codigo y no por en ensamblador en si. Estan disponibles en muchos lenguajes como por ejemplo en C (#define) y en assembly especificamente su sintaxis depende del ensamblador (MASM, NASM, FASM, etc) ya que no son parte del lenguaje ensamblador en si. Se suelen utilizar para funciones y tambien para reemplazar valores enteros constantes en el codigo.

Aca tenes un ejemplo para MASM de 32 bits:
Código: Text
  1.  
  2. CTEXT MACRO text:VARARG
  3.   LOCAL TxtName
  4.   .const
  5.     TxtName BYTE text, 0
  6.   .code
  7.     EXITM <OFFSET TxtName>
  8. ENDM
  9.  
  10.  

Con esta macro podes trabajar con cadenas como si estuvieras en C (practicamente) ya que lo que hace es declarar la cadena en la seccion de const y devolverla como resultado de la MACRO. Un ejemplo completo para MASM de 32 bits seria:

Código: Text
  1.  
  2. .386
  3. .model flat, stdcall
  4.  
  5. MessageBoxA PROTO STDCALL :DWORD, :DWORD, :DWORD, :DWORD
  6.  
  7. CTEXT MACRO text:VARARG
  8.   LOCAL TxtName
  9.   .const
  10.     TxtName BYTE text, 0
  11.   .code
  12.     EXITM <OFFSET TxtName>
  13. ENDM
  14.  
  15. .code
  16.   Main:
  17.     mov eax, CTEXT("Texto del mensaje")&#59;resultado de la MACRO (la direccion de memoria de esta cadena)
  18.     mov ecx, CTEXT("Titulo del mensaje")&#59;resultado de la MACRO (la direccion de memoria de esta cadena)
  19.     invoke MessageBoxA, 0, eax, ecx, 0
  20.   ret
  21. end Main
  22.  
  23.  

Mas info aca:
http://en.wikipedia.org/wiki/Macro

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.

Sr. ASM

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Hola A Todos, Necesito Ayuda Sobre Esto
« Respuesta #2 en: Viernes 21 de Octubre de 2005, 00:33 »
0
Hablando en MASM
tambien puedes poner tu macro en un archivo adicional, cosa que en el archivo principal, unicamente los puedes usar, previamente incluido el archivo de la macro.
Ejemplo de macros para visualizar cadena de caracteres en pantalla:

VisPantalla MACRO variable
lea dx, variable
mov ah, 09h
int 21h
ENDM

En el programa principal, para visualizar un mensaje, escribirias:

VisPantalla Mensaje1 (Mensaje1 debes definirlo en el segmento de datos)

Saludos
___________________________________________________

Nada esta dicho hasta el final.
Tenemos tiempo para aprender cada vez un poquito más
___________________________________________________