diff options
Diffstat (limited to 'mips.html.markdown')
| -rw-r--r-- | mips.html.markdown | 42 | 
1 files changed, 42 insertions, 0 deletions
| diff --git a/mips.html.markdown b/mips.html.markdown index 9b176842..e56c9fce 100644 --- a/mips.html.markdown +++ b/mips.html.markdown @@ -287,5 +287,47 @@ hello_world .asciiz "Hello World\n"         # Declare a null terminated string          jr $ra +## MACROS ## +  _macros: +    # Macros are extremly useful for substituting repeated code blocks with a +    # single label for better readability +    # These are in no means substitutes for functions +    # These must be declared before it is used + +    # Macro for printing new lines (since these can be very repetitive) +    .macro println() +      la $a0, newline                     # New line string stored here +      li $v0, 4 +      syscall +    .end_macro + +    println()                             # Assembler will copy that block of +                                          # code here before running + +    # Parameters can be passed in through macros. +    # These are denoted by a '%' sign with any name you choose +    .macro print_int(%num) +      li $v0, 1 +      lw $a0, %num +      syscall +    .end_macro +     +    li $t0, 1 +    print_int($t0) +     +    # We can also pass in immediates for macros +    .macro immediates(%a, %b) +      add $t0, %a, %b +    .end_macro + +    immediates(3, 5) + +    # Along with passing in labels +    .macro print(%string) +      la $a0, %string +      li $v0, 4 +      syscall +    .end_macro +    print(hello_world)  ``` | 
