.data time: .asciiz "00:00:00\n" # array hh:mm:ss .text #initialize all variables in hex la $t0, time #start location of time li $t1, 0 # subsec = initial loop value li $t2, 0 # seconds = 0 li $t3, 0 # minutes = 0 li $t4, 0 # hours = 0 li $t5, 60 # set variable to set seconds # and minutes against li $t6, 13 # set variable to test hours against li $t7, 10 # set variable to test subsec against li $t8, 10 # add 10 seconds after 10 sec pass Loop: # main loop addi $t1,$t1,1 # increment subsec # goal is to do this enough times # at 30 inst/sec to equal 1 sec beq $t7,$t1,inSec # if subsec = 30 or equivalent j Loop # loop back to beginning inSec: li $t1,4 #reset subsec, with an offset 4 addi $s0,$t2,48 addi $t2,$t2,1 #increment seconds sb $s0, 7($t0) #save seconds byte la $a0, time # load address of time string to print li $v0, 4 # specify Print String service syscall beq $t2,10,incTenSec addi $t2,$t2,0 #increment seconds beq $t2,60,incMin #if seconds < 60 j Loop #Loop back to begining incTenSec: # li $t1, 1 #reset subsec, with offset li $t2,0 addi $s0,$t8, 39 sb $s0, 6($t0) #save seconds byte la $a0, time # load address of time string to print li $v0, 4 # specify Print String service #li $t2, 0 #reset seconds addi $t8,$t8, 1 #add 10 seconds increment beq $t2,$t5, incMin j Loop incMin: # li $t1,7 #reset subsec, with an offset li $t2,0 #reset seconds addi $t3,$t3,1 #increment minutes sb $s0, 5($t0) #save seconds byte la $a0, time # load address of time string to print li $v0, 4 # specify Print String service #li $t2, 0 #reset seconds #addi $t3,$t3, 1 #add minues increment #beq $t2,$t5, incMin j Loop beq $t3,$t5,incHrs #if minutes < 60 j Loop #Loop back to begining incHrs: li $t1,11 #reset subsec, with an offset addi $t4,$t4,1 #increment hours beq $t4,$t5,incHrs #if minutes < 60 j Loop #Loop back to begining #print and return to subsec #print: #ASCII number char start at d48 #add $t0, $zero, $a0 # starting address of array #jr $ra #return