.data ; section declaration - variables only msg0: .ascii "Less than zero \n\0" len0 = . - msg0 ; length of our dear string msg1: .ascii "Greater than zero \n\0" len1 = . - msg1 msg2: .ascii "Equal to zero \n\0" len2 = . - msg2 .text ; section declaration - begin code .globl _main _main: # set up test li r4, 1 ; put test number into r4 li r2, 0 ; add zero preserve test number add. r3, r4, r2 ; put data into control register lessthan: ; if test less than zero #0 bge cr0, greaterthan ; if cr0 zero or greater jump to next section li r0, 4 ; syscall number (sys_write) li r3, 1 ; first argument: file descriptor (stdout) ; second argument: pointer to message to write lis r4, ha16(msg0) ; load top 16 bits of &msg addi r4, r4,lo16(msg0) ; load bottom 16 bits li r5, len0 ; third argument: message length sc ; call kernel b done greaterthan: ; if test greater than zero #1 ble cr0, equalto li r0, 4 ; syscall number (sys_write) li r3, 1 ; first argument: file descriptor (stdout) ; second argument: pointer to message to write lis r4, ha16(msg1) ; load top 16 bits of &msg addi r4, r4,lo16(msg1) ; load bottom 16 bits li r5, len1 ; third argument: message length sc ; call kernel b done equalto: ; if test equal to zero #2 bne cr0, done ; go to end if not zero li r0, 4 ; syscall number (sys_write) li r3, 1 ; first argument: file descriptor (stdout) ; second argument: pointer to message to write lis r4, ha16(msg2) ; load top 16 bits of &msg addi r4, r4,lo16(msg2) ; load bottom 16 bits li r5, len2 ; third argument: message length sc ; call kernel # and exit done: li r0, 1 ; syscall number (sys_exit) li r3, 1 ; first argument: exit code sc ; call kernel