NUM_VALUES = 10 main: # $t0 i # $t1 index # $t2 other calculation li $t0, 0 #int i = 0; read_loop: bge $t0, NUM_VALUES, end_read_loop # if i >= NUM_VALUES goto end_read_loop li $v0, 5 #syscall readint syscall mul $t2, $t0, 4 #offset = i * 4 sw $v0, values($t2) #scanf("%d", &values[i]); addi $t0, $t0, 1 #i++; b read_loop end_read_loop: li $t2, NUM_VALUES sub $t2, $t2, 1 #$t2 = NUM_VALUES -1 mul $t2, $t2, 4 #$t2 = (NUM_VALUES -1) * 4 lw $t1, values($t2) #int index = values[NUM_VALUES - 1]; if_valid: bltz $t1, else_if_not_valid # if index < 0 bge $t1, NUM_VALUES, else_if_not_valid # if index >= NUM_VALUES mul $t2, $t1, 4 #offset = index * 4 lw $a0, values($t2) #values[index] li $v0, 1 syscall #printf("%d", values[index]); li $v0, 11 #putchar('\n') li $a0, '\n' syscall b if_valid_end else_if_not_valid: li $v0, 4 #printf("Illegal index\n"); la $a0, illegal_output syscall if_valid_end: li $v0, 0 #return 0 jr $ra .data values: .word 0:10 illegal_output: .asciiz "Illegal index\n"