|  | # MACRO: exit | 
|  | .macro exit nr | 
|  | ldi.l $r0, \nr; | 
|  | # Trap function 1: exit(). | 
|  | swi 1; | 
|  | .endm | 
|  |  | 
|  | # MACRO: pass | 
|  | # Write 'pass' to stdout and quit | 
|  | .macro pass | 
|  | # Use stdout. | 
|  | ldi.b $r0, 1; | 
|  | # Point to the string. | 
|  | ldi.l $r1, 1f; | 
|  | # Number of bytes to write. | 
|  | ldi.s $r2, 5; | 
|  | # Trap function 5: write(). | 
|  | swi 5; | 
|  | exit 0 | 
|  | .data | 
|  | 1: .asciz "pass\n" | 
|  | .endm | 
|  |  | 
|  | # MACRO: fail | 
|  | # Write 'fail' to stdout and quit | 
|  | .macro fail | 
|  | # Use stdout. | 
|  | ldi.b $r0, 1; | 
|  | # Point to the string. | 
|  | ldi.l $r1, 1f; | 
|  | # Number of bytes to write. | 
|  | ldi.s $r2, 5; | 
|  | # Trap function 5: write(). | 
|  | swi 5; | 
|  | exit 0 | 
|  | .data | 
|  | 1: .asciz "fail\n" | 
|  | .endm | 
|  |  | 
|  | # MACRO: start | 
|  | # All assembler tests should start with a call to "start" | 
|  | .macro start | 
|  | .text | 
|  | .global _start | 
|  | _start: | 
|  | .endm |