Array: assembler
.text
.globl  main
main:
la  $s0, size # initialize registers
lw $s1, 0($s0) # $s1 = size
ori $s2, $0, 0 # $s2 = sum
ori $s3, $0, 0 # $s3 = pos
ori $s4, $0, 0 # $s4 = neg
# <init>
ori $s5, $0, 0 # $s5 = i
la  $s6, arr # $s6 = &arr
# if (<cond>)
L1: bge  $s5, $s1, DONE  
#    <for-body>
lw   $s7, 0($s6) # $s7 = arr[i]
addu  $s2, $s2, $s7 # sum += arr[i]
blez  $s7, NEG # if ! (arr[i] > 0)
addu  $s3, $s3, $s7 # pos += arr[i];
j UPDATE # goto UPDATE
NEG: bgez $s7, UPDATE # if ! (arr[i] < 0)
addu  $s4, $s4, $s7 # neg += arr[i];
UPDATE: #    <update>
addi  $s5, $s5, 1 # i++
addi  $s6, $s6, 4 # move array pointer
j L1 # goto L1
DONE:
# initialize data
.data
size: .word 10
arr: .word 12, -1, 8, 0, 6, 85, -74, 23, 99, -30