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 | |||||||||||