User Tools

Site Tools


user:ryoung12:eoce:asm:macros

Q: What is a macro?

A: A macro is a small piece of code that be reused later.


Q: How do I create one in ASM?

A: Here is an example of a macro to exit the program:

%macro         exitProgram
   mov         eax, 1
   mov         ebx, 0
   int         0x80
%endmacro

Macro start with %macro followed by the name of the macro. Then the macro's code. To end the macro you use %endmacro.


Q: Where do I put the macro in my ASM file?

A: Macros are typically placed in the segment .bss section of the program.

segment  .bss
   %macro      exitProgram
      mov      eax, 1
      mov      ebx, 0
      int      0x80
   %endmacro


Q: How do I call a macro?

A: To call our exitProgram from before macro, we just use the name of the macro as it's call.

_start:
   enter       0, 0
   pusha
   [some code]
   exitProgram
   popa
   leave
hlt


Q: Can I pass information to a macro?

A: Sure, you just define how many parameters are going to be passed right after the name of the macro. These values would then be accessed inside the macro using % followed by the number corresponding to it's place in the passed parameters list, starting from 1.

%macro         print 2
   mov         eax, 0x4
   mov         ebx, 0x1
   mov         ecx, %1
   mov         edx, %2
%endmacro

This could then be called using:

   print       msg1, msg1len

As a result, the contents of msg1, of length defined by msg1len would be displayed to stdout.


Q: Can a macro make use of another macro?

A: It sure can. Just call it inside of the macro like you would in your program.

segment  .data
   newline  db 0xA, 0x0
 
segment  .bss
   %macro      printNewline
      print    newline, 0x2
   %endmacro


Q: Is possible to put a whole bunch of macros into an external file and include them in multiple programs?

A: Yes, you would use the %include directive at the top of your asm file. Typically macro files will use a .mac extension.

%include       "myMacros.mac"

Your macro file would then have a segment .bss section with your macro definitions:

segment  .bss
 
%macro         exitProgram
   mov         eax, 1
   mov         ebx, 0
   int         0x80
%endmacro
 
%macro         print 2
   mov         eax, 0x4
   mov         ebx, 0x1
   mov         ecx, %1
   mov         edx, %2
%endmacro

Q: Can I include multiple macro files?

A: Just use another %include statement.

%include       "file1.mac"
%include       "file2.mac"
user/ryoung12/eoce/asm/macros.txt · Last modified: 2010/05/22 01:51 by ryoung12