# MACRO: exit .macro exit nr mov \nr, d1; # Trap function 1: exit(). mov 1, d0; syscall; .endm # MACRO: pass # Write 'pass' to stdout and quit .macro pass # Trap function 5: write(). mov 5, d0; # Use stdout. mov 1, d1; # Point to the string. mov 1f, a0; mov a0, (12, sp); # Number of bytes to write. mov 5, d3; mov d3, (16, sp); # Trigger OS trap. syscall; exit 0 .data 1: .asciz "pass\n" .endm # MACRO: fail # Write 'fail' to stdout and quit .macro fail # Trap function 5: write(). mov 5, d0; # Use stdout. mov 1, d1; # Point to the string. mov 1f, a0; mov a0, (12, sp); # Number of bytes to write. mov 5, d3; mov d3, (16, sp); # Trigger OS trap. syscall; exit 0 .data 1: .asciz "fail\n" .endm # MACRO: start # All assembler tests should start with a call to "start" .macro start .data .global _stack _stack: .rept 8 .long 0 .endr .text .global _start _start: mov _stack, a0; mov a0, sp; .endm